📦 Podman
無 daemon、更安全的容器管理工具
Podman 與 Docker 指令高度相容(alias docker=podman),但無需 root daemon 即可執行容器,安全性更高,支援以 systemd 管理容器服務。
安裝
$ sudo apt update && sudo apt install -y podman
podman --versionpodman version 4.9.3
與 Docker 高度相容
Podman 的指令與 Docker 幾乎相同,可直接用 alias 取代:
$ alias docker=podman # 加入 ~/.bashrc 永久生效
# 大多數 Docker 指令可直接使用
podman pull nginx:alpine
podman run -d -p 80:80 --name web nginx:alpine
podman ps
podman logs web
podman exec -it web sh
podman stop web && podman rm webRootless 容器(無需 root)
Podman 最大優勢:一般使用者即可執行容器,不需要 root 或 sudo:
$ # 以一般使用者身份執行容器
podman run -d -p 8080:80 --name web nginx:alpine
podman ps
Rootless 模式下,容器內的 root 實際上對應主機的當前使用者,更加安全。但注意:綁定 1024 以下的 port 需要額外設定或使用高位 port 再用防火牆轉發。
將容器設為 systemd 服務
$ # 先啟動容器
podman run -d --name myapp myapp:1.0
# 產生 systemd 服務檔
mkdir -p ~/.config/systemd/user
podman generate systemd --name myapp --files --new
mv container-myapp.service ~/.config/systemd/user/
# 啟用(使用者級服務)
systemctl --user enable --now container-myapp.service
# 設定使用者登出後服務仍繼續執行
loginctl enable-linger $USERPod 管理(類似 Kubernetes Pod)
Pod 讓多個容器共享網路命名空間,適合需要緊密協作的服務:
$ # 建立 Pod(並暴露 Port)
podman pod create --name webapp -p 80:80
# 在 Pod 中加入容器
podman run -d --pod webapp --name nginx nginx:alpine
podman run -d --pod webapp --name app myapp:1.0
# 管理整個 Pod
podman pod start webapp
podman pod stop webapp
podman pod ps