.. _colima_startup: ================= Colima快速起步 ================= 安装 ========= .. note:: colima 支持两种 :ref:`container_runtimes` : - :ref:`docker` : 通过 ``colima start`` 启动如果没有带 ``运行时`` 参数,则默认等同于 ``colima start docker`` ,此时要求系统已经通过 ``brew install docker`` 安装过 :ref:`docker_desktop` ,否则报错` - :ref:`containerd` : 通过 ``colima start containerd`` 启动则会通过 :ref:`lima` 运行一个 :ref:`ubuntu_linux` 虚拟机来运行 :ref:`containerd` - 通过 :ref:`homebrew` 安装 ``colima`` : .. literalinclude:: colima_startup/brew_install_colima :caption: 在 :ref:`macos` 平台安装colima 可以看到同时依赖安装了如下组件:: capstone, dtc, libslirp, libssh, libusb, vde, qemu and lima .. note:: :ref:`qemu` 目前(2025年)官方最新版本 ``qemu-10`` 仅支持macOS 14和15,在旧版本 macOS Big Sur上无法完成安装。我最终折腾很久才完成 :ref:`homebrew_old_qemu` 部署。 旧版macOS Big Sur不支持 ``vz`` 类型,所以必须安装 :ref:`qemu` ,而且旧版homebrew不会自动以来安装qemu,需要单独完成 :ref:`homebrew_old_qemu` 部署。 - 根据安装提示,使用如下命令启动 ``colima`` 服务: .. literalinclude:: colima_startup/brew_start_colima :caption: 在 :ref:`macos` 平台通过 ``brew services`` 命令启动 ``colima`` 服务 .. note:: ``brew services start colima`` 是在后台作为服务自动启动Colima,如果要在前台运行,可以直接使用 ``colima start`` 命令,例如: .. literalinclude:: colima_startup/colima_foreground :caption: 前台运行 ``colima`` 服务 使用 ===== - ``colima start`` 是启动一个 :ref:`container_runtimes` 的Linux虚拟机,不带任何参数就默认使用 :ref:`docker` ,此时要求系统已经 :ref:`homebrew` 安装过 :ref:`docker_desktop` - 我为了能够适应当前 :ref:`kubernetes` 的只部署 :ref:`containerd` 运行时,没有完整的 :ref:`docker` 组件,所以我使用的启动命令是: .. literalinclude:: colima_startup/colima_start_containerd :caption: 使用 ``colima start`` 指定 :ref:`containerd` 作为运行时 此时输出显示 :ref:`lima` 启动一个 :ref:`ubuntu_linux` :ref:`arm` 版本虚拟机(因为我是在ARM架构的 :ref:`apple_silicon_m1_pro` Macbook Pro上): .. literalinclude:: colima_startup/colima_start_containerd_output :caption: 输出显示启动ARM版本的 :ref:`ubuntu_linux` 此时会从GitHub上下载对应架构的虚拟机镜像以及UEFI代码,如果 :strike:`一切顺利` ... ,显然对于墙内用户是有点折腾的。 .. note:: 这里有一个麻烦是GFW对GitHub访问干扰非常严重,往往难以完成下载。我的解决方法是: - 先部署 :ref:`squid_socks_peer` 构建跨越长城的代理 - 然后设置 :ref:`curl_proxy` ``colima start`` 选项 ======================== 运行 ``colima start help`` 命令可以看到,这个运行命令实际上有很多参数,提供了不同运行模式: 4c8g规格案例 -------------- - 我在 :ref:`mbp15_2018` 上构建一个使用 ``vz`` 模式的 ``4c8g`` 虚拟机运行 ``colima`` : .. literalinclude:: colima_startup/colima_vz_4c8g :caption: 使用 ``vz`` 模式虚拟化的 ``4c8g`` 虚拟机运行 ``colima`` - 启动后检查运行的虚拟机: .. literalinclude:: colima_startup/colima_list :caption: 执行 ``colima list`` 可以看到运行的虚拟机 显示刚才启动的 ``4c8g`` 虚拟机: .. literalinclude:: colima_startup/colima_list_output :caption: 显示 ``4c8g`` 虚拟机 - 如果需要修订 :ref:`colima_storage_manage` ,则配置修订后需要重启 ``colima`` 虚拟机: .. literalinclude:: colima_startup/colima_restart :caption: 重启 colima 虚拟机 2c4g规格案例 -------------- - 我在 :ref:`mbp15_late_2013` 上使用的是旧版本macOS Big Sur,也就是macOS 11,这种低版本intel架构macOS提示不支持 ``--vm-type=vz`` ,所以实际上是以 :ref:`qemu` 方式运行 .. literalinclude:: colima_startup/colima_qemu_2c4g :caption: 使用 ``qemu`` 模式虚拟化的 ``2c4g`` 虚拟机运行 ``colima`` .. note:: 根据 :ref:`lima` 官方文档 `Lima VM types `_ 说明, ``VZ`` 选项( :ref:`apple_virtualization` )需要 ``macOS >= 13.0`` (Lima >= 0.14) 多个docker虚拟机运行案例 -------------------------- 如果没有指定 ``-p`` 或 ``--profile`` 指定配置名,那么会使用 ``default`` 作为实例的名字,也即是上文启动命令启动的名为 ``default`` 虚拟机。如果需要启动多个docker虚拟机,则需要通过参数完成:: -p, --profile string profile name, for multiple instances (default "default") 以下是启动一个名为 ``test`` 的 Colima 虚拟机(登陆到这个虚拟机内部则会看到虚拟机主机名是 ``colima-test`` ): .. literalinclude:: colima_startup/start_test :caption: 启动一个名为 ``test`` 的虚拟机实例 对应登陆这个虚拟机的时候也需要使用 ``-p`` 或 ``--profile`` 指定配置名: .. literalinclude:: colima_startup/ssh_test :caption: ssh进入 ``test`` 的虚拟机实例 ``colima ssh`` ================== 执行SSH可以登陆到 ``colima`` 虚拟机内部: .. literalinclude:: colima_startup/colima_ssh :caption: 通过SSH登陆到colima虚拟机内部 清理colima ============== 如果不再需要 ``colima`` ,可以 ``delete`` 掉虚拟机: .. literalinclude:: colima_startup/colima_delete :caption: 执行 ``colima delete`` 删除不需要的colima虚拟机(所有数据丢失!!!) 此时会提示信息警告,确认 ``y`` 之后删除: .. literalinclude:: colima_startup/colima_delete_output :caption: 执行 ``colima delete`` 删除提示警告数据完全删除 这个删除会清理掉用户 ``~/.colima/`` 目录下对应的虚拟机配置以及该目录下 ``ssh_config`` 证书配置。当再次创建colima会重新生成配置 ``colima nerdctl`` ==================== 既然我安装的是 :ref:`containerd` 运行时,那么就需要配套的 :ref:`nerdctl` 交互。通过以下方式安装 ``nerdctl`` alias (实际上是一行脚本) 到 ``$PATH`` 就可以使用 ``colima nerdctl`` 子命令进行交互( 非常类似 :ref:`kubectl-plugins` ),也可以直接使用 ``nerdctl`` .. literalinclude:: colima_startup/colima_install_nerdctl :caption: 通过 ``colima install`` 安装 :ref:`nerdctl` :strike:`按照提示输入系统管理员用户密码后,` 就会安装一个脚本文件 ``/usr/local/bin/nerdctl`` ,这个脚本非常简单,就是 ``colima nerdctl`` 的一个包装: .. literalinclude:: colima_startup/colima_nerdctl :language: bash :caption: ``/usr/local/bin/nerdctl`` 这样我们就既可以使用 ``colima nerdctl`` 也可以直接使用 ``nerdctl`` 来和系统中安装运行在虚拟机中的 :ref:`containerd` 进行交互。当然,即使不执行 ``colima nerdctl install`` 其实也可以和Colima虚拟机中的 :ref:`containerd` 交互,就是一直使用 ``colima nerdctl`` ,安装的好处是方便了在Host主机上操作(简化了命令关键字)。 - 使用 ``nerdctl`` 检查: .. literalinclude:: colima_startup/nerdctl_ps :caption: ``nerdctl`` 检查 此时,还没有任何运行容器,所以显示是空的 .. literalinclude:: colima_startup/nerdctl_ps_output :caption: ``nerdctl`` 检查此时还没有容器运行 接下来使用方法和 :ref:`docker_desktop` 相同,可以使用 :ref:`nerdctl` 来实现镜像的拉取、容器运行等操作 Colima配置概述 ================= Colima的配置可以通过 ``$COLIMA_HOME`` 设置特定的配置文件位置,否则默认就是 ``$HOME/.colima`` 在 ``$HOME/.colima`` 目录下你可以找到 - ``ssh_config`` 配置文件,这个配置文件指定了如何登陆到 ``colima`` 虚拟机内部进行维护 - ``default`` 目录下保存了刚才我创建的虚拟机配置, - ``colima.yaml`` 就是创建虚拟机的配置,当再次执行 ``colima start`` 或 ``colima stop`` 就会读取这个配置文件启动或停止虚拟机,可以修改这个配置来更改虚拟机的设置 ``colima.yaml`` ================= ``colima.yaml`` 提供了很多创建虚拟机的配置,并且提供了详细的注释,所以只要简单浏览一下就能够了解如何调整配置。以下是一些有用的配置 - :ref:`colima_storage_manage` 运行容器案例 ============ 通过 :ref:`docker_images` 定义,使用相同的方法,可以运行起不同的工作环境 异常和解决 =========== ``lima`` 虚拟机文件和本地文件 --------------------------------- .. warning:: 这段错误应该是我自己搞错环境导致的,我现在回想起来当时自己定义了 :ref:`colima_storage_manage` ,没有默认挂载当前用户的 ``$HOME`` 目录,导致Colima虚拟机内部路径和Host主机不一致。如果没有修改默认存储挂在,或者确保定制存储挂载依然包含用户的 ``$HOME`` 目录,就不会有这个问题。 使用 ``containerd`` 作为 :ref:`containerd_runtime` ,我在执行 :ref:`gentoo_image` : .. literalinclude:: colima_startup/build_gentoo-base_image :language: bash :caption: 采用 ``nerdctl build`` 构建基础Gentoo镜像Dockerfile 出现如下报错: .. literalinclude:: colima_startup/build_gentoo-base_image_err :language: bash :caption: 采用 ``nerdctl build`` 构建基础Gentoo镜像出现的报错显示 ``lima`` 虚拟机中缺少对应文件 原因是执行 ``nerdctl`` 是在 :ref:`macos` 上,这个命令访问的运行 :ref:`containerd_runtime` 位于 :ref:`lima` 虚拟机中,当虚拟机目录和本地 :ref:`macos` 目录不是映射等同关系时,就会导致无法找到目录文件。 有没有办法将 :ref:`macos` 本地目录映射到虚拟机内部呢? .. note:: 这个问题应该是 ``containerd`` 后端特有的,我以前使用 :ref:`docker_desktop` 就不存在这个异常,说明 :ref:`docker_desktop` 做了相应转换 暂无时间排查,我目前主要是在 :ref:`gentoo_docker` 上完成,暂时绕过这个问题。等后面在 :ref:`macos` 上工作时再解决 参考 ======== - `GitHub: abiosoft/colima `_ - `Replace Docker-Desktop in Mac with Lima-VM, nerdctl and containerd `_ - `How do I completely remove the VM that colima uses on MacOS? #258 `_