用 Colima 替代 Docker Desktop
2026-09-21 by dongnan
前置说明
本文是《MacOS 开发常用软件安装与配置》的续篇,聚焦第 6 节「容器环境」的日常使用:Colima 替代 Docker Desktop 的可行性、日常维护命令,以及如何为 Docker daemon 配置代理。
1. 可行性评估
一个核心问题:16GB Macbook Air 用 Colima 替代 Docker Desktop 可行吗?
结论明确 —— 完全可行,而且已经是装好了的状态。检查现状:
- Colima + Lima 已安装(
/opt/homebrew/bin/colima),只是没启动(colima is not running) - docker CLI 已安装(29.5.1)
- docker-compose 是 v2 引擎(5.1.3)
- 唯一问题:daemon 没起(
docker.sock不存在,因为 Colima 没启动)
只需一步,启动 Colima:
colima start --cpu 2 --memory 4 --disk 20
16GB 内存给 Colima 4GB 非常轻松(留 12GB 给 MacOS)。默认 2GB 跑 7 个容器(mysql + redis + api + agent + ui + nginx + log-router)会偏紧,所以给 4GB。
2. 日常维护命令
2.1 生命周期
| 命令 | 作用 | 说明 |
|---|---|---|
colima start |
启动 VM | 首次带参数:--cpu 2 --memory 4 --disk 20 |
colima stop |
停止 VM | 保留磁盘(镜像/卷/容器状态),下次 start 秒级恢复 |
colima restart |
重启 VM | = stop + start |
colima delete |
彻底删除 VM | 镜像、数据卷全丢,下次要重新 pull 镜像、重建数据 |
colima status |
查看状态 | running / stopped |
colima list |
列出 VM 及配置 | 看 cpu/memory/disk |
colima ssh |
进 VM 调试 | 看容器日志、磁盘占用 |
2.2 测试完毕的标准关闭流程
# 1. 停容器(二选一)
docker-compose stop # 保留容器,下次 start 秒恢复
# 或
docker-compose down # 删除容器,保留数据卷(加 -v 才连卷一起删)
# 2. 释放内存 —— 停 VM(这一步才是真正还内存)
colima stop
下次继续:
colima start
docker-compose start # 若之前用的是 stop
# 或
docker-compose up -d # 若之前用的是 down
2.3 关键区分
- stop vs down:
stop停容器不删,down删容器。数据卷(mysql/chroma 数据)两者都默认保留。 - colima stop vs colima delete:
stop停 VM 保数据,delete彻底销毁。日常用stop,别用delete(除非要彻底重置环境)。 - 内存释放:只
docker-compose stop不colima stop,VM 还占着 4GB。colima stop是唯一真正释放内存的动作。
注意:启动参数只在首次生效。
colima start --memory 4的参数在首次创建 VM 时生效,之后stop → start会沿用旧配置。改内存需:colima delete # 删旧 VM(数据会丢,先确认无要保留的数据) colima start --cpu 2 --memory 4 --disk 20
3. 配置 Docker daemon 代理
3.1 Linux systemd 脚本在 Colima 上不适用
Linux 的代理脚本(如 /tmp/set_docker_proxy.sh)走的是 systemd 路径:
/etc/systemd/system/docker.service.d/ + systemctl restart docker
这是 Linux 原生机制,而 Colima(Lima VM)里没有 systemd,脚本直接跑不了。
3.2 通过 colima.yaml 配置
Colima 有对应的方式 —— 配置 ~/.colima/default/colima.yaml,关键字是 env:
env:
HTTP_PROXY: socks5://mirrors.xyc.com:8080
HTTPS_PROXY: socks5://mirrors.xyc.com:8080
NO_PROXY: localhost,192.168.0.0/16,dockerhub.kubekey.local,hub.xyc.com
然后 colima restart 生效。
3.3 验证
colima list
PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
default Running aarch64 2 4GiB 20GiB docker
docker pull mysql:8.0
8.0: Pulling from library/mysql
0ff6298de70d: Pull complete
...
778fd4117397: Pull complete
Digest: sha256:ea68e51ffe9b9xxxc9aaef5791d5ddc5d
4. 开发环境
开发环境 公用 mysql 与 redis 容器,配置文件。
cat dev-infra/docker-compose.yml
# 通用开发基础设施:MySQL 8.0 + Redis 7
# 供本机各项目开发环境直连(localhost:3306 / localhost:6379),跨项目复用。
# 用法: docker-compose up -d
services:
mysql:
image: mysql:8.0.33
container_name: dev-mysql
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: this_dev_password0530
MYSQL_DATABASE: kb-db
MYSQL_USER: kb-user
MYSQL_PASSWORD: this_dev_password0530
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- dev-mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-pthis_dev_password0530"]
interval: 60s
timeout: 5s
retries: 3
redis:
image: redis:7-alpine
container_name: dev-redis
restart: unless-stopped
ports:
- "6379:6379"
environment:
TZ: Asia/Shanghai
command: ["redis-server", "--requirepass", "this_dev_password0530"]
volumes:
- dev-redis-data:/data
volumes:
dev-mysql-data:
dev-redis-data:
Colima 工作原理(可选)
一句话:Colima 是一层“外壳”,它在 macOS 上跑一个轻量 Linux 虚拟机,把 Docker daemon 装进这个虚拟机里,再让 macOS 上的 docker 命令通过 SSH 连进去执行。
三层结构
macOS 宿主
├─ docker CLI ──(SSH 隧道 / socket 转发)────────┐
├─ Colima(编排层,负责装 runtime、配 context) │
└─ Lima(虚拟机管理层) │
│ ▼
└── 轻量 Linux VM(QEMU 或 vz 虚拟化)
└─ Docker daemon / containerd
└─ 容器(mysql、redis…)
拆开看是三个组件各司其职:
| 组件 | 角色 | 说明 |
|---|---|---|
| Colima | 编排层 | 一个 CLI,负责在 VM 里装好容器运行时(Docker 或 containerd),并配置好连接 |
| Lima | 虚拟机层 | 负责创建和管理 Linux VM,底层用 QEMU(默认)或 Apple 虚拟化框架 vz |
| Docker daemon | 容器运行时 | 真正跑在 Linux VM 里,负责拉镜像、跑容器 |
关键机制
1. 为什么 macOS 上必须有个 Linux VM?
Docker 容器本质是 Linux 内核的命名空间(namespace)+ cgroup 隔离技术。macOS 内核没有这套机制,所以任何方案都得先“借”一个 Linux 内核。Docker Desktop 也是这么干的,只是它用的是自家闭源的 VM;Colima 用的是开源 Lima。
2. docker 命令是怎么连到 VM 里的?
Colima 启动后会创建一个 docker context(docker context ls 能看到 colima),它指向 VM。宿主的 docker CLI 通过 SSH 把请求转发到 VM 里的 /var/run/docker.sock。
这就是为什么 colima is not running 时 docker.sock 不存在——daemon 在 VM 里,VM 没起,socket 自然不在。
3. 文件怎么共享?
Lima 把宿主目录(默认是家目录 /Users/你)挂载进 VM(用 virtiofs 或 reverse-sshfs),Docker 的 bind mount / volume 再从这个挂载点进容器。所以改宿主的代码,容器里能直接看到。
4. 端口怎么暴露?
容器端口先映射到 VM 内部,再由 Lima 的 gvproxy 把端口转发回宿主的 localhost。所以 docker run -p 8000:8000 后,在 Mac 上访问 localhost:8000 就能通。
与 Docker Desktop 的对比
| Docker Desktop | Colima | |
|---|---|---|
| VM | 闭源(HyperKit/QEMU) | 开源 Lima(QEMU / vz) |
| 运行时 | Docker | Docker 或 containerd 可选 |
| 资源占用 | 重(常驻 GUI + 后台服务) | 轻(纯 CLI,按需起停) |
| 许可证 | 大公司需付费 | 开源免费 |
核心一句话:Colima 不重新发明容器,它只是把「开个 Linux VM + 装 Docker + 打通连接」这三件事用最轻的方式组合起来。
其它
- ARM64 原生镜像:拉取镜像务必使用 ARM64 原生版本(如
mysql:8.0),避免 x86_64 转译导致 CPU 飙升。 - 首次启动参数:
--cpu 2 --memory 4 --disk 20只在创建 VM 时生效,后续调整需colima delete后重建。 - 日常用 stop 别用 delete:
colima stop保留磁盘数据、秒级恢复,delete会清空镜像和数据卷。
参考
- DeepSeek
- 《MacOS 开发常用软件安装与配置》
- Colima 官方文档