Skip to content
Latchkey

docker build vs BuildKit: CIでのより高速なイメージビルド

BuildKitはDocker向けの現代的なビルドbackendだ - stageを並列化し、cache mountとbuild secretをサポートし、今やデフォルトである。

レガシーなdocker buildは、粗いlayer cacheでDockerfileを逐次実行する。BuildKit (docker buildx経由で公開され、今やデフォルトのbuilder) は独立したstageを並列化し、cache mount、build secret、より豊富なcacheのexport/importを追加する - 同じDockerfileで大きなCIの高速化だ。

docker build (レガシー)BuildKit
stageの並列化逐次並列
cache mountなしあり (--mount=type=cache)
build secret回避策ネイティブ (--secret)
cacheのexport/import限定的豊富 (registry、gha、ローカル)
ステータスレガシーデフォルトのbuilder

CIにおいて

BuildKitは現代的なパイプラインでの明確な選択だ: 並列のstageが実時間を削減し、cache mountがパッケージのダウンロードをビルド間で温かく保ち、ghaまたはregistryのcache backendが1つのjobに別のjobのlayerを再利用させる。レガシーなdocker buildは古い構成のために依然存在するが、速度を取りこぼす。BuildKitを有効化する (最近のDockerではデフォルトでオン) か、docker buildxを使う。

高速化する

BuildKitのcacheをregistryまたはGitHub Actionsのcacheにexportし、次の実行で温かいlayerのためにimportする。ビルドは依然としてCI runnerで動く。高速なマネージドrunnerが実際のlayerのビルドを短縮する。

結論

BuildKit (buildx) を使う - それがデフォルトで、並列にビルドし、cache mountとsecretを追加する。非常に古い凍結された環境を除いて、レガシーなdocker buildに留まる理由はほとんどない。

関連ガイド