这两个项目都允许您在单台机器上运行多个 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 编写,并使用其 REST API 与 Docker 守护程序通信。当 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 kube
和 podman play kube
,它们允许 Kubernetes YAML 以类似于 Compose 的方式直接与 Podman 一起使用。通过这些工具,我们具有与更广泛的 Kubernetes 生态系统集成的优势。例如,通过 podman play kube
在 Podman 上运行的容器可以轻松地迁移到 OpenShift (Kubernetes) 集群,或者开发人员可以在其笔记本电脑上运行 Kubernetes 中行为异常的 pod,使用 podman play kube
调试问题。
我们认为 Podman 和 Kubernetes 之间的这种集成是一个强大的组合,这也是我们正在努力的重点。同时,我们认识到大多数人现在正在使用 Compose,并将继续使用多年。但是,我们希望用户会选择转换为 podman play kube
,也许可以参考诸如 从 Docker Compose 到 Podman 与 Kubernetes 等指南。在可预见的未来,我们将继续支持 Podman 的 Docker Compose 和 Podman Compose。
发表评论