在 MacOS 上通過 Lima 使用 Docker

作者:from now on
出處:https://u.kubeinfo.cn/YNB47j

爲什麼要使用 lima

目前在 macOS 上如果想使用 docker,那麼最直接的就是使用 官方推出的 docker-desktop[1]

docker-desktop 帶有 gui 進行管理。然鵝我不想要,想要的是直接在命令行中就可以操作 docker 的方案。然後經過搜索有這麼幾種:podman[2] 和 lima[3]

像一些基於 lima 的產品就不列出來了

實驗了 podman 也挺好。之所以最終沒有選擇 podman,純粹是由於公司用的黑蘋果,cpu 是奔騰,然後使用 qemu 時內核恐慌。podman 沒法定義 cpuType(後面不知道是否可以了)。而 lima 提供了自定義 cpuType 的選項

lima 是什麼

Linux virtual machines, typically on macOS, for running containerd

Motivation
The goal of Lima is to promote containerd including nerdctl (contaiNERD ctl) to Mac users, but Lima can be used for non-container applications as well.

在我看來,就是在 macOS 上搞容器,合我心意就開始實踐

如何使用 lima

安裝

macOS 就不多說了,直接 brew 一把梭

brew install lima

開始創建實例

macOS 和 Windows 無法直接運行 docker,都是通過虛擬化技術來實現的。簡單來說就是建一個虛擬機,在虛擬機裏面裝 docker。

lima 提供了更多的選擇,除了可以建 docker,還可以建 k3s、k8s、podman 等等。通過 template 進行選擇。

模版列表:

limactl start --list-templates

新建一個實例名稱爲 default 的 docker 實例 (不指定 name 的話就是 docker):

limactl start --name=default template://docker

這裏只介紹一下 docker 的使用,其他的類型各位看官可以自行摸索。

使用 docker 實例

剛開始使用比較彆扭,需要通過

limactl shell docker docker ps

類似這樣的進行操作。這肯定不行的,最好還是直接使用 docker [options] command,所以想想辦法

首先,alias 大法好,直接上來一把梭,但是發現是可以直接執行。但是補全無法使用了。這裏大家也可以試一下。

然後,我就照着 lima 默認有個 nerdctl.lima 命令。寫了個 docker

vim bin/docker

#!/bin/sh
set -eu
exec limactl shell docker docker "$@"

注意:bin 要加入 PATH 中,方便任何地方都可以使用。然後記得 chmod +x 添加執行權限

做到這裏,就比較絲滑了。直接 docker 一把梭。

常見問題

如何在局域網中暴露端口

默認只能主機訪問,如果需要暴露端口,那麼就需要更改監聽地址爲 0.0.0.0
然後可以查看這個討論: Expose Lima Machine Ports Lan[4]

關鍵配置在端口轉發這裏:

portForwards:
- guestPortRange: [1, 65535]
  guestIPMustBeZero: true
  hostIP: 0.0.0.0

注意:這樣配置之後,默認 -p 就是 0.0.0.0 (可以看上面討論鏈接詳情,由於博主英語太差,就不貼圖獻醜了)

cpuType 的問題

其實這個我也拿不準,但是的確是通過自定義 cpuType 解決了。

qemu-system-x86_64 -cpu help

然後我選擇了 kvm64,根據 自定義架構的 cpu 類型 [5] 進行調整 yaml 配置文件

cpuType:
  # 🟢 Builtin default: "cortex-a72" (or "host" when running on aarch64 host)
  aarch64: null
  # 🟢 Builtin default: "qemu64" (or "host" when running on x86_64 host)
  x86_64: "kvm64"

然後重新啓動 docker 實例即可。

參考資料

[1]

官方推出的 docker-desktop: https://www.docker.com/products/docker-desktop/

[2]

podman: https://podman.io/

[3]

lima: https://github.com/lima-vm/lima

[4]

Expose Lima Machine Ports Lan: https://github.com/lima-vm/lima/discussions/813#discussioncomment-2656253

[5]

自定義架構的 cpu 類型: https://github.com/lima-vm/lima/blob/master/examples/default.yaml#L196-L203

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/DvthnnSNItnzNbwDeg_pow