Colima 日常使用与 Docker 协作
本篇聚焦“用起来”的体验:如何在 Colima 上自然使用 Docker CLI、在不同 profile 间切换,以及处理端口、卷与 Compose。
Docker CLI 的透明使用
当 Colima 处于运行状态时,你可以直接使用:
docker ps
docker build -t my-app:dev .
docker run --rm -it my-app:dev bash
无需额外指定 Daemon 地址,Colima 会负责将 CLI 请求转发给虚拟机内的 Docker。
如果你需要确认当前 docker 正在连接哪个 Daemon,可查看:
docker context ls
docker info | grep -i "Docker Root Dir"
在不同 profile 间切换
查看所有 profile:
colima list
启动某个 profile:
colima start --profile dev # 常规开发
colima start --profile k8s # K8s / 集群实验
一次只能有一个 profile 在“当前上下文”中生效。切换 profile 的典型场景:
- 白天在
devprofile 下做 Web 应用开发。 - 需要调试集群与 Ingress 时,切换到
k8sprofile,启动本地 k3s/k3d。
切换前建议先在当前 profile 中停止对外服务容器,避免端口占用混乱。
网络与端口转发
Colima 默认支持将容器端口映射到宿主机,例如:
docker run --rm -p 8080:80 nginx
在浏览器访问 http://localhost:8080 即可访问容器中的 Nginx。
如果你需要更细粒度的端口控制,可以在对应 profile 的 colima.yaml 中:
- 固定暴露的一组端口。
- 控制是否只绑定到
127.0.0.1或对局域网可见。
遇到端口冲突(例如 80 / 443 / 5432 已被其它进程占用)时:
- 用
lsof -i :PORT找到占用的进程。 - 或调整 Docker 容器映射的宿主机端口,避开常用端口。
卷与文件系统策略
常见工作路径(如 ~/Projects)通常会被默认共享到虚拟机,挂载方式类似:
docker run --rm -v ~/Projects/my-app:/app -w /app node:22 npm run dev
性能建议:
读写频繁的代码目录:保留共享即可,方便编辑与热重载。
高 IO 的数据库 / 缓存数据:尽量使用容器内部路径或专用卷,例如:
docker volume create pgdata docker run -d --name pg -v pgdata:/var/lib/postgresql/data postgres:16
需要调整共享目录时,可在 colima.yaml 中精简需要共享的路径,减少不必要的 FS 同步开销。
与 Docker Compose 协作
一旦 Colima 运行,docker compose 即可直接使用:
docker compose up # 或 docker-compose up
docker compose up -d
docker compose logs -f
docker compose down
常见实践:
- 将一个项目的所有服务(Web、API、DB、Redis 等)写在一份
docker-compose.yml中。 - 内部通过服务名互联(如
db:5432),减少手动管理端口。 - 对于需要特权或额外挂载内核模块的场景,为该项目单独创建一个 Colima profile,避免影响其他开发环境。
通过上述方式,Colima 在日常开发中的存在感可以尽量“隐身”:你只需要记得在开发前 colima start,其余工作交给熟悉的 Docker 命令即可。