容器编排工具是当今最重要的网络开发技术之一,许多强大的技术正在竞争行业主导地位。
Podman是红帽公司的产品,旨在以类似Kubernetes的方式构建、管理和运行容器,作为主要参与者的可靠替代品,吸引了开发者的注意。
我们将对Podman和Docker进行比较,Docker是近十年来的标准容器化工具,因为这两种技术有根本的区别,但也完全适合一起工作。
目录
什么是容器协调?
什么是Docker?
什么是Podman?
Podman vs Docker差异
➤架构
➤根权限
➤ 安全
➤ Systemd
➤构建镜像
➤Docker Swarm
➤ 一体化与模块化
Podman与Docker:它们可以一起工作吗?
什么是容器编排?
容器是独立的软件包,包括代码及其依赖性:库、工具、设置和运行时间。由于容器提供了更快的部署和可扩展性,并在开发和暂存阶段统一工作,因此业界迅速采用容器作为容器化架构的核心组成部分。
容器是轻量级的、可移植的和安全的,提供了一个与任何环境兼容的绝缘空间。通过将软件与操作系统分离,容器可以被转移到任何地方(例如,从Linux到Windows系统),避免了会阻止它们工作的错误和误差。
什么是Docker?
Docker是标准的容器管理技术。它在行业中的分量很重,以至于当大多数人想到容器时,就会想到Docker。
Docker成为了容器协调的瑞士军刀,在其他专门的替代方案出现之前就包含了许多功能。它必须成长为一个独立的、自给自足的工具,能够处理开发人员的所有需求,因为管理容器的复杂性在增加。
它很快成为一个包含为特定任务开发的工具的一体化解决方案。其中之一是Docker Swarm,这是一个原生的Docker功能,可以让你集群和调度Docker Engines,这是另外一个旨在创建和管理容器群的工具。
Docker的附属工具处理所有与容器编排有关的任务,从负载平衡到网络,使其成为行业的主要选择,此外它还是既定的参考技术。
但这种自给自足也有其不足之处。虽然它是一个强大的系统,可以在所有的发展阶段创建和运行容器,但其他工具很难与它进行互动。随着近年来许多其他用于特定任务的专业工具开始涌现,Docker成为许多开发者的起点,他们将一些操作分配给其他更轻量级的平台和工具。
什么是Podman?
Podman是一个开源的、Linux原生的工具,旨在开发、管理和运行开放容器倡议(OCI)标准下的容器和豆荚。Podman是由Red Hat开发的用户友好型容器协调器,是RedHat 8和CentOS 8的默认容器引擎。
它是一组命令行工具之一,旨在处理容器化过程中的不同任务,可以作为一个模块化框架工作。这套工具包括:
Podman- Pods和容器镜像管理器
Buildah- 容器构建器
Skopeo- 容器镜像检查管理器
runc- 容器运行器和功能构建器,用于podman和buildah
crun - 可选的运行时间,可以为无根容器提供更大的灵活性、控制和安全性
这些工具还可以与任何兼容OCI的容器引擎(如Docker)一起工作,使其很容易过渡到Podman或与现有Docker安装一起使用。Kubernetes可以使用Podman吗?是的,它可以。事实上,Kubernetes和Podman在某些方面是相似的。
Podman对容器有不同的概念方法。正如其名称所暗示的,Podman可以创建容器 "pod",共同工作,这一功能类似于Kubernetes的pod。Pods将独立的容器组织在一个共同的名称下,将它们作为单一单元进行管理。
主要的好处是,开发人员可以共享资源,在一个pod内为同一个应用程序使用不同的容器:一个容器用于前端,另一个用于后端,以及一个数据库。Pod定义可以导出到与Kubernetes兼容的YAML文件,并应用到Kubernetes集群中,使容器更快地进入生产。
Podman的另一个决定性特征是它是无守护程序的。守护进程是一个在后台运行的程序,处理服务、进程和请求,没有用户界面。Podman是一个独特的容器引擎,因为它实际上并不依赖守护进程,而是将容器和pod作为子进程启动。
你可能会问**"我为什么要使用Podman?"**Podman作为一个开发和管理工具有独特的优势,使其在适当的情况下成为Docker的可行和有趣的替代品。或者说是与Docker并肩作战的有力补充,因为它支持Docker兼容的CLI界面。
Podman与Docker差异
Podman和Docker有许多共同的功能,但也有一些根本的区别。这些并不意味着一个比另一个更好,但可能是选择最适合特定项目的决定性因素。
架构
Docker使用一个守护程序,一个在后台运行的程序,来创建镜像和运行容器。Podman有一个无守护程序的架构,这意味着它可以在启动容器的用户下运行容器。Docker有一个客户端-服务器的逻辑,由一个守护程序进行调解;Podman不需要调解人。
根部权限
由于Podman没有守护程序来管理它的活动,所以它的容器也没有root权限。Docker最近在其守护进程配置中加入了无根模式,但Podman首先使用了这种方法,并将其作为一项基本功能加以推广。而这是因为下一点。
安全性
**Podman比Docker更安全吗?**Podman允许容器的非root权限。无根容器被认为比有root权限的容器更安全。在Docker中,守护程序拥有root权限,使其成为攻击者的首选通道。Podman中的容器默认没有root权限,在root和无root级别之间增加了一个自然屏障,提高了安全性。尽管如此,Podman仍然可以同时运行有根和无根的容器。
Systemd
由于没有守护进程,Podman需要另一个工具来管理服务并支持在后台运行容器。Systemd为现有的容器创建控制单元或生成新的容器。systemd也可以与Podman集成,允许它在默认情况下启用systemd来运行容器,而不需要做任何修改。
通过使用systemd,供应商可以将他们的应用程序作为容器来安装、运行和管理,因为现在大多数应用程序都是以这种方式专门打包和交付。
构建镜像
作为一个自给自足的工具,Docker可以自己构建容器镜像。Podman需要另一个叫Buildah的工具的协助,这表达了它的专业性:它是为运行而不是为自己构建容器而做的。
Docker Swarm
Podman不支持Docker Swarm,这可能会把它排除在使用该功能的项目选项之外,因为使用Docker Swarm命令会产生一个错误。Podman最近增加了对Docker Compose的支持,使其与Swarm兼容,克服了这个限制。Docker自然也能与Swarm很好地配合。
一体化与模块化
这也许是这两种技术的关键区别。Docker是一个单一的、强大的、独立的工具,具有所有隐含的好处和缺点,在整个周期内处理所有的容器化任务。Podman有一个模块化的方法,依靠专门的工具来完成特定的任务。
Podman与Docker他们能一起工作吗?
作为Docker的最佳和最容易应用的替代品出售--用户可以直接将Docker别名为Podman(别名docker=podman),没有任何问题,如本演讲所示--Podman是一个更有能力完成容器化任务的工具。
Podman是Docker的替代品吗?
如果你要从头开始一个项目,Podman可以作为一个主要的容器化技术选择。如果项目正在进行,并且已经在使用Docker,那就要看具体情况了,但可能不值得去做。作为一个Linux原生应用,它要求参与的开发者具备Linux技能。
开发人员可以在开发阶段依靠Docker来结合这两种工具,然后在运行环境中把项目推给Podman,从它提供的额外安全性中受益。而且由于它们都符合OCI标准,兼容性应该不是问题。
Docker和Podman可以共存吗?
是的,而且很好。许多开发者都在使用Docker和Podman来创建更安全、更高效、更敏捷的框架。它们有很多共同点,使得从Docker到Podman的过渡或它们的组合相当无缝。