什么是 Podman?
Podman是一个无守护程序、开源的 Linux 原生工具,旨在使用 Open Containers Initiative ( OCI )容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman 提供了任何使用过 Docker容器引擎的人都熟悉的命令行界面 (CLI) 。大多数用户可以简单地将 Docker 别名为 Podman(别名 docker=podman)而不会出现任何问题。与其他常见的容器引擎(Docker、CRI-O、containerd)类似,Podman 依赖于符合 OCI 的容器运行时(runc、crun、runv 等)与操作系统交互并创建正在运行的容器。这使得 Podman 创建的正在运行的容器与任何其他常见容器引擎创建的容器几乎没有区别。
Podman 控制下的容器可以由 root 或非特权用户运行。Podman 使用libpod库管理整个容器生态系统,包括 pod、容器、容器映像和容器卷。Podman 专注于帮助您维护和修改 OCI 容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建、运行和维护这些容器和容器映像。
有一个 RESTFul API 来管理容器。我们还有一个可以与 RESTFul 服务交互的远程 Podman 客户端。我们目前支持 Linux、Mac 和 Windows 上的客户端。RESTFul 服务仅在 Linux 上受支持。
Podman安装方法
[root@localhost ~]# yum list all | grep podman
cockpit-podman.noarch 25-3.module_el8.4.0+575+63b40ad7 @AppStream
podman.x86_64 2.1.1-3.module_el8.4.0+575+63b40ad7 @AppStream
podman-catatonit.x86_64 2.1.1-3.module_el8.4.0+575+63b40ad7 @AppStream
cockpit-podman.noarch 43-1.module_el8.7.0+1106+45480ee0 appstream
pcp-pmda-podman.x86_64 5.3.7-7.el8 appstream
podman.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-catatonit.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-docker.noarch 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-gvproxy.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-plugins.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-remote.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
podman-tests.x86_64 2:4.0.2-1.module_el8.7.0+1106+45480ee0 appstream
python3-podman.noarch 4.0.0-1.module_el8.7.0+1106+45480ee0 appstream
[root@localhost ~]#
可以看出已经安装成功
[root@localhost ~]# which podman
/usr/bin/podman
[root@localhost ~]#
#podman不需要向docker一样需要启动,可以直接使用
安装完成之后可能会出现的报错
[root@localhost ~]# podman images
podman: symbol lookup error: podman: undefined symbol: seccomp_notify_fd
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
由于seccomp安装时不是最新的版本,这是需要安装最新的版本
[root@localhost ~]# rpm -qa | grep seccomp
libseccomp-2.4.3-1.el8.x86_64
[root@localhost ~]#
[root@localhost ~]# yum list all | grep seccomp
libseccomp.x86_64 2.4.3-1.el8 @anaconda
libseccomp.i686 2.5.2-1.el8 baseos
libseccomp.x86_64 2.5.2-1.el8 baseos
libseccomp-devel.i686 2.5.2-1.el8 appstream
libseccomp-devel.x86_64 2.5.2-1.el8 appstream
oci-seccomp-bpf-hook.x86_64 1.2.3-3.module_el8.6.0+926+8bef8ae7 appstream
[root@localhost ~]#
对libseccomp进行升级
[root@localhost ~]# yum -y update libseccomp
这里显示conmon不是最新版本,安装最新版本
[root@localhost ~]# podman images
WARN[0000] Conmon at /usr/bin/conmon invalid: outdated conmon version
WARN[0000] Conmon at /usr/bin/conmon is invalid: outdated conmon version
Error: please update to v2.0.24 or later: outdated conmon version
[root@localhost ~]#
[root@localhost ~]# rpm -qa | grep conmon
conmon-2.0.21-1.module_el8.4.0+575+63b40ad7.x86_64
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# yum list all | grep conmon
conmon.x86_64 2:2.0.21-1.module_el8.4.0+575+63b40ad7 @AppStream
conmon.x86_64 2:2.1.0-1.module_el8.7.0+1106+45480ee0 appstream
[root@localhost ~]#
[root@localhost ~]# yum -y update conmon
最后显示成功
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
添加加速器
[root@localhost ~]# cd /etc/containers/
[root@localhost containers]# ls
certs.d oci policy.json registries.conf registries.conf.d registries.d storage.conf
[root@localhost containers]# vim registries.conf
......
[[registry]]
prefix = "docker.io"
location = "ivknqowi.mirror.aliyuncs.com"
......
# # 1. example-mirror-0.local/mirror-for-foo/image:latest
# # 2. example-mirror-1.local/mirrors/foo/image:latest
# # 3. internal-registry-for-example.net/bar/image:latest
# # in order, and use the first one that exists.
short-name-mode = "permissive" 短名称模式
[root@localhost ~]# podman info
······
Blocked: false
Insecure: false
Location: ivknqowi.mirror.aliyuncs.com #已经配置成功
MirrorByDigestOnly: false
······
可以正常上传镜像
[root@localhost ~]# podman pull centos
Resolved "centos" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/centos/centos:latest...
Getting image source signatures
Copying