Podman是一种开源的Linux原生工具,旨在根据OCI标准开发,、管理和运行容器和Pod。Podman是RedHat开发的一个用户友好的容器调度器,是RHEL 8和Centos 8系统中默认的容器引擎。
它是一款集合了命令集的工具,设计初衷是为了处理容器化进程的不同任务,可以作为一个模块化框架工作。它的工具集包括:
这些工具还可以与任何OCI兼容的容器引擎如(Docker)一起工作,使其易于转换到Podman或与现有的Docker安装一起使用。在某种程度上,Kubernets和Podman是相似的。
Podman对于容器有着不同的方法论。正如它的名字所暗示的那样,Podman可以创建一起工作的容器“Pod”,这是一个类似Kubernets里Pod的特性。Pod在一个共同的命名空间里,作为一个单元来管理容器。
使用Podman的一个好处是开发人员可以共享资源,在一个Pod中为同一个应用程序使用不同的容器:一个容器用于前端,另一个容器用于后端,还有一个数据库。Pod的配置可以导出到Kubernets兼容的YAML文件,并应用到Kubernets集群中,从而允许容器更快地进入生产。
Podman的另一个特性是无后台守护进程。它是一种独特的容器引擎,因为它实际上并不依赖于守护进程,而是作为子进程启动容器和Pod.
Podman和Docker有许多共同的特性,但是有一些根本的区别。技术不分好坏,只是侧重于哪个更适合某个特定场景。
Podman与Linux内核交互,通过runC容器运行时进程而不是Daemon来管理容器。Buildah实用程序用于替代Docker build作为容器镜像构建工具,Docker push被Skopeo替代,用于在注册仓库和容器引擎之间移动容器镜像。
架构
Docker使用守护进程,一个正在后台运行的程序,来创建镜像和运行容器。Podman是没有守护进程的,这意味着普通用户也可以启动运行容器。Docker有一个由守护进程引导的客户端--服务器逻辑架构;但Podman不需要此类守护进程。
Root特权
由于Podman没有守护进程来管理其活动,也无需为其容器分配Root特权。Docker最近在其守护进程配置中添加了Rootless模式,但Podman首先使用了这种方法,并将其作为基本特性进行了推广。
安全
Podman比Docker安全吗?Podman允许容器使用Rootless特权。Rootless容器被认为比Root特权的容器更安全。在Docker中,守护进程拥有Root权限,这使得它们易成为攻击者的首选入侵点。
Podman中的容器默认情况下不具有Root访问权限,这在Root级别和Rootless级别之间添加了一个自然屏障,提高了安全性。不过,Podman可以同时运行Root容器和Rootless容器。
Systemd
如果没有守护进程,Podman需要另一个工具来管理服务并支持后台运行的容器。Systemd为现有容器创建控制单元或用来生成新容器。Systemd还可以与Podman集成,允许它在默认情况下运行启用了Systemd的容器,从而无需进行任何修改。
通过使用Systemd,供应商可以将他们的应用程序封装为容器用来安装、运行和管理,因为现在大多数应用程序都是通过这种方式打包和交付的。
构建镜像
作为一款自给自足的工具,Docker可以自己构建容器镜像。Podman则需要另一种名为Buildah的工具的辅助,该工具充分体现了它的特殊性:它是为构建镜像而设计的,而不是为构建容器而生
Docker Swarm
Podman不支持Docker Swarm,这可能会在某些项目中被刨除在外,因为使用Docker Swarm命令会产生一个错误。然而,Podman最近增加了对Docker Compose的支持,使其与Swarm兼容,从而克服了这个限制。当然,Docker由于其原生的特性,与Swarm当然融合得很好。
All in one vs 模块化
也许这就是这两种技术的关键区别:Docker是一个独立的、强大的工具,在整个循环中处理所有的容器化任务,有优点也有缺点。Podman采用模块化的方法,依靠专门的工具来完成特定的任务。
由于它们都遵循OCI,兼容性不成问题。Podman和Docker能够共存,我们可以根据特定的场景来选择使用它们。开发人员可以在开发阶段依赖Docker,然后在运行时环境中将项目推向Podman,从而结合使用这两种工具。