Hacker News 中文摘要

RSS订阅

使用Podman、Compose和BuildKit -- Using Podman, Compose and BuildKit

文章摘要

文章介绍了作者在工作中使用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时,则缺少如!resetconfigs等特性。

为了解决这些问题,作者尝试让Docker Compose CLI在Podman下启用BuildKit。通过启用Podman socket并创建新的Docker上下文,作者成功实现了这一目标。此外,作者还尝试手动运行BuildKit守护进程,以减少对自动创建容器的依赖。

为了进一步优化,作者探索了将Compose项目转换为Bake JSON描述文件的方法,并开发了一个名为Bakah的小工具,用于将Bake文件转换为Podman的构建命令。Bakah使用Buildah库进行镜像构建,虽然目前还缺少一些高级功能,但已足够用于构建复杂的Compose项目。

作者计划在未来将Bakah用于soju-containers项目,以更好地分割Dockerfiles并简化CI脚本。希望这一工具也能对其他开发者有所帮助。

评论总结

评论内容总结:

  1. 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"
  2. Docker的rootless模式

    • 有用户询问Docker的rootless模式是否有效,但未得到详细回复。
      引用
      "But Docker can run rootless these days, right? Can anyone chime in with how well does this work?"
  3. 其他替代工具

    • 有用户推荐使用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"
  4. 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"

总结:评论中既有对Podman和Docker的优缺点讨论,也有对其他替代工具的推荐。用户对工具的选择主要取决于具体需求和使用场景。