用 Lima 在你的 Mac 上運行容器
在你的 Mac 上運行容器可能是一個挑戰。畢竟,容器是基於 Linux 特有的技術,如控制組和命名空間。
幸運的是,macOS 擁有一個內置的 虛擬機監控程序 ,允許在 Mac 上運行虛擬機(VM)。虛擬機監控程序是一個底層的內核功能,而不是一個面向用戶的功能。
hyperkit 是一個可以使用 macOS 虛擬機監控程序運行虛擬機的 開源項目。hyperkit 被設計成一個「極簡化」的虛擬機運行器。與 VirtualBox 不同,它沒有花哨的 UI 功能來管理虛擬機。
你可以獲取 hyperkit,這是一個運行容器管理器的極簡 Linux 發行版,並將所有部分組合在一起。但這將有很多變動組件,且聽起來像有很多工作。特別是如果你想通過使用 vpnkit
(一個開源項目,用於創建感覺更像是主機網路一部分的虛擬機網路)使網路連接更加無縫。
Lima
當 lima 項目 已經解決了這些細節問題時,就沒有理由再去做這些努力了。讓 lima
運行的最簡單方法之一是使用 Homebrew。你可以用這個命令安裝 lima
:
$ brew install lima
安裝後,可能需要一些時間,就享受一些樂趣了。為了讓 lima
知道你已經準備好了,你需要啟動它。下面是命令:
$ limactl start
如果這是你第一次運行,你會被問到是否喜歡默認值,或者是否要改變其中的任何一項。默認值是非常安全的,但我喜歡生活在瘋狂的一面。這就是為什麼我跳進一個編輯器,從以下地方進行修改:
- location: "~"
# CAUTION: `writable` SHOULD be false for the home directory.
# Setting `writable` to true is possible but untested and dangerous.
writable: false
變成:
- location: "~"
# I *also* like to live dangerously -- Austin Powers
writable: true
正如評論中所說,這可能是危險的。可悲的是,許多現有的工作流程都依賴於掛載是可讀寫的。
默認情況下,lima
運行 containerd
來管理容器。containerd
管理器也是一個非常簡潔的管理器。雖然使用一個包裝的守護程序,如 dockerd
,來增加這些漂亮的工效是很常見的,但也有另一種方法。
nerdctl 工具
nerdctl
工具是 Docker 客戶端的直接替換,它將這些功能放在客戶端,而不是伺服器上。lima
工具允許無需在本地安裝就可以直接從虛擬機內部運行 nerdctl
。
做完這些後,可以運行一個容器了!這個容器將運行一個 HTTP 伺服器。你可以在你的 Mac 上創建這些文件:
$ ls
index.html
$ cat index.html
hello
現在,掛載並轉發埠:
$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/#
在容器內,運行一個簡單的 Web 伺服器:
$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/# cd /html/
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (<http://0.0.0.0:8000/>) ...
在另一個終端,你可以檢查一切看起來都很好:
$ curl localhost:8000
hello
回到容器上,有一條記錄 HTTP 客戶端連接的日誌信息:
10.4.0.1 - - [09/Sep/2021 14:59:08] "GET / HTTP/1.1" 200 -
一個文件是不夠的,所以還要做些優化。 在伺服器上執行 CTRL-C
,並添加另一個文件:
^C
Keyboard interrupt received, exiting.
root@9486145449ab:/html# echo goodbye > foo.html
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
檢查你是否能看到新的文件:
$ curl localhost:8000/foo.html
goodbye
總結
總結一下,安裝 lima
需要一些時間,但完成後,你可以做以下事情:
- 運行容器。
- 將你的主目錄中的任意子目錄掛載到容器中。
- 編輯這些目錄中的文件。
- 運行網路伺服器,在 Mac 程序看來,它們是在 localhost 上運行的。
這些都是通過 lima nerdctl
實現的。
via: https://opensource.com/article/21/9/run-containers-mac-lima
作者:Moshe Zadka 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive