17.3 Podman - 下一代 Linux 容器工具
版本說明:Podman 保持活躍的開發和發布週期。建議訪問 Podman 官方文件 和 GitHub Releases 獲取最新版本。
Podman 是一個無守護程序、與 Docker 指令高度相容的下一代 Linux 容器工具。它由 Red Hat 開發,旨在提供一個更安全的容器執行環境。
17.3.1 Podman vs Docker
Podman 和 Docker 在設計理念上存在顯著差異,主要體現在架構和許可權模型上。
| 屬性 | Docker | Podman |
|---|---|---|
| 架構 | C/S 架構,依賴守護程序 (dockerd) |
無守護程序 (Daemonless) |
| 許可權 | 預設需要 root 許可權 (雖有 Rootless 模式) | 預設支援 Rootless (非 root 使用者執行) |
| 生態 | 完整的生態系統 (Compose, Swarm) | 專注單機容器,配合 Kubernetes 使用 |
| 映象建立 | docker build |
podman build 或 buildah |
17.3.2 安裝
Podman 支援多種作業系統,安裝過程也相對簡單。
CentOS / RHEL
$ sudo yum -y install podman
macOS
macOS 上需要安裝 Podman Desktop 或透過 Homebrew 安裝:
$ brew install podman
$ podman machine init
$ podman machine start
17.3.3 基本使用
podman 的指令行幾乎與 docker 完全相容,大多數情況下,你只需將 docker 替換為 podman 即可。
執行容器
## $ docker run -d -p 80:80 nginx:alpine
$ podman run -d -p 80:80 nginx:alpine
列出容器
$ podman ps
建立映象
$ podman build -t myimage .
17.3.4 Pods 的概念
與 Docker 不同,Podman 支援『Pod』的概念 (類似於 Kubernetes 的 Pod),允許你在同一個網路命名空間中執行多個容器。
## 建立一個 Pod
$ podman pod create --name mypod -p 8080:80
## 在 Pod 中執行容器
$ podman run -d --pod mypod --name webbing nginx
17.3.5 遷移到 Podman
如果你習慣使用 docker 指令,可以簡單地設定別名:
$ alias docker=podman
Systemd 整合
Podman 可以生成 systemd 單元檔案,讓容器像普通系統服務一樣管理。
## 建立容器
$ podman run -d --name myweb -p 8080:80 nginx
## 生成 systemd 檔案
$ podman generate systemd --name myweb --files --new
## 啟用並啟動服務
$ systemctl --user enable --now container-myweb.service
Podman Compose
雖然 Podman 相容 Docker Compose,但在某些場景下你可能需要明確使用 podman-compose。
$ pip3 install podman-compose
$ podman-compose up -d