Colima:Docker Desktop for Mac 的免費替代品,輕鬆管理容器和 K8s(支援 M1 晶片)

語言: CN / TW / HK

Colima 是一個以最小化設定來在MacOS上執行容器執行時和 Kubernetes 的工具。支援 m1(文末討論),同樣也支援 Linux。

Colima 的名字取自 Container on Lima。Lima 是一個虛擬機器工具,可以實現自動的檔案共享、埠轉發以及 containerd。

Colima 實際上是通過 Lima 啟動了名為 colima 的虛擬機器,使用虛擬機器中的 containerd 作為容器執行時。

colima

使用

Colima 的使用很簡單,執行下面的命令就可以建立虛擬機器,預設是 Docker 的執行時。

初次執行需要下載虛擬機器映象建立虛擬機器,耗時因網路情況有所差異。之後,啟動虛擬機器就只需要 30s 左右的時間。

colima start
INFO[0000] starting colima
INFO[0000] creating and starting ... context=vm
INFO[0119] provisioning ... context=docker
INFO[0119] provisioning in VM ... context=docker
INFO[0133] restarting VM to complete setup ... context=docker
INFO[0133] stopping ... context=vm
INFO[0136] starting ... context=vm
INFO[0158] starting ... context=docker
INFO[0159] done

此時,在宿主機上就可以使用 Docker 相關的命令了:

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

docker pull busybox

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest b34806a1af7a 2 weeks ago 1.41MB

也可以使用 Lima 的命令列 limact 工具檢視虛擬機器的情況:

limactl list
NAME STATUS SSH ARCH CPUS MEMORY DISK DIR
colima Running 127.0.0.1:64505 aarch64 2 2GiB 60GiB /Users/addo/.lima/colima

檢視作業系統資訊:

uname -a
Darwin Addos-Macbook-Pro.local 21.2.0 Darwin Kernel Version 21.2.0: Sun Nov 28 20:28:41 PST 2021; root:xnu-8019.61.5~1/RELEASE_ARM64_T6000 arm64

limactl shell colima uname -a
Linux lima-colima 5.13.0-22-generic #22-Ubuntu SMP Fri Nov 5 13:22:27 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

或者使用 Colima 的 ssh 命令進入虛擬機器:

# on host
colima ssh
# in vm
uname -a
Linux lima-colima 5.13.0-22-generic #22-Ubuntu SMP Fri Nov 5 13:22:27 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

其他執行時

也可以在建立的時候通過 --runtime containerd 引數指定使用 Containerd 作為執行時。此時就需要使用  colima nerdctl 來使用  nerdctl 與 Containerd 進行互動。

colima start --runtime containerd

同樣,還可以建立一個 k3s 作為 Kubernetes 執行時:

colima start --with-kubernetes

Demo

我們嘗試啟動一個 nginx 容器:

docker run --rm -d --name nginx -p 8080:80 nginx:latest

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20d6c56e038b nginx:latest "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx

Colima 會自動配置埠轉發:

curl -I http://localhost:8080
HTTP/1.1 200 OK
Server: nginx/1.21.4
Date: Sun, 26 Dec 2021 04:17:22 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 02 Nov 2021 14:49:22 GMT
Connection: keep-alive
ETag: "61814ff2-267"
Accept-Ranges: bytes

虛擬機器配置

Colima 啟動的虛擬機器預設是 2CPU、2GiB 記憶體 和 60GiB 儲存。可以在建立時通過 --cpu--memory 和  --disk 來分配更多資源。

colima start --cpu 4 --memory 16

也可以修改當前虛擬機器的配置:

colima stop
colima start --cpu 4 --memory 16

同類工具比較

其實有不少類似的工具,比如 kind、k3d 和 minikube 三種都是用來建立 Kubernetes 環境。我個人此前用的 k3d 就比較多。

對於 Docker 容器環境,這三個其實都沒有提供。minikube 的虛擬機器中也有容器執行時,但是無法單純安裝 Docker 環境。

對於 Kubernetes 環境來說,這幾種都適合,相比 Colima 來說還支援建立多個叢集(當前 Colima 最新版本是 0.2.2,多叢集的支援也在開發中。估計 0.3.0 會提供,畢竟建立多個虛擬機器就能實現)。但使用 Colima 的話,Kubernetes 和 Docker 可以共享映象(本地映象)和執行時。

不足

多叢集的支援

前面提到,目前還不支援建立多個 Kubernetes 叢集,估計 0.3.0 會提供。

m1 的支援

這裡還是要說下 m1,我現在主要用 m1 的電腦,本地的容器執行時用的 Docker Desktop。

前面我們有留意到虛擬機器使用的是 aarch64 架構系統, 對於某些不支援 arm64 的映象還是無法執行 。畢竟 Lima 是原生支援 m1,而不是使用 Rosetta 轉譯的 Docker Desktop。

有興趣的同學可以嘗試用 Rosetta 轉譯 Lima。

推薦閱讀 點選標題可跳轉

《Docker是什麼?》

《Kubernetes是什麼?》

《Kubernetes和Docker到底有啥關係?》

《教你如何快捷的查詢選擇網路倉庫映象tag》

《Docker映象進階:瞭解其背後的技術原理》

《教你如何修改執行中的容器埠對映》

《k8s學習筆記:介紹&上手》

《k8s學習筆記:縮擴容&更新》

《Docker 基礎用法和命令幫助》

《在K8S上搭建Redis叢集》

《灰度部署、滾動部署、藍綠部署》

《PM2實踐指南》

《Docker垃圾清理》

《Kubernetes(k8s)底層網路原理刨析》

《容器環境下Node.js的記憶體管理》

《MySQL 快速建立千萬級測試資料》

《Linux 與 Unix 到底有什麼不同?》

《淺談幾種常見 RAID 的異同》

《Git 筆記-程式設計師都要掌握的 Git》

《老司機必須懂的MySQL規範》

《Docker中Image、Container與Volume的遷移》

《漫畫|如何用Kubernetes搞定CICD》

《寫給前端的Docker實戰教程》

《Linux 作業系統知識地圖2.0,我看行》

《16個概念帶你入門 Kubernetes》

《程式設計師因接外包坐牢456天,長文敘述心酸真實經歷》

《IT 行業老鳥,有話對你說》

《HTTPS 為什麼是安全的? 說一下他的底層實現原理?

免責宣告:本文內容來源於網路,所載內容僅供參考。轉載僅為學習和交流之目的,如無意中侵犯您的合法權益,請及時聯絡Docker中文社群!