Colima快速起步¶
安装¶
备注
colima 支持两种 容器运行时(Container Runtimes) :
Docker Atlas : 通过
colima start
启动如果没有带运行时
参数,则默认等同于colima start docker
,此时要求系统已经通过brew install docker
安装过 Docker Desktop ,否则报错`containerd运行时(runtime) : 通过
colima start containerd
启动则会通过 Lima: Linux Machines 运行一个 Ubuntu Linux 虚拟机来运行 containerd运行时(runtime)
通过 Homebrew 安装
colima
:
brew install colima
可以看到同时依赖安装了如下组件:
capstone, dtc, libslirp, libssh, libusb, vde, qemu and lima
根据安装提示,使用如下命令启动
colima
服务:
brew services start colima
备注
brew services start colima
是在后台作为服务自动启动Colima,如果要在前台运行,可以直接使用 colima start
命令,例如:
colima start --foreground
使用¶
colima start
是启动一个 容器运行时(Container Runtimes) 的Linux虚拟机,不带任何参数就默认使用 Docker Atlas ,此时要求系统已经 Homebrew 安装过 Docker Desktop我为了能够适应当前 Kubernetes Atlas 的只部署 containerd运行时(runtime) 运行时,没有完整的 Docker Atlas 组件,所以我使用的启动命令是:
colima start --runtime containerd
此时输出显示 Lima: Linux Machines 启动一个 Ubuntu Linux ARM Atlas 版本虚拟机(因为我是在ARM架构的 Apple ARM架构芯片M1 Pro Macbook Pro上):
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代码,如果 一切顺利 ... ,显然对于墙内用户是有点折腾的。
colima start
选项¶
运行 colima start help
命令可以看到,这个运行命令实际上有很多参数,提供了不同运行模式:
我在 MacBook Pro 2018 上构建一个使用
vz
模式的4c8g
虚拟机运行colima
:
colima start --runtime containerd --cpu 4 --memory 8 --vm-type=vz
启动后检查运行的虚拟机:
colima list
显示刚才启动的 4c8g
虚拟机:
PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
default Running x86_64 4 8GiB 60GiB containerd
如果需要修订 Colima存储管理 ,则配置修订后需要重启
colima
虚拟机:
colima stop
colima start
colima ssh
¶
执行SSH可以登陆到 colima
虚拟机内部:
colima ssh
清理colima¶
如果不再需要 colima
,可以 delete
掉虚拟机:
colima delete
此时会提示信息警告,确认 y
之后删除:
are you sure you want to delete colima and all settings? [y/N] y
INFO[0004] deleting colima
INFO[0004] deleting ... context=containerd
INFO[0006] done
这个删除会清理掉用户 ~/.colima/
目录下对应的虚拟机配置以及该目录下 ssh_config
证书配置。当再次创建colima会重新生成配置
colima nerdctl
¶
既然我安装的是 containerd运行时(runtime) 运行时,那么就需要配套的 nerdctl 交互。通过以下方式安装 nerdctl
alias (实际上是一行脚本) 到 $PATH
就可以使用 colima nerdctl
子命令进行交互( 非常类似 Kubectl插件 ),也可以直接使用 nerdctl
colima nerdctl install
按照提示输入系统管理员用户密码后,就会安装一个脚本文件 /usr/local/bin/nerdctl
,这个脚本非常简单,就是 colima nerdctl
的一个包装:
#!/usr/bin/env sh
/opt/homebrew/bin/colima nerdctl --profile default -- "$@"
这样我们就既可以使用 colima nerdctl
也可以直接使用 nerdctl
来和系统中安装运行在虚拟机中的 containerd运行时(runtime) 进行交互
使用
nerdctl
检查:
nerdctl ps
此时,还没有任何运行容器,所以显示是空的
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
接下来使用方法和 Docker Desktop 相同,可以使用 nerdctl 来实现镜像的拉取、容器运行等操作
Colima配置概述¶
Colima的配置可以通过 $COLIMA_HOME
设置特定的配置文件位置,否则默认就是 $HOME/.colima
在 $HOME/.colima
目录下你可以找到
ssh_config
配置文件,这个配置文件指定了如何登陆到colima
虚拟机内部进行维护default
目录下保存了刚才我创建的虚拟机配置,colima.yaml
就是创建虚拟机的配置,当再次执行colima start
或colima stop
就会读取这个配置文件启动或停止虚拟机,可以修改这个配置来更改虚拟机的设置
colima.yaml
¶
colima.yaml
提供了很多创建虚拟机的配置,并且提供了详细的注释,所以只要简单浏览一下就能够了解如何调整配置。以下是一些有用的配置
运行容器案例¶
通过 Docker 镜像 定义,使用相同的方法,可以运行起不同的工作环境
异常和解决¶
lima
虚拟机文件和本地文件¶
使用 containerd
作为 containerd(容器运行时) ,我在执行 Gentoo镜像 :
nerdctl build -t gentoo-base -f Dockerfile .
出现如下报错:
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 上工作时再解决