容器编排工具作为当今最重要的Web开发技术之一,众多强者都在尝试争夺这一行业的主导地位。

Podman是RedHat的一款产品,旨在使用类似于Kubernetes的方法来构建、管理和运行容器,作为一款主流容器的可靠替代产品,它吸引了开发人员的关注。自RHEL 8起,Red Hat用CRI-O/Podman取代了Docker Daemon。为什么Red Hat想要摆脱Docker Daemon?这是因为使用Docker Daemon运行Docker有以下这些问题:

  • 单点故障问题,Docker Daemon一旦死亡,所有容器都将死亡

  • Docker Daemon拥有运行中的容器的所有子进程

  • 所有Docker操作都必须由具有跟root相同权限的用户执行

  • 构建容器时可能会导致安全漏洞

Podman通过直接与Image Registry、Image和Container进行互动,而不是通过守护进程来解决以上问题。此外,Podman还允许用户在没有完全root 权限的情况下运行容器。

更棒的是,它还提供了与Docker兼容的指令,使用户可以很轻易的从原本的Docker指令切换到Podman。

Podman和Docker这两种标准的容器化工具已经有近十年的历史了,今天这篇文章我们来对比下这两个技术,它们虽有不同,但还是非常适合一起使用。


 1 

Docker什么?

Docker是标准的容器管理技术。Docker在行业中举足轻重,以至于大多数人一想到容器,就会想到Docker。

Docker是容器编排世界的一把瑞士军刀,在其他替代方案出现之前就已经提供了诸多特性。随着容器管理复杂度的增加,它也必须成长为一个独立的、自给自足的工具,以便能提供开发人员的所有需求。

Docker也在很短的时间内,就成为All-in-one解决方案的关键工具之一。其中一款就是Docker Swarm,这是一款由Docker原生的,可以让你组建群集和调度Docker引擎,以及用来创建和管理容器群的解决方案。

Docker的诸多辅助工具处理所有与容器编排相关的任务,从负载均衡到网络,使其成为行业的首选,不光是作为行业技术参考。

尽管Docker是一个强大的系统,但这种自给自足的模式也有它的缺点。虽然可以在开发的所有阶段创建和运行容器,但其他工具在与Docker集成交互时或多或少存在些困难。

近年来,随着许多其他用于特定任务的专用工具的出现,Docker成为许多开发人员的起点,随之,他们将一些任务分配给其他更轻量级的平台和工具。


 2 

Podman是什么?

Podman是一种开源的Linux原生工具,旨在根据开放容器倡议(Open Container Initiative,OCI)标准开发、管理和运行容器和Pod。Podman是RedHat开发的一个用户友好的容器调度器,是RedHat 8和CentOS 8中默认的容器引擎。

它是一款集合了命令集的工具,设计初衷是为了处理容器化进程的不同任务,可以作为一个模块化框架工作。它的工具集包括:

  • Podman:Pod和容器镜像管理器

  • Buildah:容器镜像生成器

  • Skopeo:容器镜像检查管理器

  • Runc:容器运行器和特性构建器,并传递给Podman和Buildah

  • Crun:可选运行时,为Rootless容器提供更大的灵活性、控制和安全性

这些工具还可以与任何OCI兼容的容器引擎(如Docker)一起工作,使其易于转换到Podman或与现有的Docker安装一起使用。Kubernetes可以使用Podman吗?答案是:是的。事实上,Kubernetes和Podman在某些方面是相似的。

Podman对于容器有着不同的方法论。正如它的名字所暗示的那样,Podman可以创建一起工作的容器“Pod”,这是一个类似Kubernetes里Pod的特性。Pod在一个共同的命名空间里,作为一个单元来管理容器。

比较主要的好处是开发人员可以共享资源,在一个Pod中为同一个应用程序使用不同的容器:一个容器用于前端,另一个容器用于后端,还有一个数据库。Pod的配置可以导到Kubernetes兼容的YAML文件,并应用到Kubernetes集群中,从而允许容器更快地进入生产。

Podman的另一个特性是它是无守护进程的。守护进程是在后台运行的程序,它处理服务、进程和请求,没有用户界面。Podman是一种独特的容器引擎,因为它实际上并不依赖于守护进程,而是作为子进程启动容器和Pod。

你可能会问:“我为什么要使用Podman?”作为一种开发和管理工具,Podman具有独特的优势,这使得它在适当的环境中成为Docker的可行和有趣的替代品。或者一个与Docker并肩工作的强大补充,因为它支持与Docker兼容的CLI接口。


 3 

Podman vs Docker:区别

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采用模块化的方法,依靠专门的工具来完成特定的任务。


 4 

Podman vs Docker:他们能合作吗?

作为最好的、最易应用于Docker的替代方案——用户可以将Docker别名设置为Podman(alias docker=podman),且不会出现任何问题,正如本演示[1]中所示——Podman是一个非常强大的容器化任务工具。

Podman会是Docker的替代品吗?

如果你要从头开始一个项目,Podman可以是一个首要的容器化技术选项。如果项目正在进行,并且已经在使用Docker,这还需要具体情况具体分析,实际情况并不一定值得去改。而且作为一款Linux原生的应用,它要求相关开发人员具备Linux的相关技能。

开发人员可以在开发阶段依赖Docker,然后在运行时环境中将项目推向Podman,从而结合使用这两种工具,并受益于Podman所提供的更安全性。由于它们都是OCI兼容的,因此,兼容性不是个问题。

Docker和Podman能共存吗?是的,而且会很好。许多开发人员一直在合用Docker和Podman来创建更安全、更高效、更敏捷的框架。它们有很多共同之处,无论是从Docker到Podman的转变,亦或是二者合并使用,都可以做到无缝衔接。

你可以通过此链接[2]在Linux机器上直接使用Podman,如果手边没有,也可以在线[3]试用一下。

相关链接:

  1. https://www.youtube.com/watch?v=riZ5YPWufsY

  2. https://github.com/containers/podman

  3. https://www.katacoda.com/courses/containers-without-docker/running-containers-with-podman

Podman又是什么新技术?它和Docker有啥区别?相关推荐

  1. Podman是什么?它与Docker有什么区别?

    容器编排工具作为当今最重要的Web开发技术之一,众多强者都在尝试争夺这一行业的主导地位. Podman是RedHat的一款产品,旨在使用类似于Kubernetes的方法来构建.管理和运行容器,作为一款 ...

  2. docker run与docker start的区别?

    docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start). docker start的作用是:重新启动已 ...

  3. docker save 与 docker export 的区别

    缘起 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. docker save和docker export都能导出镜像包,咋看起来区别似乎不大.本文就 ...

  4. docker save与docker export的区别

    http://cnodejs.org/topic/59a2304f7aeedce818249eeb 缘起 docker save和docker export都能导出镜像包,咋看起来区别似乎不大.本文就 ...

  5. 今天看见.do网页,疑惑,这是什么文件??又是什么新技术??查了一下

    1)以do为扩展名的网页文件是java语言写的,以Struts为框架的;它的运行环境是tomcat,weblogic等:通常 用的数据库有oracle,mysql,mssql,access等.网页后台 ...

  6. docker run 与docker start的区别

    引用:http://www.wangminli.com/?p=1184 docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即 ...

  7. 虚拟机和Docker的最大区别

    使用Vagrant和KVM 或者Hyper-V我们可以构建和运行虚拟机.相关的工具比如 ansible, chef 或者puppet可以用来进行环境的设置和配置. 虚拟机和Docker都能够给一台宿主 ...

  8. 02.docker镜像的区别--Alpine、Slim、Stretch、Buster、Jessie、Bullseye

    原文链接 如果您像我一样,第一次创建Dockerfile并从DockerHub页面中选择镜像时,您会彻底困惑.有时候,像这样的选择会让我们的行动停滞不前,所以也许我们只是用标准的镜像,避免深入研究,这 ...

  9. docker CMD ENTRYPOINT区别

    CMD 容器启动命令 Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机.物理机里面那样,用 systemd 去启动后台服务,容器内没有后台服务的概念. 对于容器而言,其启动程序就 ...

最新文章

  1. 一些关键字表明变量属性值
  2. 马斯克的脑机接口公司Neuralink否认研究人员虐待猴子
  3. java判断一个类是否公共类
  4. 【转】【翻译】实体框架中的POCO支持 - 第二部分 - 复杂类型,延迟装载和显式装载...
  5. 判断整除(opj)(动态规划)
  6. DateTimeFormatInfo 类
  7. 【es】es 的 cat API是如何加载的
  8. Sql Server之旅——第十二站 sqltext的参数化处理
  9. (完美)华为畅玩7A AUM-AL00的Usb调试模式在哪里打开的步骤
  10. ESP8266-Arduino编程实例-SHT40温湿度传感器驱动
  11. ipad iphone开发_如何通过Chromecast观看iPhone / iPad视频?
  12. php内部网,php – WordPress内部网址重写是如何工作的?
  13. IDEA中修改html页面后在浏览器不生效的解决方法
  14. pycharm终端提示无法加载文件 F:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.ps1,因为在
  15. SSMS证书已被颁发者吊销解决办法
  16. 如何查看IE浏览器版本?在线检测IE版本号
  17. android 仿微信录音,Android 模仿微信长按录音功能
  18. oracle linux 5.8 更新,Oracle Linux迎来UEK R5U5企业内核更新
  19. ZOJ 3587 Marlon's String
  20. DeepMind研究团队使用Sawyer进行连续离散混合学习研究和验证

热门文章

  1. 链表list(链式存储结构实现)_5 线性表的链式存储结构
  2. mysql+dump+选项_mysqldump 备份常用选项以及备份脚本
  3. 简述Linux目录结构和系统结构
  4. java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...
  5. C语言经典小游戏---猜数字游戏 (包含C语言中如何实现随机数的生成)
  6. HDU4587(割点+最大连通分量)
  7. 关于学习Python的一点学习总结(19->if及相关的符号运算)
  8. 关于学习Python之后的一点总结(1->符号优先级->for->range())
  9. html中运行php脚本,php脚本在html文件中
  10. python tqdm 不换行_python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)