Skip to content
Latchkey

Docker vs Podman: CIでのイメージbuildに適しているのはどちら?

PodmanはDockerに対するdaemonlessでrootlessフレンドリーな代替で、互換のあるCLIを持つ - ただしCIのツール群が前提とするのはDocker。

Dockerは中央のdaemonを使ってcontainerをbuildおよび実行します。Podmanはdaemonlessで、デフォルトでrootless実行し、DockerのCLIをミラーするため、多くのコマンドが互換です。

DockerPodman
アーキテクチャDaemon (dockerd)Daemonless
Rootlessサポートデフォルト
CLI互換性n/aDocker互換(alias)
Composeネイティブ (docker compose)podman-compose / Quadlet
CIエコシステムのサポート普遍的良好、デフォルトのツールは少ない

CIでは

Podmanのdaemonlessでrootlessなモデルは、セキュリティの観点や、特権的なdaemonが扱いにくいrunnerにとって魅力的です。Docker互換のCLIにより、多くのパイプラインは最小限の変更で動作します(多くの場合はalias docker=podmanだけ)。Dockerは、ほぼすべてのCIのaction、registry、build toolが前提とするデフォルトであり続けており、最もスムーズなout-of-the-box体験を提供します。

パイプラインでの選び方

rootless/daemonlessのセキュリティやライセンスが要因となり、build手順がCLI互換な場合はPodmanを使いましょう。最も幅広いツールサポートと最小の摩擦のためにはDockerにとどまりましょう。特にイメージのbuildについては、どちらのengineでもBuildKit/Buildahも検討しましょう。

結論

rootless/daemonlessなbuildとCLIの一致が欲しい: Podman。最も普遍的にサポートされたデフォルトが欲しい: Docker。ほとんどのパイプラインは小さな調整でどちらでも動きます。

関連ガイド