首页 后端 正文

什么是Podman——取代Docker的容器引擎

什么是Podman?

Podman是新容器领域的一颗新星,它的参与者突然多了很多。了解什么是Podman,以及它与Docker在Kubernetes兼容性方面的比较等等。

Podman是一个容器引擎--一种开发、管理和运行容器和容器镜像的工具。容器是标准化的、独立的软件包,包含了所有必要的元素,可以在任何地方运行而不需要定制,包括应用程序代码和支持库。基于容器的应用 在过去十年中彻底改变了软件开发,使分布式和基于云的系统易于部署和维护。

Podman是红帽公司的一个项目,是开源的,可以免费下载。它是容器化领域的一个相对新成员,1.0版本在2019年发布。此后,Podman取得了长足的进步,它的崛起与Docker的逐渐衰落相得益彰,Docker项目在许多方面创造了我们今天所知道的容器世界。

什么是Podman——取代Docker的容器引擎  第1张

Podman和Kubernetes

如果你对基于容器的开发稍微熟悉,你就会知道Kubernetes这个名字。随着容器化的应用程序越来越复杂,开发人员需要一些工具,可以协调在不同的虚拟机上,甚至在不同的物理机上运行的容器之间的相互作用。这样的工具被称为容器编排平台,而Kubernetes是迄今为止最突出的例子。Kubernetes可以与任何符合开放容器倡议(OCI)图像规范的容器一起工作,Podman的容器就符合这一规范。

Kubernetes的一个重要特征是pod的概念,这是一个由一个或多个容器组成的短暂分组,是Kubernetes可以管理的最小的计算单位。Podman也是以pod的概念为中心,正如其名称所暗示的那样。一个Podman pod也包括一个或多个容器,它们被分组在一个命名空间、网络和安全环境中。这种相似性使Podman和Kubernetes成为自然的结合,从一开始Red Hat的目标之一就是让Podman用户与Kubernetes协调容器。

Podman与Docker

容器世界的另一个大名,你几乎肯定听说过是Docker。Docker并不是第一个容器引擎,但在很多方面它已经定义了容器化。Docker的大部分工作方式是基于容器的开发的事实标准,以至于许多人使用 "Docker "作为容器的简称。

虽然Docker和Podman在容器生态系统中占据了类似的空间,但它们并不一样,它们在工作方式上有不同的理念和方法。例如,Docker是一个多合一的平台,有用于特定任务的工具,而Podman为了某些目的与其他项目合作--例如,它依靠Buildah来构建容器镜像。

架构上也有差异。例如,Docker没有本地的pods概念。另一个重要的区别是,Docker依靠一个持续运行的后台守护程序来创建镜像和运行容器,而Podman则将容器和pod作为独立的子进程启动。Docker的这方面设计对安全有重要影响,我们很快会讨论。

Podman上的Docker命令

由于设计和需要,Podman和Docker整体上是兼容的。这种兼容性部分归因于对开放标准的遵守。因为这两个引擎都使用符合OCI标准的容器,你可以用Docker创建一个容器并在Podman中修改它,或者反过来,然后将任何一个容器部署到Kubernetes。

当Podman在2019年推出时,Docker是如此占主导地位,其命令行界面已成为许多开发人员的编程程序和肌肉记忆的一部分。为了使潜在的移动到Podman更加无缝,Podman的创建者确保其命令和语法尽可能地反映Docker的命令和语法。他们甚至可以设置一个别名,将Docker的命令重新路由到Podman。

无根容器的安全性更高

由于Podman和Docker在很多方面都很相似,为什么你会选择其中一个而不是另一个?嗯,一个重要的原因是安全。还记得Docker是如何依靠一个守护进程来完成它的大部分工作的吗?该守护程序以root身份运行,这使得它成为攻击者的潜在入口。这并不是安全计算的一个不可逾越的障碍,但它确实意味着你必须花一些心思来处理Docker的安全问题。

在某些情况下,你想在主机上以root权限运行容器,而Podman可以让你这样做。但如果你想把你的容器安全地限制在用户空间,你也可以通过运行所谓的无根容器来做到这一点。无根容器没有比启动它的用户更多的权限;在容器内,该用户有root权限。你也可以使用命令行标志,以一种精细的方式为你的容器添加权限。

性能如何?

Docker在性能方面比Podman更胜一筹,至少有人这样认为。虽然关于这个问题的具体信息很少,但在Hacker News、Stack Overflow和Reddit上不难发现沮丧的开发者抱怨Podman的性能,尤其是在无根运行时。一些瑞典的大学生在几个不同的容器平台上运行了一个基准测试套件,发现Podman的性能不足,尽管这是一个较早的1.0前版本的Podman。虽然没有很多关于这个话题的技术信息,但从轶事上看,Podman的性能被扣分了。

Podman会取代Docker吗?

从目前的讨论来看,可能听起来没有任何伟大的氛围转变,用Podman取代Docker。但是,一个重大的变化即将到来,它将把Docker从其长期的利基中取代。Kubernetes本身。

Kubernetes和Docker多年来一直是容器世界的双巨头。但他们的共存总是有些不安。Kubernetes的兴起是在Docker在其利基市场上站稳脚跟之后--事实上,你可以说Kubernetes之所以流行,部分原因是Docker不能胜任管理大型分布式应用中需要协调的所有容器的任务。

Docker(公司)在2015年开发了自己的容器协调平台,被称为Swarm,旨在发挥Docker的优势。Swarm是在大张旗鼓的情况下推出的,但从未赶上Kubernetes。虽然Swarm仍有拥护者,但Kubernetes已经成为容器协调的事实标准,就像Docker成为容器生态系统其他方面的事实标准一样。

此外,Docker在其容器运行时间方面从未与Kubernetes打过交道,Kubernetes是容器引擎的底层组件,除其他任务外,还与底层操作系统(OS)内核一起工作并挂载单个容器镜像。Docker和Kubernetes都符合OCI图像规范,Kubernetes使用该规范来协调为容器构建的图像。但Kubernetes也依赖于与标准化插件API兼容的容器运行时间,该插件称为容器运行时间接口(CRI),而Docker一直没有实现。

长期以来,Docker的流行迫使Kubernetes使用Dockershim,这是一个符合CRI的层,是Kubernetes和Docker守护程序之间的一个中介。然而,这始终是一个黑客,今年年初,Kubernetes放弃了对Dockershim的支持。(相比之下,Podman使用云原生计算基金会的兼容CRI-O运行时)。

这是关于Docker试图成为一家企业公司而又失败的更大故事的一部分。简而言之,Docker从未能完全摆脱Kubernetes的束缚。同时,Kubernetes也不再像以前那样需要Docker了。

Podman是否会取代Docker还不清楚,但它肯定会成为竞争者之一。这有助于Podman不是一个寻求货币化的旗舰产品,而是一个更大的公司的单一开源技术产品。我们可以期待Podman和Kubernetes在未来的一段时间内保持交织在一起。

你应该使用哪个容器引擎?

希望这次讨论能让你了解到帮助你在这两个容器引擎中选择的因素。Podman是基于更安全的架构,而Docker则有更深的历史。Podman是Kubernetes原生的,而Docker也可以和Docker Swarm一起工作。Docker包含了许多容器相关任务所需的所有功能。Podman是模块化的,可以让你为不同的目的尝试不同的工具。

综上所述,"Podman vs. Docker "的问题在某种程度上是一个错误的选择。这两个平台都能创建符合OCI规范的镜像,而且都由许多相同的命令驱动,所以你可以在两者之间无缝移动。例如,你可能想使用Docker进行本地开发,然后使用Podman来部署你在Kubernetes内构建的容器。

打赏
海报

本文转载自互联网,旨在分享有价值的内容,文章如有侵权请联系删除,部分文章如未署名作者来源请联系我们及时备注,感谢您的支持。

转载请注明本文地址:https://www.shouxicto.com/article/6246.html

相关推荐

Tomcat安装及配置教程

Tomcat安装及配置教程

Podman是新容器领域的一颗新星,它的参与者突然多了很多。了解什么是Podman,以及它与Docker在Kubernetes兼容性方面...

后端 2022.08.25 0 1030

Dubbo的SPI机制简介

Dubbo的SPI机制简介

Podman是新容器领域的一颗新星,它的参与者突然多了很多。了解什么是Podman,以及它与Docker在Kubernetes兼容性方面...

后端 2022.08.20 0 801

发布评论

ainiaobaibaibaibaobaobeishangbishibizuichiguachijingchongjingdahaqiandaliandangaodw_dogedw_erhadw_miaodw_tuzidw_xiongmaodw_zhutouganbeigeiliguiguolaiguzhanghahahahashoushihaixiuhanheixianhenghorse2huaixiaohuatonghuaxinhufenjiayoujiyankeaikeliankouzhaokukuloukunkuxiaolandelinileimuliwulxhainiolxhlikelxhqiuguanzhulxhtouxiaolxhwahahalxhzanningwennonuokpinganqianqiaoqinqinquantouruoshayanshengbingshiwangshuaishuijiaosikaostar0star2star3taikaixintanshoutianpingtouxiaotuwabiweifengweiquweiwuweixiaowenhaowoshouwuxiangjixianhuaxiaoerbuyuxiaokuxiaoxinxinxinxinsuixixixuyeyinxianyinyueyouhenghengyuebingyueliangyunzanzhajizhongguozanzhoumazhuakuangzuohenghengzuoyi
支付宝
微信
赞助本站