在Mac上安装Colima启动Docker服务

AI 摘要: Docker Colima是在macOS和Linux上运行Docker容器的轻量级替代方案,通过使用虚拟化技术来创建一个轻量级虚拟机环境。安装简单,可通过命令行启动并使用Docker命令进行容器管理。使用Colima可能需要配置虚拟机内的Docker守护进程代理,也可以在启动时传递环境变量进行配置。

1. 背景原因

  1. 需要容器化的环境部署一些中间件、Web服务或者一些实验性的项目,不想把Mac环境残留很多垃圾文件,20年以前都是用的Docker Desktop
  2. Mac 机器因为一些原因导致Docker Desktop不能用,因为公司担心版权问题不让使用,检索到Colima算是Mac上比较OK的开源平替工具

2. Docker Colima 简介

Docker Colima 是一个用于在 macOS 和 Linux 上运行 Docker 容器的轻量级替代方案。

它的主要目的是提供一个简单、快速且高效的方式来运行 Docker,而不依赖于 Docker Desktop。Colima 使用了虚拟化技术(如 QEMULima)来创建一个轻量级的虚拟机环境,从而支持 Docker 容器的运行。

Colima 的主要特点包括:

  1. 轻量级:Colima 的设计目标是尽可能减少资源占用,提供快速的启动时间和高效的性能。
  2. 兼容性:Colima 兼容 Docker CLI,因此用户可以使用熟悉的 Docker 命令来管理容器。
  3. 多种配置选项:用户可以根据需要自定义虚拟机的配置,例如 CPU、内存和存储等。
  4. 简单易用:Colima 提供了简单的命令行界面,用户可以通过简单的命令来启动和停止 Docker 环境。

Colima 的安装和使用相对简单,用户只需通过 Homebrew(在 macOS 上)或直接下载二进制文件(在 Linux 上)来安装。安装完成后,用户可以通过命令行启动 Colima,并使用 Docker 命令进行容器管理。

3. Colima在Mac上安装

  1. Colima基于 Lima,而Lima 使用 QEMU 虚拟机,所以可能需要配置虚拟机内的Docker守护进程使用代理。
  2. 用户可能需要编辑Colima的配置文件,或者在启动Colima时传递环境变量。例如,在colima.yaml中添加环境变量,如HTTP_PROXYHTTPS_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的环境变量支持的是HTTPHTTPS代理,所以可能需要使用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