Colima快速起步

安装

备注

colima 支持两种 容器运行时(Container Runtimes) :

macOS 平台安装colima
brew install colima

可以看到同时依赖安装了如下组件:

capstone, dtc, libslirp, libssh, libusb, vde, qemu and lima
  • 根据安装提示,使用如下命令启动 colima 服务:

macOS 平台通过 brew services 命令启动 colima 服务
brew services start colima

使用

使用 colima start 指定 containerd运行时(runtime) 作为运行时
colima start --runtime containerd

此时输出显示 Lima: Linux Machines 启动一个 Ubuntu Linux ARM Atlas 版本虚拟机(因为我是在ARM架构的 Apple ARM架构芯片M1 Pro Macbook Pro上):

输出显示启动ARM版本的 Ubuntu Linux
INFO[0000] starting colima
INFO[0000] runtime: containerd
INFO[0002] starting ...                                  context=vm
> Using the existing instance "colima"
> Starting the instance "colima" with VM driver "qemu"
> QEMU binary "/opt/homebrew/bin/qemu-system-aarch64" seems properly signed with the "com.apple.security.hypervisor" entitlement
> "Attempting to download the image" arch=aarch64 digest="sha512:bbfd97c7aa9dc0f240cbe09f75f98eb19812ce5da1536e4bca2044c0528fd409b3c8f2c3ba85e54707544e3c6619d585504b3eca7ba8b3f3fbaba141cec0181c" location="https://github.com/abiosoft/colima-core/releases/download/v0.6.7/ubuntu-23.10-minimal-cloudimg-arm64.qcow2"
> [hostagent] Attempting to download UEFI code https://gitlab.com/kraxel/qemu/-/> [hostagent] Downloading UEFI code https://gitlab.com/kraxel/qemu/-/raw/704f7ca> [hostagent] 770.81 KiB / 1.51 MiB (49.71%) ? p/s
> [hostagent] 1.51 MiB / 1.51 MiB (100.00%) 376.33 KiB/s
> [hostagent] decompressing .bz2 with [bzip2 -d]
> [hostagent] Decompressing data
INFO[0371] provisioning ...                              context=containerd
INFO[0371] starting ...                                  context=containerd
INFO[0373] done

此时会从GitHub上下载对应架构的虚拟机镜像以及UEFI代码,如果 一切顺利 … ,显然对于墙内用户是有点折腾的。

备注

这里有一个麻烦是GFW对GitHub访问干扰非常严重,往往难以完成下载。我的解决方法是:

colima nerdctl

既然我安装的是 containerd运行时(runtime) 运行时,那么就需要配套的 nerdctl 交互。通过以下方式安装 nerdctl alias (实际上是一行脚本) 到 $PATH 就可以使用 colima nerdctl 子命令进行交互( 非常类似 Kubectl插件 ),也可以直接使用 nerdctl

通过 colima install 安装 nerdctl
colima nerdctl install

按照提示输入系统管理员用户密码后,就会安装一个脚本文件 /usr/local/bin/nerdctl ,这个脚本非常简单,就是 colima nerdctl 的一个包装:

/usr/local/bin/nerdctl
#!/usr/bin/env sh

/opt/homebrew/bin/colima nerdctl --profile default -- "$@"

这样我们就既可以使用 colima nerdctl 也可以直接使用 nerdctl 来和系统中安装运行在虚拟机中的 containerd运行时(runtime) 进行交互

  • 使用 nerdctl 检查:

nerdctl 检查
nerdctl ps

此时,还没有任何运行容器,所以显示是空的

nerdctl 检查此时还没有容器运行
CONTAINER ID    IMAGE                             COMMAND        CREATED          STATUS    PORTS    NAMES

接下来使用方法和 Docker Desktop 相同,可以使用 nerdctl 来实现镜像的拉取、容器运行等操作

异常和解决

lima 虚拟机文件和本地文件

使用 containerd 作为 containerd(容器运行时) ,我在执行 Gentoo镜像 :

采用 nerdctl build 构建基础Gentoo镜像Dockerfile
nerdctl build -t gentoo-base -f Dockerfile .

出现如下报错:

采用 nerdctl build 构建基础Gentoo镜像出现的报错显示 lima 虚拟机中缺少对应文件
bash: line 1: cd: /Users/huataihuang/docs/docker/gentoo_image/base: No such file or directory

原因是执行 nerdctl 是在 macOS 上,这个命令访问的运行 containerd(容器运行时) 位于 Lima: Linux Machines 虚拟机中,当虚拟机目录和本地 macOS 目录不是映射等同关系时,就会导致无法找到目录文件。

有没有办法将 macOS 本地目录映射到虚拟机内部呢?

备注

这个问题应该是 containerd 后端特有的,我以前使用 Docker Desktop 就不存在这个异常,说明 Docker Desktop 做了相应转换

暂无时间排查,我目前主要是在 Gentoo Docker 上完成,暂时绕过这个问题。等后面在 macOS 上工作时再解决

参考