容器

在 Apple 芯片 Mac 上
跑容器:工具与镜像架构

在 Apple 芯片 Mac 上运行容器,常用的是 Docker Desktop、OrbStack 和 Colima。三者底层都是 Linux 虚拟机,差别在许可方式、资源占用和易用性。本文对比三者,并说明 arm64 与 amd64 镜像的区别、怎样用 Rosetta 加速 amd64 镜像、如何构建多架构镜像以及分配 CPU 和内存。

三万主机 · 更新于

01 / COMPARE

Docker Desktop、OrbStack、Colima 对比

工具许可与收费模式特点
Docker Desktop个人、教育、非商业开源项目和符合条件的小型企业可免费使用;超过规模门槛的商业使用需要付费订阅官方出品,功能全(Kubernetes、扩展、图形界面),资源占用相对较高
OrbStack个人使用免费,商业使用需要付费许可启动快、占用低,图形界面简洁,同时提供 Linux 虚拟机
Colima开源免费纯命令行,基于 Lima,配合 Homebrew 安装的 docker CLI 使用,适合服务器和脚本化

具体的规模门槛和价格会调整,商用前请阅读各自的许可条款。此外,Apple 也开源了自己的 container 命令行工具,以轻量虚拟机运行 Linux 容器,对系统版本有要求,可以关注。

资料来源:Docker 定价与许可 · OrbStack 定价 · Colima(GitHub) · apple/container(GitHub)

远程 Mac 上没有人看图形界面时,Colima 最省事:

brew install colima docker docker-compose docker-buildx
colima start --cpu 4 --memory 8 --disk 60
docker run --rm hello-world
02 / ARCH

arm64 与 amd64 镜像

Apple 芯片是 arm64 架构。拉取镜像时,Docker 会从多架构镜像清单里自动选择 linux/arm64 版本;如果镜像只有 linux/amd64,就需要转译运行。

docker image inspect nginx --format '{{.Architecture}}'   # 查看本地镜像架构
docker buildx imagetools inspect nginx:latest            # 查看远端支持哪些平台
docker run --rm --platform linux/amd64 alpine uname -m   # 强制运行 amd64,输出 x86_64

常见坑:在 Mac 上构建的镜像默认是 arm64,推到 x86 服务器上会报 exec format error。部署到 x86 服务器的镜像要明确指定平台,或构建多架构镜像。

03 / ROSETTA

用 Rosetta 加速 amd64 镜像

amd64 镜像可以用 QEMU 或 Rosetta 转译。Rosetta 通常更快,三个工具都支持:

  • Docker Desktop:在「Settings → General」中勾选使用 Rosetta 进行 x86_64/amd64 模拟(需要 Virtualization framework)。
  • OrbStack:默认使用 Rosetta 运行 amd64 容器。
  • Colima:使用 vz 虚拟机类型并开启 Rosetta。
softwareupdate --install-rosetta --agree-to-license   # 先确保系统已安装 Rosetta
colima start --vm-type vz --vz-rosetta

转译仍有额外开销,构建和测试的主力流程尽量用原生 arm64 镜像。如果团队里有人用 Intel 电脑、线上是 x86 服务器,而开发机是 Apple 芯片,可以在 docker-compose.yml 里对个别只有 amd64 版本的服务写明 platform: linux/amd64,其余服务保持原生架构,这样问题范围清楚,不会整套环境都跑在转译下。

遇到 amd64 容器启动即崩溃、或者报出与 CPU 指令相关的错误时,先换成该软件的 arm64 版本或更新的镜像标签;很多常用镜像(数据库、消息队列、各语言基础镜像)早已提供 arm64 版本。

04 / BUILDX

构建多架构镜像

用 buildx 一次构建 arm64 和 amd64 两个版本,并推送到镜像仓库:

docker buildx create --name multi --use
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t registry.example.com/team/app:1.0 \
  --push .

amd64 部分在 Mac 上是转译构建的,编译型项目会明显慢一些。Dockerfile 里可以用 BUILDPLATFORM 与 TARGETPLATFORM 做交叉编译(例如 Go 设置 GOARCH),避免整个构建都在转译环境中执行。

05 / RESOURCES

资源分配

容器跑在虚拟机里,虚拟机能用多少 CPU 和内存决定了容器的上限。Docker Desktop 在「Settings → Resources」里调整;Colima 用启动参数,修改后需要重启虚拟机;OrbStack 按需使用内存,可在设置里限制上限。

colima stop
colima start --cpu 8 --memory 16 --disk 100
colima list            # 查看当前分配
docker stats           # 查看各容器实时占用

经验做法:给虚拟机留出宿主机一半左右的内存,剩下的给 IDE、浏览器和系统。数据库、搜索引擎这类服务较多时,统一内存大的机型更从容。三万主机的 Mac mini 与 Mac Studio 按月出租,可以在 机型对比 里按内存挑选。

FAQ

常见问题

Mac 上的 Docker 能运行 macOS 容器吗?

不能。Docker Desktop、OrbStack、Colima 都是在一台 Linux 虚拟机里运行 Linux 容器。需要隔离的 macOS 环境,要用 macOS 虚拟机或直接用独立的 Mac。

amd64 镜像在 Apple 芯片上能跑吗?

大多数可以,通过 Rosetta 或 QEMU 转译运行,但速度比原生 arm64 慢,少数依赖特定 CPU 指令或内核特性的镜像可能无法运行。优先使用带 arm64 版本的多架构镜像。

三个工具可以同时装吗?

可以安装,但同时运行会占用双份内存,docker 命令也只会连到当前选中的那一个。用 docker context ls 查看,用 docker context use 切换。

微信
微信客服二维码扫码加微信客服手机上长按二维码识别
Telegram 客服