Podman(Pod Manager)是一个由RedHat公司推出的容器管理工具,它的定位就是 Docker 的替代品,在使用上与Docker 的体验类似。Podman源于CRI-O项目,可以直接访问 OCI 的实现(如 runC),流程比 docker 要短。
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。它不需要在系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
在容器管理的链路中,Docker Engine的实现就是 dockerd daemon,它在 linux 中需要以 root 运行,dockerd 调用 containerd,containerd 调用 containerd-shim,然后才能调用 runc。顾名思义shim 起的作用也就是“垫片”,避免父进程退出影响容器的运训。
podman 直接调用 OCI runtime(runc),通过common 作为容器进程的管理工具,但不需要dockerd 这种以root 身份运行的守护进程。
在podman 体系中,有个称之为common 的守护进程,其运行路径通常是/usr/libexec/podman/conmon,它是各个容器进程的父进程,每个容器各有一个,common 的父则通常是 1 号进程。podman 中的 common 其实相当于docker体系中的 containerd-shim。
上图中所体现的是,podman不需要守护进程,而docker需要守护进程。Podman通过直接与Image Registry、Image和Container进行互动,而不是通过守护进程来解决以上问题。此外,Podman还允许用户在没有完全root 权限的情况下运行容器。 更为重要的是,它还提供了与Docker兼容的指令,使用户可以很轻易的从原本的Docker指令切换到Podman。
podman run #创建并启动容器
podman start #启动容器
podman ps #查看容器
podman stop #终止容器
podman restart #重启容器
podman attach #进入容器
podman exec #进入容器
podman export #导出容器
podman import #导入容器快照
podman rm #删除容器
podman logs #查看日志
podman system migrate #为用户停止所有容器并终止暂停进程
podman search #检索镜像
docke pull #获取镜像
podman images #列出镜像
podman image Is #列出镜像
podman rmi #删除镜像
podman image rm #删除镜像
podman save #导出镜像
podman load #导入镜像
podmanfile #定制镜像(三个)
podman build #构建镜像
podman run #运行镜像
podmanfile #常用指令(四个)
• COPY #复制文件
• ADD #高级复制
• CMD #容器启动命令
• ENV #环境变量
• EXPOSE #暴露端口
//安装podman
yum -y install podman
//仓库配置
vim /etc/containers/registries.conf
[registries.search]
registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io'] unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"]
git clone https://github.com/containers/podman/cd podman
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr
验证是否安装成功
运行podman容器
podman run -d --name httpd docker.io/library/httpd
podman images
列出运行的容器
podman ps
注意:如果在ps命令中添加-a,Podman 将显示所有容器。
检查正在运行的容器
您可以“检查”正在运行的容器的元数据和有关其自身的详细信息。我们甚至可以使用 inspect 子命令查看分配给容器的 IP 地址。由于容器以无根模式运行,因此未分配 IP 地址,并且该值将在检查的输出中列为“无”。
注意: -l 是最新容器的便利参数。您还可以使用容器的 ID 代替 -l。
podman inspect -l | grep IPAddress
查看一个运行中容器的日志
podman logs --latest
podman top
停止一个运行中的容器
podman stop --latest
删除一个容器
podman rm --latest