文章摘要
文章介绍了作者在工作中使用Podman替代Docker Compose的经验。由于Docker与nftables兼容性差,且作者偏好无根和无守护进程的方式,因此选择了Podman。Podman支持Docker Compose项目,但使用官方Docker Compose CLI时会缺少BuildKit功能,而使用podman-compose替代方案则存在其他限制。
文章总结
使用Podman、Compose和BuildKit的实践
在2025年8月17日,作者emersion分享了一篇关于如何在使用Podman的同时,结合Docker Compose和BuildKit进行项目构建的博客。作者在日常工作中需要构建和运行一个Docker Compose项目,但由于Docker与nftables的兼容性问题,以及作者更倾向于无根和无守护进程的方式,因此选择了Podman。
Podman支持Docker Compose项目,提供了两种解决方案:一是通过将官方的Docker Compose CLI连接到Podman的socket,二是使用Podman自带的替代工具podman-compose。然而,这两种方案都有各自的缺点。使用官方的Docker Compose CLI时,无法使用BuildKit构建器,导致一些功能如附加上下文不被支持。而使用podman-compose时,则缺少如!reset、configs等特性。
为了解决这些问题,作者尝试让Docker Compose CLI在Podman下启用BuildKit。通过启用Podman socket并创建新的Docker上下文,作者成功实现了这一目标。此外,作者还尝试手动运行BuildKit守护进程,以减少对自动创建容器的依赖。
为了进一步优化,作者探索了将Compose项目转换为Bake JSON描述文件的方法,并开发了一个名为Bakah的小工具,用于将Bake文件转换为Podman的构建命令。Bakah使用Buildah库进行镜像构建,虽然目前还缺少一些高级功能,但已足够用于构建复杂的Compose项目。
作者计划在未来将Bakah用于soju-containers项目,以更好地分割Dockerfiles并简化CI脚本。希望这一工具也能对其他开发者有所帮助。
评论总结
评论内容总结:
Podman与Docker的比较
- 有用户提到Podman的kube支持可以替代docker-compose,并且与systemd集成良好,适合不想使用Kubernetes的用户。
引用:
"with podman you can instead use the podman kube support, which provides roughly docker-compose equivalent features"
"podman has nice systemd integration for such kube services" - 也有用户对Podman的buildkit支持表示不满,转而使用Docker Desktop。
引用:
"I encountered this exact issue (no buildkit with Podman) months ago. I gave up and used Docker desktop"
- 有用户提到Podman的kube支持可以替代docker-compose,并且与systemd集成良好,适合不想使用Kubernetes的用户。
Docker的rootless模式
- 有用户询问Docker的rootless模式是否有效,但未得到详细回复。
引用:
"But Docker can run rootless these days, right? Can anyone chime in with how well does this work?"
- 有用户询问Docker的rootless模式是否有效,但未得到详细回复。
其他替代工具
- 有用户推荐使用Colima和OrbStack作为Docker的替代品,认为它们简单易用且稳定。
引用:
"I currently use Colima and I'm very satisfied with it"
"I replaced my Docker usage entirely with OrbStack a few months ago, and have had zero issues with it so far"
- 有用户推荐使用Colima和OrbStack作为Docker的替代品,认为它们简单易用且稳定。
Docker的复杂性
- 有用户批评Docker在多架构镜像构建方面的复杂性,认为其学习曲线陡峭。
引用:
"it's quite a big mess, which leads to a steep learning curve for someone who just wants to build some images"
"Want to build an image on two native architectures (ARM64 and AMD64) and then make a multi-arch image out of them. Might blow someones mind on how complicated that is"
- 有用户批评Docker在多架构镜像构建方面的复杂性,认为其学习曲线陡峭。
总结:评论中既有对Podman和Docker的优缺点讨论,也有对其他替代工具的推荐。用户对工具的选择主要取决于具体需求和使用场景。