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 buildbuildah

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
第 140 页,共 196 页
使用 mdPress 构建