Podman 的使用和差异点记录

Redhat/CentOS 8 版本中,docker 默认被 podman 取代,两者虽然兼容但是仍然有所差异


1、Podman

官网 [ 链接 ]

Podman 是一个无守护的容器引擎,用于在 Linux 系统上开发、管理和运行 OCI 容器。容器可以有根模式下运行,也可以在无根模式下运行。简单地说:“alias docker=podman”。


2、Podman 的 使用

曾经,我们使用一个 Nginx 的 Docker 镜像需要用下列类似的命令

docker pull nginx:pecl
docker network create lnmp --subnet=172.16.1.0/24 --gateway 172.16.1.254
docker run -d --name nginx --network=lnmp --ip 172.16.1.10 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /var/log/nginx:/var/log/nginx:rw -p 80:80/tcp -p 443:443/tcp -p 443:443/udp --restart=unless-stopped nginx:perl

现在,我们有 podman 我们参考说明直接原样转换成 podman 的命令(实际过程通常都会报错)

podman pull nginx:pecl
podman network create lnmp --subnet=172.16.1.0/24 --gateway 172.16.1.254
podman run -d --name nginx --network=lnmp --ip 172.16.1.10 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /var/log/nginx:/var/log/nginx:rw -p 80:80/tcp -p 443:443/tcp -p 443:443/udp --restart=unless-stopped nginx:perl

你发现,并没有成功,原因有三点

1、podman 没有 network 参数,实际网络管理可查阅 [ 链接 ]

2、podman 不需要 --restart=unless-stopped 因为其本身没有守护进程。如果你需要守护进程可以使用 systemd 进行控制

3、podman 使用 pod 进行容器组的管理,不再像 docker 每次使用 network 管理。但是额外的网络配置,需要手动编辑位于 /etc/cni/net.d/ 下的网卡文件

所以上面的命令,改进一下就是

podman pull nginx:pecl
podman pod create --name lnmp
podman run -d --name nginx --pod lnmp -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /var/log/nginx:/var/log/nginx:rw -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -nginx:perl

关于守护进程,你可以手动创建一个 systemd 服务。(注意启动时多了一个 -a 参数才可以正常启动)

vim /etc/systemd/system/[email protected]

[Unit]
Description=Podman Container
Wants=syslog.target network.target
After=syslog.target network.target network-online.target

[Service]
ExecStart=-/usr/bin/podman start -a %i
ExecStop=-/usr/bin/podman stop -t 10 %i
Restart=always
RestartSec=20s

[Install]
WantedBy=multi-user.target

 

点赞

发表评论