Poy Chang's Blog

podman 筆記

本篇作為書籤用途,記錄網路上的 podman 相關資訊

安裝

1
2
3
4
5
6
# 使用 winget 搜尋 Podman 的安裝 ID
winget search podman
# 安裝 Podman
winget install RedHat.Podman
# 驗證安裝
podman --version

常用指令

功能 指令範例 說明
查看本地映像檔 podman images 顯示已下載的映像檔
執行容器 podman run -it --rm alpine sh 執行 Alpine 容器並進入 shell
後台執行容器 podman run -d -p 8080:80 nginx 背景執行 nginx 並對外開放 8080
查看容器列表 podman ps -a 顯示所有容器(包含已停止)
停止容器 podman stop <容器ID或名稱> 停止指定容器
刪除容器 podman rm <容器ID或名稱> 刪除指定容器
刪除映像檔 podman rmi <映像ID或名稱> 刪除指定映像檔
查看容器日誌 podman logs <容器ID或名稱> 顯示容器輸出
進入容器 podman exec -it <容器ID或名稱> bash 進入容器執行 bash
建立映像檔 podman build -t my-image . 使用 Containerfile 建立映像檔
查看網路設定 podman network ls 列出 Podman 網路
建立自訂網路 podman network create my-net 建立自訂橋接網路
執行 rootless 容器 podman run -it alpine sh 非 root 使用者執行容器

📌 建議:搭配 --rm 可在容器結束後自動清除,適合測試用途;搭配 -v 可掛載資料夾。

使用 Containerfile 建立映像檔

Podman 支援使用 ContainerfileDockerfile 建構鏡像。

範例:建立一個簡單的 Nginx 映像檔

1
2
FROM nginx:alpine
COPY ./html /usr/share/nginx/html

目錄結構:

1
2
3
4
my-nginx/
├── Containerfile
└── html/
└── index.html

建立映像檔:

1
2
cd my-nginx
podman build -t my-nginx .

執行映像檔:

1
podman run -d -p 8080:80 my-nginx

接著可用瀏覽器開啟 http://localhost:8080 查看效果。

Podman vs Docker

項目 Podman Docker
架構 無守護程序(Daemonless),每個容器獨立執行 有守護程序(Daemon),透過 dockerd 管理所有容器
權限模式 支援 Rootless 模式,可在非 root 使用者下執行容器,提升安全性 預設需 root 權限,雖然支援 rootless,但設定較複雜
OCI 相容性 完全支援 OCI 標準,可執行 Docker 映像檔與 CLI 指令 同樣支援 OCI 標準,是最早推動該標準的工具之一
系統整合 可與 systemd 整合,將容器當作 Linux 服務管理 主要透過 Docker Compose 或 Swarm 進行編排與管理
遠端管理能力 原生不支援遠端 API,但可透過 Podman REST API 或 SSH 管理 內建 REST API,支援遠端 CLI 操作與第三方工具整合
容器啟動速度 無需守護程序,某些情境下啟動速度更快 守護程序需啟動並維持連線,可能影響啟動效率
使用情境 適合單機開發、系統整合、強調安全性的環境 適合多節點部署、CI/CD、雲端平台整合的場景
社群與生態系 社群活躍,Red Hat 與 Fedora 積極推廣 生態系成熟,擁有大量教學資源與第三方工具支援

📌 建議選用:

  • 若你偏好無守護程序、rootless 安全性、與 Linux 系統整合,Podman 是理想選擇。
  • 若你需要成熟生態系、遠端管理、或多節點容器編排,Docker 更為合適。

參考資料: