告别Docker Desktop:用Colima在macOS上优雅运行Docker容器
📅 2025-03-07 | 🖱️
在过去的这些年中,我一直在探索和优化自己的开发环境配置。从最初的VSCode配合Remote Ubuntu Server的设置,到现在升级使用更智能的Cursor,我的开发环境经历了一个渐进式的演变。目前,我主要采用以下三种配置方案:
- 在MacBook上运行Cursor,通过Remote SSH扩展连接到Ubuntu服务器
- 在MacBook上运行Cursor,结合Remote SSH和Dev Containers扩展,连接到Ubuntu服务器上的Docker容器
- 通过Chrome PWA方式在MacBook或iPad Pro上使用Code-Server,通过HTTPS协议远程连接Ubuntu服务器
这些配置方案虽然入口不同,但都有一个共同点:真正的开发环境都位于后端的Ubuntu服务器中。这意味着,当需要使用Docker时,我一直享受着Ubuntu Linux上的原生Docker体验。
最近入手一台MacMini M4,计划将其打造成一个容器化开发环境。在macOS上运行Docker容器,主要有三个选择:Docker Desktop、OrbStack和Colima。经过对比研究,发现Docker Desktop虽然功能完整但较为臃肿,且其商业许可政策对企业用户不够友好;OrbStack提供了最为流畅的用户体验,但其专业版需要付费,同时作为闭源软件也让人对其长期发展持观望态度。权衡之下,我选择了开源免费的Colima作为Docker运行时方案,它轻量优雅,完全能满足的开发需求。
- 2021年8月31日,Docker公司将Docker Desktop转换为Docker Personal,并调整了授权政策 - 仅对个人开发者、小型企业、教育机构和非商业开源项目免费开放。企业用户需要购买商业订阅才能继续使用。
- 值得一提的是,最近几年,在我的Ubuntu服务器上,我已经转向使用更轻量级的nerdctl + containerd组合作为容器运行时方案,完全替代了传统的Docker引擎。这套方案运行开发环境也很稳定。
什么是Colima #
Colima(Container on Lima)是一个轻量级的容器运行时管理工具,专为macOS(同时也支持Linux)设计,提供了一种简单优雅的方式来运行容器。它基于Lima项目,后者为macOS提供了类似WSL2的Linux虚拟机环境,具备自动文件共享和端口转发等特性。
Colima的主要特点包括:
- 支持多种芯片架构 - 完美支持搭载Intel和Apple Silicon芯片的Mac设备,以及Linux系统
- 简单的命令行界面 - 提供直观的CLI操作方式,并采用合理的默认配置
- 自动端口转发 - 智能处理容器端口映射,简化网络配置
- 卷挂载支持 - 支持在容器和主机之间共享文件系统
- 多实例管理 - 可以同时运行多个独立的Colima实例
- 灵活的运行时选择 - 支持多种容器运行时:
- Docker(可选择性集成Kubernetes)
- Containerd(可选择性集成Kubernetes)
- Incus(支持容器和虚拟机)
与Docker Desktop相比,Colima的设计理念更加简洁,它专注于提供核心的容器运行时功能,没有繁重的图形界面和额外的功能组件。这种轻量级的特性使得它在资源占用和启动速度上都有明显优势。同时,作为一个开源项目,Colima拥有活跃的社区支持,并且不受商业许可限制。
在底层实现上,Colima通过Lima启动一个专用的Linux虚拟机来运行容器,这种方式既保证了容器运行的隔离性和安全性,又能够提供接近原生的性能体验。对于开发者来说,你只需要通过简单的命令行操作,就能获得一个功能完整的容器运行环境,而不必关心底层的复杂实现细节。
关于Colima和Lima
Colima即Container on Lima。
Lima是具有自动文件共享和端口转发的Linux虚拟机(类似于 WSL2)。
- Lima的最初目标是向Mac用户推广containerd,包括nerdctl(contaiNERD ctl),但Lima 也可以用于非容器应用。
- Lima 还支持其他容器引擎(Docker、Podman、Kubernetes 等)以及非 macOS 主机(Linux、NetBSD 等)。
Colima实际上是通过Lima启动了名为colima的虚拟机。
安装Colima #
在macOS上安装和配置Colima环境非常简单,我们只需要通过Homebrew安装几个必要的组件即可。首先安装Colima本体:
1brew install colima
通过brew deps
命令可以查看Colima的依赖关系,可以看到它主要依赖于Lima虚拟化平台:
1brew deps colima
2lima
接下来需要安装Docker CLI工具。这里我们选择安装最基础的命令行版本,而不是图形化的Docker Desktop:
1brew install docker
注意不要使用brew install docker --cask
命令,这将安装docker在macOS平台下的图形化软件
最后,安装Docker Compose以支持容器编排功能:
1brew install docker-compose
启动Colima #
启动Colima服务 #
为了确保Colima在系统启动时自动运行,我们可以将其注册为系统服务。使用Homebrew的services命令来管理Colima服务:
1brew services start colima
2
3brew services list
4Name Status User File
5colima started xxx ~/Library/LaunchAgents/homebrew.mxcl.colima.plist
1ps -ef | grep colima
2/opt/homebrew/opt/colima/bin/colima start -f
定制Colima的默认配置 #
Colima提供了template
命令来编辑默认配置模板。这个命令会打开一个YAML格式的配置文件,让我们可以自定义各种参数,如CPU核心数、内存大小、磁盘空间等:
1colima template
这将打开默认的配置模板,主要包含以下配置项:
1# CPU设置
2cpu: 8
3# 内存设置(以GiB为单位)
4memory: 10
5# 磁盘大小(以GiB为单位)
6disk: 120
7# 运行时选择:docker, containerd, incus
8runtime: docker
9# 是否启用Kubernetes
10kubernetes:
11 enabled: false
12# 虚拟机的卷挂载驱动
13# virtiofs 仅限于 macOS 和 vmType vz。它是选项中最快的。
14mountType: virtiofs
15# 为虚拟机指定自定义磁盘镜像。
16# 当未指定时,会从https://github.com/abiosoft/colima-core/releases下载适当的磁盘镜像
17# 可以指定自定义磁盘镜像的文件路径来覆盖此行为。
18diskImage: "/<thepath>/ubuntu-24.04-minimal-cloudimg-arm64-docker.qcow2"
19# 虚拟机类型, vz 是 macOS 虚拟化框架,需要macOS 13及以上版本
20vmType: vz
21
22# 使用Rosetta进行amd64模拟(需要Mac M1以上和vmType vz)
23rosetta: true
24# 为虚拟机启用嵌套虚拟化(需要Mac M3以上和vmType vz)
25nestedVirtualization: false
26
27# docker daemon的配置,即`daemon.json`
28# 例如,配置`registry-mirrors`
29docker:
30 registry-mirrors:
31 - https://mirror.xxx.com
上面的配置模板中,除了基础的资源配置(cpu
、memory
、disk
)外,还有几个重要的参数需要特别关注:
mountType
设置为virtiofs
可以获得最佳的文件系统性能,这是macOS平台上最快的挂载方式diskImage
参数允许指定自定义的虚拟机镜像。默认情况下,Colima会从https://github.com/abiosoft/colima-core/releases下载镜像。由于国内网络环境的限制,建议提前下载所需镜像并配置本地路径vmType
设置为vz
以使用macOS原生的虚拟化框架,可以获得更好的性能(需要macOS 13或更高版本)docker.registry-mirrors
用于配置Docker镜像仓库的加速源,这对于国内用户来说是一个非常实用的配置项,可以显著提升镜像下载速度
实际上colima template
编辑的默认配置被保存在~/.colima/_templates/default.yaml
中
完成配置模板的编辑后,所有新创建的Colima虚拟机实例都会继承这些默认设置。这样可以确保每个新实例都能以最优的配置启动,无需重复配置。
启动Colima VM #
在Apple Silicon芯片的Mac上,为了能够运行x86架构的容器,建议首先安装Rosetta 2:
1softwareupdate --install-rosetta
接下来我们来启动虚拟机。需要注意的是,虽然我们在配置模板中指定了diskImage
参数,但在实际使用colima start
命令时,这个配置可能并不会生效。此时,我们可以通过-i
参数直接指定本地虚拟机镜像:
1colima start -i ./ubuntu-24.04-minimal-cloudimg-arm64-docker.qcow2
虚拟机启动后,我们可以通过以下命令查看其运行状态。colima ls
命令会显示所有实例的概览信息,包括CPU、内存、磁盘等资源配置:
1colima ls
2PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
3default Running aarch64 8 10GiB 120GiB docker
4
5colima status
6INFO[0000] colima is running using macOS Virtualization.Framework
7INFO[0000] arch: aarch64
8INFO[0000] runtime: docker
9INFO[0000] mountType: virtiofs
10INFO[0000] socket: unix://~/.colima/default/docker.sock
一旦虚拟机成功启动,Docker命令行工具就会自动连接到Colima提供的Docker守护进程,此时我们就可以在Mac上正常使用所有Docker命令了。
在日常使用中,我们可以通过以下命令来管理虚拟机的生命周期:
1colima start
2colima restart
3colima stop
如果需要进行故障排查或高级配置,还可以通过colima ssh
命令直接登录到虚拟机内部进行操作。
总结 #
Colima为macOS用户提供了一个轻量级且优雅的容器运行解决方案。通过Lima虚拟化技术,它不仅完美支持Apple Silicon和Intel芯片,还提供了灵活的配置选项和出色的性能表现。相比Docker Desktop的商业限制和OrbStack的付费模式,Colima的开源特性和社区支持使其成为一个更具吸引力的选择。通过合理配置和使用virtiofs、vz等优化特性,Colima能够为macOS上的容器化开发提供接近原生的体验。