跳转至

用 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 关键区分

  1. stop vs downstop 停容器不删,down 删容器。数据卷(mysql/chroma 数据)两者都默认保留。
  2. colima stop vs colima deletestop 停 VM 保数据,delete 彻底销毁。日常用 stop,别用 delete(除非要彻底重置环境)。
  3. 内存释放:只 docker-compose stopcolima 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 contextdocker context ls 能看到 colima),它指向 VM。宿主的 docker CLI 通过 SSH 把请求转发到 VM 里的 /var/run/docker.sock

这就是为什么 colima is not runningdocker.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 + 打通连接」这三件事用最轻的方式组合起来。


其它

  1. ARM64 原生镜像:拉取镜像务必使用 ARM64 原生版本(如 mysql:8.0),避免 x86_64 转译导致 CPU 飙升。
  2. 首次启动参数--cpu 2 --memory 4 --disk 20 只在创建 VM 时生效,后续调整需 colima delete 后重建。
  3. 日常用 stop 别用 deletecolima stop 保留磁盘数据、秒级恢复,delete 会清空镜像和数据卷。

参考

回到页面顶部