,

Podman Compose 或 Docker Compose:在 Podman 中应该使用哪个?

这两个项目都允许您在一台机器上运行多个 Podman 容器。但是它们之间的差异可能使一个比另一个更具吸引力。

虽然 Kubernetes 已经成为容器编排的主导力量,但人们仍然对在更小的范围内管理容器很感兴趣,通常是在单个系统上。对于这些情况,多年来人们选择的工具一直是 Docker Compose。

Podman 项目 中,我们经常被问到有关 Docker Compose 的问题。Podman 是否支持 Docker Compose?Docker Compose v2 呢?什么是 Podman Compose,我应该使用它而不是 Docker Compose 吗?继续阅读以找到这些问题的答案以及 Podman 团队对未来的看法。

Docker Compose 和 Podman Compose 的历史

Docker Compose 于 2014 年开始作为一个项目,旨在基于 YAML 定义管理容器组。这个 YAML 后来被赋予了一个正式的规范,即 Compose 规范。此规范定义了一种结构化语言,使您能够轻松地在单台机器上运行多个容器。

这种单文件定义多个容器的方式是直接从命令行运行这些容器的替代方法。

Docker Compose 是用 Python 编写的,并使用 Docker 守护进程的 REST API 与其通信。当 Podman 于 2018 年发布时,我们完全专注于与 Docker 命令行界面 (CLI) 的兼容性,并且没有包含对 API 的支持。因此,Podman 最初不能与 Docker Compose 一起使用。许多人希望使用 Podman 并保留他们现有的 Compose YAML 文件,因此一个名为 Podman Compose 的社区项目应运而生。Podman Compose 处理 Compose 规范并将其转换为 Podman CLI 命令。

但是,Podman Compose 并不完美,因为它实现了 Docker Compose 功能的一个子集。许多用户希望继续使用 Docker Compose 和其他直接连接到 Docker API 的工具。为了满足我们的社区和客户的需求,Podman 在 2019 年添加了一个与 Docker 兼容的 API,但支持 Docker Compose 需要额外的工作,这在 2020 年完成。

Docker Compose 项目也没有闲着。2021 年,Docker Compose 项目发布了该工具的完全用 Go 重写的版本,名为 Docker Compose v2.0(较旧的 v1.x 版本通常称为 docker-compose,而 v2.x 版本称为 docker compose)。重写需要额外的努力才能与 Podman 一起使用,并在 2022 年的 Podman v4.1 中实现(尽管对 Buildkit API 的支持仍在等待中)。

您应该使用哪个?

这仍然没有回答大多数人的问题:我应该使用 Podman Compose 还是 Docker Compose?这两个项目都不属于 Podman(Podman Compose 是一个社区项目,不是由 Podman 团队直接维护)。它们都支持与 Podman 一起使用,Podman 团队将修复 Podman 中任何阻止其使用的错误(尽管工具本身的错误需要在该处修复)。

Podman Compose 与 Podman 的集成度更高(因为它从一开始就设计为与 Podman 一起使用),并且更好地利用了 无根容器 和 Pod。但是,Docker Compose 是功能更强大的选项,它是 Compose 的参考实现。因此,您应该使用哪个的答案是“取决于”。

Podman Compose 是更原生且更轻量级的解决方案。Podman Compose 直接执行 Podman 命令,而不是与 Podman 的 API 套接字通信。这消除了运行 Podman 服务来提供 API 的必要性,从而节省了资源。因为它使用 Podman 的常规命令行和 fork-exec 模型,所以在系统上更容易跟踪和管理。例如,Podman Compose 可以轻松地由 systemd 单元文件管理。

Docker Compose 具有更多功能。它与 Docker 和 Podman 兼容,因此更通用。此外,它比 Podman Compose 拥有更多用户,测试更广泛,并且可能更稳定。

鉴于使用两者都有正当理由,Podman 致力于支持 Docker Compose 和 Podman Compose,包括 Docker Compose 的两个主要版本。

Podman 和 Compose 的未来

Podman 团队不关注 Compose YAML。相反,我们正在努力开发 podman generate kubepodman play kube,它们允许 Kubernetes YAML 以类似于 Compose 的方式直接与 Podman 一起使用。使用这些工具,我们拥有与更广泛的 Kubernetes 生态系统的集成优势。例如,通过 podman play kube 在 Podman 上运行的容器可以轻松地迁移到 OpenShift(Kubernetes)集群,或者开发人员可以在他们的笔记本电脑上运行在 Kubernetes 中出现故障的 Pod,以使用 podman play kube 调试问题。

我们认为 Podman 和 Kubernetes 之间的这种集成是一种强大的组合,这也是我们关注的重点。同时,我们认识到大多数人现在都在使用 Compose,并且在未来几年内将继续使用 Compose。但是,我们希望用户选择转换为 podman play kube,也许可以使用诸如 从 Docker Compose 到 Kubernetes with Podman 之类的指南。在可预见的未来,我们将继续在 Podman 中支持 Docker Compose 和 Podman Compose。

主要图片来源:DutchAir 来自 Pixabay

发表评论

订阅

使用您的电子邮件地址注册,以接收来自本网站的电子邮件更新。


类别


搜索