告别Docker Desktop:用Colima在macOS上优雅运行Docker容器

告别Docker Desktop:用Colima在macOS上优雅运行Docker容器

📅 2025-03-07 | 🖱️
🔖 docker
COLIMAContainer on LimaLima VM

在过去的这些年中,我一直在探索和优化自己的开发环境配置。从最初的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

上面的配置模板中,除了基础的资源配置(cpumemorydisk)外,还有几个重要的参数需要特别关注:

  • 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上的容器化开发提供接近原生的体验。

参考 #

© 2025 青蛙小白 | 总访问量 | 总访客数