Buildah対docker build:CIでイメージをビルドする
BuildahはデーモンなしでOCIイメージをビルドし、rootlessワークフローをサポートします。docker buildはBuildKit経由の普遍的なデフォルトです。
docker build(BuildKitに支えられています)はDockerfileからイメージをビルドする標準的な方法で、高度なキャッシングと幅広いツールサポートを備えます。BuildahはOCI/Dockerイメージをデーモンレスでビルドし、rootlessビルドをサポートし、Dockerfileからビルドでき、さらにスクリプト可能な段階的なイメージ構築も公開します。
| Buildah | docker build | |
|---|---|---|
| デーモンの要否 | 不要 | 必要(またはbuildkitd) |
| Rootless | 強力 | サポート |
| Dockerfileサポート | あり(buildah bud) | あり(ネイティブ) |
| スクリプトによるビルド | あり(Dockerfile不要) | Dockerfile駆動 |
| CIエコシステムのサポート | 良好、デフォルトではない | 普遍的 |
CIにおいて
Buildahは、デーモンレスでrootlessのイメージビルドを望むときに魅力的です - 制限されたrunnerや、dockerdの実行が望ましくない場面で有用です。Dockerfileからビルドでき(buildah bud)、Dockerfileなしでスクリプトによるイメージ構築もできます。BuildKitを伴うdocker buildは普遍的なデフォルトで、最も滑らかなツールと最も文書化されたキャッシングパターンを備えます。rootless/デーモンレスのセキュリティにはBuildah(多くの場合Podmanと共に)が自然な選択であり、摩擦が最も少ないのはdocker buildです。
pipelineのための選択
rootless/デーモンレスのビルド、またはスクリプトによるイメージ構築を望むなら:Buildah。最も普遍的にサポートされ、よく文書化されたビルダーを望むなら:docker build(BuildKit)。どちらでもレイヤーcacheをregistryにプッシュすると、繰り返しのビルドが速くなります。
結論
rootless/デーモンレス、あるいはスクリプト駆動のイメージビルド:Buildah。普遍的なツールと最も滑らかなデフォルト:BuildKitを伴うdocker build。どちらでもレイヤーをregistryにcacheして再ビルドを避けましょう。