2 min read

Podman赋能:无根无守护进程下的Compose与BuildKit构建新范式

本文聚焦于在Linux环境下,利用Podman、Compose及BuildKit实现无根(rootless)且无守护进程(daemonless)的容器构建与管理。作者分享了其在工作流程中,为规避Docker与nftables的兼容性问题以及偏好更轻量级方案,而转向Podman的实践历程。

文章首先阐述了Podman对Docker Compose项目的支持方式,包括通过连接官方Docker Compose CLI到Podman Socket,或使用Podman的替代方案podman-compose。作者指出了这两种方式的局限性:前者无法使用BuildKit,后者则遗漏了部分Compose特性。为解决此问题,作者探索并成功实现了让Docker Compose CLI直接连接Podman Socket并启用BuildKit,通过创建新的Docker上下文(context)实现。这一配置利用了Podman的内置机制,自动创建BuildKit实例。

为进一步追求无守护进程的理念,作者介绍了使用Buildah和Bakah工具链。Buildah作为Podman底层构建引擎,可与BuildKit服务集成。而Bakah则是一个将Docker Compose的Bake文件(JSON描述)转换为Buildah可执行命令的工具,旨在完全摆脱后台运行的BuildKit守护进程,实现真正的无守护进程构建。此方法通过`docker buildx bake --print`生成Bake文件,再由Bakah处理,最终实现独立构建,符合作者对轻量化、无根化和无守护进程的追求。

此实践不仅解决了特定技术栈的兼容性挑战,更提供了一种更纯粹、更符合现代容器化理念的构建流程,预示着在不依赖Docker原生守护进程的情况下,也能高效利用Compose生态及BuildKit的先进构建能力。

Using Podman, Compose and BuildKit · emersion
订阅情报