Podman vs Buildah: CIでイメージをビルドするならどちらか?
Podmanはイメージもビルドする完全なコンテナエンジン。Buildahは各layerをより細かく制御できる、特化してスクリプト可能なイメージビルダーである。
Podmanは、Dockerに似たCLIでコンテナを実行、管理、ビルドする。BuildahはOCIイメージのビルドに特化する - Dockerfileをサポートするが、daemonなしでイメージを作るためのスクリプト可能でステップバイステップのAPIも公開する。実はPodmanはビルドに内部でBuildahを使う。
| Podman | Buildah | |
|---|---|---|
| スコープ | 実行 + 管理 + ビルド | イメージのビルドのみ |
| Dockerfileサポート | あり | あり |
| スクリプトによるlayer制御 | 限定的 | きめ細かい (buildahコマンド) |
| daemonなし | あり | あり |
| 最適な用途 | 一般的なコンテナworkflow | カスタムなイメージビルドロジック |
CIにおいて
Dockerfileからビルドし、かつコンテナも実行したいだけなら、Podmanがすべてを網羅する。Buildahは、イメージ構築のスクリプト可能できめ細かな制御が欲しいときに輝く - Dockerfileを書かずに、シェルスクリプトからlayerをマウント、commit、構成する。多くのパイプラインはworkflowにPodman、高度なカスタムビルドにのみBuildahを使う。
高速化する
どちらを選ぶかにかかわらず、ビルド間でbase layerをcacheして再利用する。両者はCI runnerで同じように動く。高速なマネージドrunnerがイメージのビルド時間を短縮する。
結論
コンテナの実行とビルドに1つのツールが欲しい: Podman。Dockerfileを超えたきめ細かくスクリプト可能なイメージ構築が欲しい: Buildah。両者は互いを補完する - PodmanはBuildah経由でビルドする。