Redhat 8 開始,提供了 podman,取代 docker,podman 是一種 daemonless container engine,使用時,可直接 alias docker=podman
完全取代 docker 的指令。
docker daemon 有個問題,如果 daemon 不存在,所有的 container 都無法運作。且 docker daemon 是所有 container process 的 parent process,所有 docker 的指令,都必須使用有 root 權限的使用者。
podman 直接與 image registry 溝通,而不是透過 daemon process 處理。 buildah 替代 Docker build,而跟 Image Registry 的溝通則被 skopeo取代。跟其他的 container 一樣,podman 是透過 OCI compliant 的 container runtime (runc, crun, runv) 作為 OS 的介面,執行 containers。
安裝
就直接用 dnf 安裝
dnf module install container-tools -y
以下是一些常用的指令
# search httpd image
podman search httpd --filter=is-official
# pull image
podman pull docker.io/library/httpd
# run httpd image
# -d 代表要列印 container ID
# -t 代表要加上 peudo-tty,才能用 interactive shell 執行任意指令
podman run -dt -name httpd1 -p 8080:80/tcp docker.io/library/httpd
# list images
podman images
# list process
podman ps
# start/stop
podman start httpd1
podman stop httpd1
# log
podman logs -l
service
因 podman 沒有 daemon process,故開機啟動時,無法像 docker 一樣,可以在 docker daemon process 啟動時,同時啟動 container。這時候必須要透過 system service 處理系統開機的自動啟動。
vi /etc/systemd/system/httpd1.service
[Unit]
Description=Graphite Docker Container
[Service]
Type=simple
TimeoutStartSec=0
Restart=on-failure
RestartSec=30s
ExecStart=/usr/bin/podman start -a httpd1
SyslogIdentifier=graphite
ExecStop=/usr/bin/podman stop -t 10 httpd1
[Install]
WantedBy=multi-user.target
然後用 systemd 啟動
systemctl daemon-reload
systemctl enable httpd1
systemctl start httpd1
References
Podman 淺談 - 為何你應該選擇 Podman 而不是 Docker? - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
用systemd设置podman 生成的容器开机自启动_lggirls的博客-CSDN博客_podman systemd启动