Apple M3 上的 Podman Desktop 終於可以用啦!
如果你跟我一樣是 Apple M3 系列的使用者,平時有不少工作需要仰賴跑 Container 來完成的,那我相信你一定會對 2024/1/24 Podman Desktop Release 1.7 的釋出感到開心,這個版本修復了 QEMU on Apple M3 的問題,讓我們可以在 M3 上使用 Podman 跑 Container 了!
Podman Desktop 使用場景
常見使用場景:
- 單獨把一個 Container 放到 Podman Container Engine 上運行
- 把 Container 轉成 Pod 放到 Local Kubernetes 環境上運行, 如 OpenShift Local / KIND / Minikube 上運行
- 把 Container 轉成 Pod 放到 Podman Container Engine 環境上運行,然後再部署到 Kubernetes 上
- 使用 Docker Desktop Extension 常見的功能,例如掃描漏洞等
- 編譯 Container Images
1. 單獨跑一個 Container
一個相當經典的使用方式,這邊以我自己維護的 pichuang/debug-container 為例,上圖的操作會等同於下面指令
$ docker pull ghcr.io/pichuang/debug-container:master
$ podman pull ghcr.io/pichuang/debug-container:master
$ docker images --filter reference=debug-container
$ podman images --filter reference=debug-container
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/pichuang/debug-container master 127df4e7af3f 12 hours ago 713 MB
$ docker run -it --privileged --rm ghcr.io/pichuang/debug-container:master
$ podman run -it --privileged --rm ghcr.io/pichuang/debug-container:master
[root@2ae1a1c62ba3 ~]#
是毫無懸念地使用方式,跟指令的差異就是有 Desktop 可以用滑鼠點一點操作就完成了
2. 把 Container 轉換 Pod 塞到 Kubernetes cluster
環境上運行
差異就是把定義好的 debug-container.yaml
用 kubectl apply -f
塞到指定的 Kubernetes cluster
上運行,要留意的事情是,這邊 Podman Desktop 不會顯示 Kubernetes 上的資訊,你得要用 kubectl get pods
來查看,上圖的操作會等同於下面指令
3. 把 Container 轉換 Pod 塞到 Podman Container Engine
環境上運行
3.1 先把 Kubernetes YAML 在本機用 Podman Containe Enginer 運行起來
關於 4
,podman 全名應為 Pod Manager,他本身設計基礎是以 Pod 為單位作為設計的,所以他可以支援把 Kubernetes 的 YAML 轉換成 Pod 並且直接用 Podman Container Engine 運行起來,相當適合你尚未把服務放到 Kubernetes 之前,單純想要對 Pod 這個範圍內的操作進行顆粒度較細的調教,這會節省很多時間,上圖的操作會等同於下面指令
3.2 再把 Pod 轉換成 Deployment 部署到 Kubernetes 上
關於 5-6
,在 Pod 的欄位內,有支援將當前的 Pod 直接產生 Pod YAML
和部署到指定的 Kubernetes 之上
,如果你是本機開發的話,會是一個相當方便的功能,點一點就可以跑到 Kubernetes 為底的環境運行了
在部署到指定的 Kuberentes 之上
這個階段,雖然能做的事情不像 kubectl apply
自己下指令來的多樣,但就以 Pod 這個範圍的測試開發來講,是可以考慮使用的路線,真不行的話,你就自己產生 Deployment YAML 來部署就好了
倘若你覺得這個 Pod 跑起來沒啥問題,想要換成用 Deployment 的方式跑,那你可以用下面指令,改一下 --type deployment
就可以或得到一個會動的 Deployment YAML,然後再隨需求細修參數即可
4. 安裝相容 OCI 格式的 Extenstion
Podman Desktop 內建其實沒這 Aqua Trivy 功能,需要另外裝,故我想強調的事情是,這工具也支援安裝既有 Docker Desktop Extenstion,可以去 Dockerhub 這邊找到需要的服務網址後裝進去
5. 編譯 Container Images
也是經典使用方式,但我還沒研究怎麼在筆電同時編出 aarch64 和 x86_64 想到再來補
Q&A
Q1: Docker Desktop 和 Podman Desktop 怎麼挑?
我的看法還以原廠售後支援
和 功能支援
兩個角度來看
-
售後產品支援
- 你如果是以 Docker 為主或者是有愛好的人,建議以 Docker / Docker Desktop 體系為主,Docker 原廠 (與 Mirantis 無關) 有提供 Docker Desktop 原廠產品售後支援
- 你如果是以 Red Hat 體系或很清楚容器運作的人,建議以 Podman / Podman Desktop 體系為主,跟前者不太一樣的是,Red Hat 支援是以 Red Hat Enterprise Linux 產品角度支援,有中文支援
-
功能支援
基於此文 Missing commands, 比較
Missing commands in podman
和Missing commands in docker
內有沒有你本來就在用的指令,如果有的話,就可以用功能性評估進行選擇,因為歷史典故,所以都是看Missing commands in podman
這個表格就好,只要裡面你看完都沒有你要用的指令,恭喜你,你兩邊都可以選,使用起來沒差
Q2: 如果初次使用 podman, 但我指令或程式都寫 docker 該怎麼辦?
這不是開玩笑的,認真這樣做
Q3: Podman Desktop v.s. Docker Desktop v.s. Lens v.s. k9s?
你如果是維護 Kubernetes 的人,請看 Lens / k9s 是你的好選擇,主要他們都是針對 Kubernetes API 進行操作管理 你如果是開發或打包 Container 程式部署的人,請看 Podman Desktop / Docker Desktop 為主
Q4: 現行軟硬體版本資訊?
於 20240206 快照版本資訊
- Apple M3 Pro
- macOS 14.3
- Podman Desktop v1.7.0
- Podman v4.9.0
- OpenShift Local v2.32.0
Q5: 如何安裝 Podman Desktop 和他的相依性套件?
強烈建議從官網上先把 Podman Desktop 安裝好,然後再透過這個介面去安裝其他的,不然可能會遇到一些靈異現象
https://podman-desktop.io/downloads
Q6: Mirantis 和 Docker 的關係?
雖然 2019/11/13,Miratnis 併購 Docker,但目前兩家還是不一樣的公司,因為產品線不一樣
基於 Discover Mirantis Products Learn,Mirantis 主要提供下列產品和專案
- Mirantis Container Cloud
- Mirantis Kubernetes Engine
- Mirantis Container Runtime (前身為 Docker Engine - Enterprise)
- Mirantis Secure Registry
- Mirantis OpenStack for OpenStack
- Lens IDE
- k0s
- Lagon
基於 Docker subscriptions and features,Docker 主要提供下列產品和專案
- Docker Engine
- Docker compose
- Docker Kubernetes
- Docker Hub
- Docker Desktop
當中就是 Docker Engine 的支援問題,按照 Docker Support 的文件描述相當妙
Docker doesn't provide support for Docker Engine. Docker provides support for Docker products, including Docker Desktop, which uses Docker Engine as one of its components.
所以無論是 Docker Engine 還是 Docker Compose 的支援,都應該去找 Docker 原廠,而不是 Mirantis 原廠
總結
- 你是開發者,需要
Docker Desktop
和Docker Engine
的使用支援,需要找 Docker 原廠訂閱服務 - 你是維運者,需要受企業支援的 Container Rutime,那你應該要找
Mirantis Container Runtime
也就是 Docker-EE 路線,可參考 Mirantis Container Runtime 的安裝文件,而不是找 Docker 原廠
Q7: Dev Container 預設用 Docker 誒,怎麼改成 Podman?
很簡單, 下面一發解決
然後重開 VSCode 就好了
文後廢言
最近看香格里拉·開拓異境,根本就是魂系列遊戲的動畫化,就想到其實我工作也是常遇到很多客戶的特規需求,常常加班用一些怪招研究測試半天,最終通過難關,忽然覺得我是個充滿著魂精神的系統架構師: 高自由度 (怪招多)、高難度 (客戶要求通常文件上都沒寫)、高挑戰 (自己挑燈夜戰搞出來)