无 Docker Desktop + Colima + Docker Compose v2 标准化方案
无 Docker Desktop + 纯 CLI + Colima + Docker Compose v2 标准化方案
一、背景
在 macOS 环境中,Docker Desktop 虽然开箱即用,但存在以下问题:
- 资源占用高(CPU / 内存)
- 启动慢
- 商业使用存在许可限制
- 与开发环境(如 k8s / 自定义 runtime)耦合较重
因此,采用以下组合替代:
Colima + Docker CLI + Compose v2 Plugin
目标是实现:
- 轻量级 Docker 运行环境
- 完整 CLI 操作体验
- 原生支持
docker compose(v2)
二、整体架构
1 | docker CLI |
说明:
docker:CLI 工具colima:本地 container runtime(基于 Lima + containerd)docker-compose:Compose v2 实现(后续转换为 plugin)
2. 启动 Colima
1 | colima start |
可选配置:
1 | colima start --cpu 4 --memory 8 |
3. 设置 Docker Context
1 | docker context use colima |
验证:
1 | docker context ls |
四、启用 Docker Compose v2(核心步骤)
Homebrew 不直接提供 docker-compose-plugin,需要手动转换:
1. 创建 plugin 目录
1 | mkdir -p ~/.docker/cli-plugins |
2. 软链接 compose
1 | ln -s $(which docker-compose) ~/.docker/cli-plugins/docker-compose |
3. 验证
1 | docker compose version |
期望输出:
1 | Docker Compose version 5.x.x |
五、最终使用方式
统一使用:
1 | docker compose up |
不再使用:
1 | docker-compose # deprecated |
六、环境验证
1. Docker
1 | docker ps |
2. Compose
1 | docker compose version |
3. Socket
1 | echo $DOCKER_HOST |
应为空或由 context 管理(推荐)
七、常见问题
1. docker compose 不可用
原因:
- plugin 未配置
解决:
1 | ls ~/.docker/cli-plugins |
确认存在:
1 | docker-compose |
2. 连接错误
1 | Cannot connect to the Docker daemon |
排查:
1 | docker context ls |
3. 权限或路径问题
1 | which docker |
确保均来自 Homebrew:
1 | /opt/homebrew/bin/ |
八、最佳实践
1. 固定 context
在 shell 配置中加入:
1 | export DOCKER_CONTEXT=colima |
2. 避免 DOCKER_HOST 干扰
不要手动设置:
1 | export DOCKER_HOST=... |
交由 context 管理
3. 统一团队规范
建议团队统一:
- 使用 Colima
- 使用
docker compose - 禁止
docker-compose
九、优缺点分析
优点
- 轻量(相比 Docker Desktop)
- 无商业授权限制
- 启动速度快
- 与 k8s / containerd 更贴近
缺点
- 需要手动配置 Compose plugin
- 初次上手成本略高
- 部分 GUI 工具不可用
十、总结
该方案的核心是:
用 Colima 替代 Docker Desktop,用 CLI + plugin 还原官方 Docker 体验
最终效果:
1 | docker compose up |
与 Docker Desktop 环境保持一致,但更加轻量、可控。
十一、参考命令速查
1 | # 启动环境 |
十二、适用人群
- 后端工程师(Node.js / Go / Java)
- 前端工程化开发(需要容器化)
- 使用 k8s / 本地集群(k3s / kind)
- 追求轻量开发环境的工程师`
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Damingerdai's Blog!
