Podman
是一个开源的容器管理工具,用于开发、管理和运行OCI
容器。Podman
提供了与Docker
十分相似的功能。与Docker
相比,Podman
的一些优势:
但是,Podman
也有一些局限性,由于没有Daemon
守护进程,所以不支持--restart
策略,不过使用k8s
或者systemd
可以解决这个问题。
Ubuntu/Debian
:
$ sudo apt-get -y install podman
CentOS
:
$ sudo yum -y install podman
# 列举镜像
$ podman images
# 删除镜像
$ podman rmi IMAGE
# 运行容器
$ podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24
# 列出当前正在运行的容器
$ podman ps
# 列出所有容器
$ podman ps -a
# 停止容器
$ podman stop myapp
# 删除容器
$ podman rm myapp
# 创建pod
$ podman pod create -p 8080:8080 --name mypod --volume ./html:/var/www/html:z
# 列出pod
$ podman pod list
# 停止pod
$ podman pod stop mypod
# 删除pod
$ podman pod rm mypod
前面提到,podman
没有daemon
进程,因为启动容器命令没有--restart=always
参数,所以容器自启动需要结合systemd
或k8s
来实现。本文主要介绍通过systemd
来实现容器自启动。操作如下:
# 生成systemd单元文件
$ podman generate systemd --new --name CONTAINER_NAME -f
$ ls *.service
CONTAINER_NAME.service
# 加载systemd服务,设置开机自启
$ mv CONTAINER_NAME.service ~/.config/systemd/user/
$ systemctl --user daemon-reload
# 到这里,只有在用户登录会话后,才会运行
$ systemctl --user enable CONTAINER_NAME.service
# 如果要让用户实例随系统自启动,需要执行以下命令,否则一旦用户注销,所有容器都会退出。
$ loginctl enable-linger
至此,容器已经可以利用systemd
守护进程并自动启动。
Ubuntu 22.04
下Podman
启动容器提示报错Error validating CNI config file /etc/cni/net.d/xxx.conflist: [plugin bridge does not support config version "1.0.0" plugin portmap does not support config version "1.0.0" plugin firewall does not support config version "1.0.0" plugin tuning does not support config version "1.0.0"]
解决方案:
$ curl -O http://archive.ubuntu.com/ubuntu/pool/universe/g/golang-github-containernetworking-plugins/containernetworking-plugins_1.1.1+ds1-3_amd64.deb
$ dpkg -i containernetworking-plugins_1.1.1+ds1-1_amd64.deb