1. 背景原因
- 需要容器化的环境部署一些中间件、Web服务或者一些实验性的项目,不想把Mac环境残留很多垃圾文件,20年以前都是用的
Docker Desktop
- Mac 机器因为一些原因导致
Docker Desktop
不能用,因为公司担心版权问题不让使用,检索到Colima
算是Mac上比较OK的开源平替工具
2. Docker Colima 简介
Docker Colima 是一个用于在 macOS 和 Linux 上运行 Docker 容器的轻量级替代方案。
它的主要目的是提供一个简单、快速且高效的方式来运行 Docker,而不依赖于 Docker Desktop
。Colima 使用了虚拟化技术(如 QEMU
和 Lima
)来创建一个轻量级的虚拟机环境,从而支持 Docker 容器的运行。
Colima 的主要特点包括:
- 轻量级:Colima 的设计目标是尽可能减少资源占用,提供快速的启动时间和高效的性能。
- 兼容性:Colima 兼容 Docker CLI,因此用户可以使用熟悉的 Docker 命令来管理容器。
- 多种配置选项:用户可以根据需要自定义虚拟机的配置,例如 CPU、内存和存储等。
- 简单易用:Colima 提供了简单的命令行界面,用户可以通过简单的命令来启动和停止 Docker 环境。
Colima 的安装和使用相对简单,用户只需通过 Homebrew(在 macOS 上)或直接下载二进制文件(在 Linux 上)来安装。安装完成后,用户可以通过命令行启动 Colima,并使用 Docker 命令进行容器管理。
3. Colima在Mac上安装
- Colima基于
Lima
,而Lima
使用 QEMU
虚拟机,所以可能需要配置虚拟机内的Docker守护进程使用代理。 - 用户可能需要编辑Colima的配置文件,或者在启动Colima时传递环境变量。例如,在
colima.yaml
中添加环境变量,如HTTP_PROXY
和HTTPS_PROXY
指向Socks5
代理。
1
2
3
4
5
| # 安装Colima(基于Homebrew)
brew install colima docker docker-compose
# 启动Colima虚拟机(默认配置,可根据需求调整CPU/内存)
colima start --cpu 2 --memory 2
|
3.1. 配置代理(解决镜像拉取网络问题)
因为我用的是Socks
代理,通常Docker的环境变量支持的是HTTP
和HTTPS
代理,所以可能需要使用Privoxy
工具将Socks
转换为HTTP
代理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| brew install privoxy
# 服务启动(配置/opt/homebrew/etc/privoxy/config)
brew services start privoxy -v
brew services info privoxy -v
# vim /opt/homebrew/etc/privoxy/config(127.0.0.1:8118默认),注意最后的.
listen-address 127.0.0.1:8118
forward-socks5 / 127.0.0.1:1080 . # 假设你的 Socks5 代理地址是 127.0.0.1:1080
brew services start privoxy -v
# 测试
curl -x http://127.0.0.1:8118 google.com
|
3.2. 修改Colima的Env和Registry地址(注意使用Yaml格式)
- 镜像仓库代理配置,解决镜像仓库拉取问题
- 环境变量配置,解决容器内访问,
Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- 虚拟机挂载目录,解决宿主机器到容器的挂载问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # vim ~/.colima/default/colima.yaml
docker:
registry-mirrors:
- https://docker.mirrors.ustc.edu.cn
- https://hub-mirror.c.163.com
- https://mirror.baidubce.com
# 环境变量
env:
HTTP_PROXY: http://127.0.0.1:8118
HTTPS_PROXY: http://127.0.0.1:8118
# Mount挂载(特别注意)
mounts:
- location: /data/projects
writable: true
- location: /data/docker
writable: true
- location: $HOME
writable: true
|
3.3. 挂载问题补充(注意踩坑)
为什么容器内挂载为空:因为 Colima 虚拟机未挂载宿主机的 /data/projects
,Docker 实际上挂载的是虚拟机内的空路径。Colima 的隔离性:Colima 本质上是一个轻量级虚拟机,Docker 运行在虚拟机内部,因此宿主机路径需要显式挂载到虚拟机才能被 Docker 使用。
即:M4宿主机 → 虚拟机 → 容器,如果没有配置下面的挂载,colima在虚拟机里面会是空目录,导致后续虚拟机到容器的挂载失败!
1
2
3
4
5
6
7
| mounts:
- location: /data/projects
writable: true
- location: /data/docker
writable: true
- location: $HOME
writable: true
|
3.4. 一个简单的Caddy配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| # /data/docker/caddy
$ tree
.
├── conf
│ └── Caddyfile
├── docker-compose.yml
└── logs
└── access.log
# docker-compose.yml配置
services:
caddy:
image: caddy:latest
container_name: caddy-httpd
ports:
- "8090:80" # 若Mac无权限绑定80端口,可改为"8080:80"
volumes:
- /data/projects/sapaude.tech/tkstorm.com/public:/data/www/tkstorm.com/public:ro
- ./conf:/etc/caddy
- ./logs:/var/log/caddy
# Caddyfile配置
:80 {
root * /data/www/tkstorm.com/public
file_server {
index index.html
}
try_files {path} {path}/index.html index.html
encode gzip
log {
output file /var/log/caddy/access.log
format json
}
}
|
3.5. 解决docker-compose启动后默认Hang住效果
一些场景下,容器挂掉后就无法排查容器内部的一些数据,可以使用重制容器启动命令修改方式让容器Hang住
简单说就是容器默认启动命令修改成tail -f /dev/null
或者是 sleep infinity
1
2
3
4
5
6
7
8
9
10
| services:
my_service:
image: ubuntu
command: tail -f /dev/null # 或 sleep infinity
tty: true # 可选,分配伪终端(防止某些情况下进程被终止)
# 验证
docker ps # 查看容器状态(应为 "Up")
docker exec -it my_container bash # 进入容器
|
3.6. 一些调试命令补充
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # colima
colima start -f -v # 前台启动+详细信息
colima status
colima stop
colima restart
# docker
docker info # 查看配置
docker exec -it caddy-httpd /bin/sh
docker exec -it caddy-httpd ls /etc/caddy
docker exec -it caddy-httpd cat /etc/caddy/Caddyfile
# docker-compose
docker-compose up
docker-compose down # Stop and remove containers, networks
docker-compose down -v # 移除volumes
docker-compose ps
docker-compose logs -f
# colima自动提示(可选)
mkdir -p ~/.oh-my-zsh/custom/plugins/zsh-completions
colima completion zsh > ~/.oh-my-zsh/custom/plugins/zsh-completions/zsh-completions-colima.zsh
|