Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是 Podman?替代 Docker的容器引擎

什么是 Podman?替代 Docker的容器引擎

原创
作者头像
低代码布道者
发布于 2022-07-28 01:53:07
发布于 2022-07-28 01:53:07
14.2K0
举报
文章被收录于专栏:架构师聊技术架构师聊技术

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

Podman 是 Red Hat 的一个开源项目,可以免费下载。它是容器化领域的一个相对较新的人,1.0 版将于 2019 年发布。此后 Podman 取得了长足的进步,其崛起伴随着 Docker 的逐渐衰落,该项目在许多方面创造了我们今天所知的容器世界。

目录

  • Podman 和 Kubernetes
  • Podman 与 Docker
  • Podman 会取代 Docker 吗?
  • 您应该使用哪个容器引擎?

Podman 和 Kubernetes

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

[也在 InfoWorld 上:什么是 Kubernetes?您的下一个应用平台]

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 没有原生的 Pod 概念。另一个重要的区别是 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 缺少.,尽管这是 Podman 1.0 之前的旧版本。虽然关于这个主题的技术信息并不多,但有趣的是 Podman 因其性能而受到抨击。

Podman 会取代 Docker 吗?

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

Kubernetes 和 Docker 多年来一直是容器世界的双胞胎巨头。但他们的共处总是有些不安。Kubernetes 的兴起是在 Docker 在其利基市场中建立起来之后——事实上,你可以说 Kubernetes 变得流行的部分原因是 Docker 无法胜任管理需要在大型分布式应用程序中协调的所有容器的任务.

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

Docker 如何一分为二

此外,就容器运行时而言,Docker 与 Kubernetes 的关系并不好,这是容器引擎的低级组件,除其他任务外,它与底层操作系统 (OS) 内核一起工作并挂载单个容器映像。Docker 和 Kubernetes 都符合 OCI 镜像规范,Kubernetes 使用该规范来协调构建到容器的镜像。但 Kubernetes 还依赖于与称为容器运行时接口(CRI)的标准化插件 API 兼容的容器运行时,而 Docker 从未着手实施。

长期以来,Docker 的流行迫使 Kubernetes 使用Dockershim,这是一个符合 CRI 的层,是 Kubernetes 和 Docker 守护程序之间的中介。然而,这总是一种 hack,今年早些时候,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 与 Docker”的问题在某种程度上是一个错误的选择。两个平台都创建符合 OCI 规范的图像,并且都由许多相同的命令驱动,因此您可以在两者之间无缝移动。例如,您可能想使用 Docker 进行本地开发,然后使用 Podman部署您在 Kubernetes 中构建的容器。

使 Docker 与众不同的一个特点是它提供了付费支持。但即使这样也有不利的一面:随着 Docker(该公司)试图将其旗舰产品货币化,它已经开始对 Docker 桌面开发环境收费。另一方面,红帽目前似乎满足于暂时让 Podman 免费。

选择合适的比选择最流行技术架构的更重要

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
容器引擎Docker与Podman解析
最近技术群里有朋友问我,不是说K8S要弃用Docker了吗?还要不要继续学习这块内容?是不是得改行卖白菜了?
Luga Lee
2021/12/09
1.2K0
容器引擎Docker与Podman解析
Docker,containerd,CRI,CRI-O,OCI,runc 分不清?看这一篇就够了
自 Docker 开启了使用容器的爆发式增长,有越来越多的工具和标准来帮助管理和使用这项容器化技术,与此同时也造成了有很多术语让人感到困惑。
Peter Shen
2022/04/26
5.4K0
Docker,containerd,CRI,CRI-O,OCI,runc 分不清?看这一篇就够了
是时候跟Docker说再见了
在容器的远古时代(差不多就是 4 年前),Docker 是这场游戏的唯一玩家。但现在情况已经不一样了,Docker 不再是唯一玩家,而只是一个容器引擎而已。我们可以用 Docker 构建、运行、拉取、推送或检查容器镜像,但对于这里的每一项任务,都有其他可替代的工具,它们可能比 Docker 做得更好。所以,让我们来探究一下它们,然后卸载和忘掉 Docker……
TASKCTL 任务调度平台
2021/01/13
1.1K0
是时候跟Docker说再见了
docker containerd podman 对比
Docker、containerd和Podman是三种流行的容器技术,允许开发人员和系统管理员创建、运行和管理容器化应用程序。虽然这些技术之间有一些相似之处,但它们之间存在显着的差异。在本文中,我们将比较Docker、containerd和Podman。
堕落飞鸟
2023/03/26
3.6K0
K8s宣布弃用Docker,千万别慌!
近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时。
SDNLAB
2020/12/09
15.1K0
K8s宣布弃用Docker,千万别慌!
下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!!
云爬虫技术研究笔记
2019/11/05
4630
下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
再见 Docker,是时候拥抱下一代容器工具了
Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让你在不同环境(如开发、测试和生产等环境)之间轻松迁移应用的同时,还可保留应用的全部功能。
iMike
2019/09/25
1.6K0
再见 Docker,是时候拥抱下一代容器工具了
2022 年要考虑的 7 种 Docker 替代方案
许多企业都采用容器来进行开发和管理稳定的应用程序,Docker 是该领域功能最丰富且使用最广泛的工具之一,已有数百万应用程序在使用它。Docker 本身有着强大的独立生态系统,并提供了一个广泛的工具包来管理容器化过程,但 Docker 还有其他替代品,它们提供了独特的用例和功能。本文深入探讨了 Docker 七个替代品,其中包括一系列综合平台,如 Docker 以及可以作为 Docker 生态系统组件替代品的工具等。
深度学习与Python
2022/03/23
1.4K0
2022 年要考虑的 7 种 Docker 替代方案
docker概念很乱?俺来替你理一下!
docker是什么?OCI又是什么?CRI又是什么?containerd又TM是什么?有没有感觉概念非常的乱?
xjjdog
2021/08/25
5850
K8s根本甩不掉Docker,原因一说就懂
题图摄于北京前门 注:微信公众号不按照时间排序,请关注“亨利笔记”,并加星标以置顶,以免错过更新。 2020云原生生态大会,大咖云集,立刻报名! 上个月 Kubernetes 1.20 beta 版的发布记录(release note)里面声明了 kubelet 的 dockershim 模块已经过时了(deprecated),最快将在 1.23 版本中移除,即大约是一年之后。 这本来是个很普通的消息,没想到上周突然冒出了一批抢眼球的文章,说什么 Kubernetes 终于“甩掉”了 Docker ,一时
Henry Zhang
2023/04/18
4320
K8s根本甩不掉Docker,原因一说就懂
一文带你了解Docker与Containerd的区别
容器运行时(Container Runtime)是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一,用于在容器内部运行应用程序,并提供隔离、资源管理和安全等功能。 在Kubernetes中,容器运行时是负责管理和运行容器的组件。在过去,Docker是最常用的容器运行时,但随着时间的推移,containerd成为Kubernetes的另一个受欢迎的容器运行时选择。
用户1107783
2023/09/11
12.3K0
一文带你了解Docker与Containerd的区别
Kubernetes弃用Dockershim,转向Containerd:影响及如何应对
Kubernetes1.24版本发布时,正式宣布弃用Dockershim,转向Containerd作为默认的容器运行环境。Kubernetes以CRI(Container Runtime Interface)容器运行时接口制定接入准则,用户可以使用Containerd、CRI-O、CRI- Dockerd及其他容器运行时作为Kubernetes的容器引擎。
灵雀云
2023/12/26
5100
Kubernetes弃用Dockershim,转向Containerd:影响及如何应对
Docker不再是唯一的选择
在容器的早期时代(其实更像是4年前),Docker是容器游戏中唯一的玩家。但现在情况已经不一样了,Docker不再是唯一的一个,而只是其中一个容器引擎而已。Docker允许我们构建、运行、拉、推或检查容器镜像,然而对于每一项任务,都有其他的替代工具,甚至可能比Docker做得还要好。所以,让我们探索一下,然后再卸载(只是可能),直至完全忘记Docker……
用户6543014
2020/12/08
1.1K0
Docker不再是唯一的选择
Kubernetes决定弃用Docker,到底会影响到谁?
近几年,Kubernetes 已经成为自有机房、云上广泛使用的容器编排方案,最广泛的使用方式是 Kubernetes+Docker。从 DevOps 人员的角度,一面用 kubctl 命令、k8s API 来操作集群,一面在单机用 Docker 命令来管理镜像、运行镜像。
xcbeyond
2020/12/14
6400
Kubernetes决定弃用Docker,到底会影响到谁?
K8S Runtime 种类多,使用复杂?那是你没明白其中的门道
近年来,Runtime(容器运行时)发展迅速,种类也日渐丰富:Docker、rkt、containerd、cri-o、Kata、gVisor……面对这么多的选择,如果你正打算部署一个容器系统或 Kubernetes 集群,你会如何选择呢?在这篇文章中,来自 PingCAP 的工程师吴叶磊将从典型的 Runtime 架构、OCI、CRI 与被滥用的名词“Runtime”等方向,生动阐述什么是 Runtime 以及它们的关系和特点。
马哥linux运维
2019/05/15
3K0
K8S Runtime 种类多,使用复杂?那是你没明白其中的门道
Podman是什么?它与Docker有什么不同?
Podman是一种开源的Linux原生工具,旨在根据OCI标准开发,、管理和运行容器和Pod。Podman是RedHat开发的一个用户友好的容器调度器,是RHEL 8和Centos 8系统中默认的容器引擎。
用户5921339
2025/05/20
2000
Podman是什么?它与Docker有什么不同?
容器的崛起——Docker与K8s的相爱相杀
对于K8s启用docker,作为普通开发者的体感是,k8s不就是docker的集群操作吗?k8s弃用docker就像鱼反对水一样不可思议,那么这两个技术究竟是什么关系,Kubernetes 是如何一步步与 Docker 解耦的,请看下文。
燃192
2023/04/11
5890
容器的崛起——Docker与K8s的相爱相杀
Docker 的第二次死亡
我清楚地看到了 Go 和 Docker 这两种技术的生态圈发展过程。让我收获最大的并不是这些技术本身,而是技术的变迁和行业的发展。从中,我看到了非常具体的各种思潮和思路,这些更有价值...... 这些关键新技术,可以让你拿到技术的先机。这些对一个需要技术领导力的个人或公司来说都是非常重要的。
崔庆才
2020/12/31
1.1K0
Docker 的第二次死亡
干货|浅析 k8s 容器运行时演进
在docker/k8s时代,经常听到CRI, OCI,containerd和各种shim等名词,看完本篇博文,您会有个彻底的理解。
CloudBest
2021/03/12
1.2K0
干货|浅析 k8s 容器运行时演进
Crictl VS Podman
Kubernetes已经使用CRI-O作为容器运行时。自然的它也推出了相应的命令行工具Crictl来调试CRI-O,管理Images, ps等。
Markgogogo
2022/06/13
1.1K0
Crictl VS Podman
相关推荐
容器引擎Docker与Podman解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档