devAlice
← Mac

Mac 上的 Docker — Docker Desktop vs OrbStack vs colima + Apple Silicon 配置

在 Apple Silicon Mac 上对比三种容器运行时。许可证、性能、内存用量与兼容性——根据场景选择最适合的方案。

提到「Mac 上的 Docker」,大多数人第一时间想到 Docker Desktop。但自 2021 年许可证变更(员工超过 250 人或营收超过 1000 万美元的企业需付费)后,替代方案迅速追赶上来。OrbStackcolima 是两大主流替代品,在 Apple Silicon 上都比 Docker Desktop 更轻量。

我认为容器运行时的选择不只是工具偏好,而是许可证合规与资源效率的权衡。以前 Docker Desktop 是默认选择;如今 Apple Silicon 上 OrbStack 的内存占用和启动速度使它成为个人开发机的更合理方案,因为资源效率直接影响日常开发体验。

本指南在 Apple Silicon(M1-M4)+ macOS 14+ 上对三种运行时进行对比,并提供决策表帮助你选择。确定选择后,按对应章节完成实际安装步骤。

TL;DR

运行时许可证空闲内存启动时间UIdocker composek8sApple Silicon ARM
Docker Desktop大型企业需付费约 2GB约 10 秒
OrbStack个人免费,企业付费约 500MB约 2 秒✅(原生)
colima开源(MIT)约 600MB约 5 秒❌ 仅 CLI✅(可选)
  • 企业政策允许 + 需要 UI → Docker Desktop
  • 个人机器 + 追求快速轻量 → OrbStack(强烈推荐)
  • 完全免费 + 仅用 CLI → colima

前提条件

  • macOS 14+ + Apple Silicon(M1-M4)推荐
  • Homebrew(Mac 初始配置
  • 16GB 或更多内存(8GB 在构建时会卡顿)

1. 决策表 — 如何选择

选 Docker Desktop 的情形

  • 需要 Kubernetes UI — Docker Desktop 的 k8s 选项卡是最简单的
  • 公司标准 — 不遵循团队选择会增加排查问题的成本
  • 团队混用 Mac 和 Windows — Docker Desktop 提供最一致的体验

选 OrbStack 的情形

  • 个人机器 + 性价比优先 — 个人使用免费,速度约为 Docker Desktop 的 4 倍
  • 同时想要轻量 Linux 虚拟机 — OrbStack 捆绑了 Docker + Linux 机器管理器
  • 内存有限 — 空闲约 500MB

选 colima 的情形

  • 需要避免商业许可证 — MIT 开源,企业使用安全
  • 自动化优先 — 仅 CLI,完全由配置文件驱动
  • CI / 开发容器兼容 — 基于 Lima,与 macOS 集成良好

如果无法决定,先试用 OrbStack 30 天免费版。体验最流畅。


2. Docker Desktop 设置 — 10 分钟

2.1 安装

brew install --cask docker

或从 docker.com 下载。Apple Silicon 构建会自动选择。

2.2 首次运行

Cmd + Space → Docker 或 Spotlight。菜单栏出现 🐳 图标即表示已运行。

docker --version       # Docker version 27.x.x
docker run hello-world # 标准 hello-world 容器

2.3 资源调优(必须)

Docker Desktop → 设置 → 资源:

  • CPU:主机 CPU 数量的一半(8 核机器配置 4 核)
  • 内存:主机内存的 25-50%(16GB 机器配置 4-8GB)
  • 磁盘映像大小:60GB 以上(镜像积累很快)

默认空闲约 2GB。按上述调优。

2.4 许可证说明

企业规模许可证
员工数不足 250 人 且 营收不足 1000 万美元免费(含个人)
超过上述门槛付费(从 $9/座位/月起)

使用前请确认公司政策。官方许可证页面


3. OrbStack 设置 — 5 分钟

3.1 安装

brew install --cask orbstack

或访问 orbstack.dev

3.2 首次运行

启动 OrbStack → 接受许可证 → Docker 命令立即可用。

docker --version       # Docker version 27.x.x(OrbStack 捆绑)
docker run hello-world

如果同时安装了 Docker Desktop,它们的 PATH 条目会冲突。使用 OrbStack 前请退出 Docker Desktop。

3.3 OrbStack 独特优势

Linux 虚拟机(可选) — 1 秒内启动轻量 Ubuntu 虚拟机。SSH 直接可用。

orb create ubuntu my-ubuntu
orb -m my-ubuntu        # SSH 进入

文件系统集成 — 容器文件直接挂载到 ~/OrbStack/。可从主机执行 code ~/OrbStack/docker/...

自动资源伸缩 — 无需显式设置内存。随使用量自动扩缩。

3.4 许可证

用途价格
个人(学习、开源)免费
企业(1 个以上座位)$8/月(Pro)— 比 Docker Desktop 便宜

4. colima 设置 — 10 分钟

4.1 安装

brew install colima docker docker-compose

docker CLI 是独立的。colima 只提供后端虚拟机。

4.2 启动

colima start
# 首次运行时 colima 会启动 Lima 虚拟机并下载约 500MB
 
docker --version
docker run hello-world

默认:2 CPU、2GB 内存、60GB 磁盘。修改方法:

colima start --cpu 4 --memory 8 --disk 100

配置保存在 ~/.colima/default/colima.yaml

4.3 生命周期

colima status       # 是否运行中?
colima stop         # 停止(重启后需重新 start)
colima delete       # 删除虚拟机本身(镜像 + 卷将丢失)

4.4 Kubernetes(可选)

colima start --kubernetes
kubectl get nodes   # 一个 colima 节点

基于 k3s,轻量,但无法替代真正的生产级集群。


5. Apple Silicon 上的常见问题

5.1 ARM 镜像 vs AMD64 镜像

大多数官方镜像(nodepythonnginx)已提供 ARM64 构建。偶尔会看到:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)

解决方法:

# 1)找同一镜像的 ARM 标签
docker pull --platform linux/arm64 myimage:tag
 
# 2)如无法避免,强制使用 AMD64(Rosetta 模拟 — 较慢)
docker run --platform linux/amd64 myimage:tag

5.2 卷挂载性能

macOS 文件系统 → Linux 容器的挂载在每种运行时上都较慢。在大型 node_modules、Rails 应用等场景中最为明显。

  • OrbStack:最快(Virtio-fs 优化)
  • Docker Desktop:启用 VirtioFS(设置 → 通用 → "Use Virtio-fs")
  • colimacolima start --mount-type virtiofs(Lima 1.x+)

将源码保存在 docker volume — 速度快,但 IDE 集成较复杂。

5.3 buildx 多架构构建

在 CI 中需要同时推送 AMD64 和 ARM64 时:

docker buildx create --use --name multiarch
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push .

Docker Desktop 和 OrbStack 已捆绑 buildx。colima 可能需要额外设置。


6. 迁移 — Docker Desktop → OrbStack

镜像和卷按运行时隔离,无法自动迁移。顺序:

# 1. 从 Docker Desktop 导出重要镜像/卷
docker save myimage:tag -o myimage.tar
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
  tar czf /backup/mydata.tar.gz -C /data .
 
# 2. 退出 Docker Desktop
osascript -e 'quit app "Docker"'
 
# 3. 启动 OrbStack,然后导入
docker load -i myimage.tar
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
  tar xzf /backup/mydata.tar.gz -C /data

实际上,大多数人会跳过迁移:在 OrbStack 中重新 docker compose up 即可重建一切。


7. 验证

以下命令在你选择的运行时上均应成功:

# 1. 基础
docker --version
docker run hello-world
 
# 2. 容器 + 端口
docker run -d --name nginx -p 8080:80 nginx
curl http://localhost:8080
docker stop nginx && docker rm nginx
 
# 3. 卷挂载
mkdir -p /tmp/dockertest && echo "hello" > /tmp/dockertest/test.txt
docker run --rm -v /tmp/dockertest:/data alpine cat /data/test.txt
 
# 4. compose
docker compose version
 
# 5. buildx
docker buildx version

8. 故障排除

Cannot connect to the Docker daemon

  • 运行时是否真的在运行?检查 Docker Desktop 菜单栏图标、orb statuscolima status
  • docker context ls — 当前激活的 context 是否正确?
    • 安装了多个运行时时,显式切换:docker context use defaultcolima

镜像构建太慢

  • 确认 BuildKit 已启用:DOCKER_BUILDKIT=1(Docker 23+ 默认启用)
  • 利用缓存:将频繁变更的行放在 Dockerfile 靠后的位置
  • .dockerignore 缩小上下文(排除 .gitnode_modules

docker-compose vs docker compose

  • 新版(v2):docker compose(空格)。推荐
  • 旧版(v1):docker-compose(连字符)。接近 EOL
  • 所有运行时均捆绑 v2。如需兼容 v1 写法,可设置别名:
    alias docker-compose='docker compose'

docker run 后内存泄漏

  • macOS 活动监视器 → com.docker.virtualizationOrbStack Helper 显示内存异常
  • 重启运行时:Docker Desktop「重启」/ orb restart / colima restart

卷挂载显示为空

  • 检查主机路径权限:macOS 的「文稿」「桌面」「下载」等需要明确授权
  • 系统设置 → 隐私与安全 → 文件和文件夹 → 为运行时授予访问权限

在容器内向挂载文件写入时出现 permission denied

  • 容器 UID 与主机 UID 不匹配
  • 修复方法:docker run -u $(id -u):$(id -g) ... 或在 Dockerfile 中设置 USER

9. 对比 — Docker Desktop vs WSL2(Mac vs Windows 用户)

混合 Mac/Windows 团队中的常见问题。

场景推荐
Mac 个人机器OrbStack
Mac 企业机器(大型企业)Docker Desktop(已获许可)或 colima
Windows + WSL2docker-wsl2 — 推荐原生 WSL docker
团队统一规定以公司选择为准

在跨 OS 团队中,统一 docker-compose.yml/Dockerfile,运行时差异基本消失。


参考资料

更新日志

  • 2026-05-16:首次发布。Docker Desktop · OrbStack · colima 对比 + Apple Silicon 常见问题 + 迁移 + 六个故障排除案例。