BuildKit
別名: DOCKER_BUILDKIT / ビルドキット / buildkitd
Docker の現行ビルドエンジン。
命令の依存関係をグラフとして解析して並列実行し、レイヤーキャッシュやビルドシークレットを従来のビルダーより細かく扱える。
公開:
定義
BuildKit は Docker のイメージビルドを担う現行のビルドエンジンです。
Dockerfile を上から順に実行するのではなく、命令の依存関係を解析してグラフに落とし、互いに依存しない部分を並列に処理します。
Docker Engine v23.0 以降では既定のビルダーとして使われます。
詳細
BuildKit は結果に影響しないステージを飛ばすため、ビルドログに出る順序が Dockerfile の記述順と一致しません。
キャッシュの単位も細かく、COPY の対象ファイルの内容が変わったかどうかでレイヤーの再利用を判断します。
ビルドシークレットや SSH エージェントの転送といった、イメージに残さず一時的に値を渡す仕組みも BuildKit 側の機能です。
DOCKER_BUILDKIT=1 docker build . # 旧ビルダーが既定の環境で明示的に有効化する
docker buildx build --progress=plain . # 出力を折りたたまずに全ログを見る.dockerignore の解釈も BuildKit が行うため、除外が効かないときは Dockerfile ではなくビルドコンテキストの送り方を疑います。
よくある誤解
DOCKER_BUILDKIT=1を毎回付ける必要がある: 現行の Docker Engine では既定で有効です。
付けるのは旧ビルダーが既定の古い環境だけです。- キャッシュはタイムスタンプで判定される:
COPYは内容のハッシュを見ます。
日付だけが変わったファイルではキャッシュは壊れません。
関連
ビルドに送られるファイル群は build context と呼びます。
キャッシュが効きすぎる症状は ビルドキャッシュが無効化されない、除外が効かない症状は .dockerignore が効かない を参照してください。