2022/07/25

Podman

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 人的一天

Podman 初次体验 | Yiran's Blog

Podman 容器设置开机启动 | 码农家园

用systemd设置podman 生成的容器开机自启动_lggirls的博客-CSDN博客_podman systemd启动

沒有留言:

張貼留言