Skip to content
Latchkey

BuildKit とは?Docker のモダンな build エンジン

BuildKit は docker build の背後にあるモダンなエンジンです - 独立した stage を並列化し、よりスマートにキャッシュし、第一級の build secret と mount を追加します。

元々の Docker builder は命令を厳密に順番どおりに実行し、キャッシュも限定的でした。BuildKit は build を依存関係グラフとして捉え直すため、独立した作業が並列に実行され、必要なものだけが計算されます。モダンな Docker のデフォルトであり、docker buildx を支えています。

スクリプトではなく build グラフ

BuildKit は Dockerfile を操作のグラフに解析し、依存関係を解決します。マルチステージ build の独立した stage は並行して実行され、出力が不要なステップは完全にスキップされます。

よりスマートでエクスポート可能なキャッシュ

BuildKit はキャッシュを registry にインポート・エクスポートできるため、エフェメラルな CI runner はそれぞれが冷たく始まるのではなく build キャッシュを共有します。これが CI で高速なコンテナ build を実現する鍵です。

build secret と mount

  • RUN --mount=type=secret は secret を layer に焼き込むことなく build 時に注入します。
  • RUN --mount=type=cache はパッケージマネージャのキャッシュを build 間で永続化します。
  • --mount=type=bind はファイルを layer にコピーせずに読み取ります。

有効にする

BuildKit は現在の Docker のデフォルトです。古い構成では DOCKER_BUILDKIT=1 docker build . で有効になります。docker buildx build は常に BuildKit を使い、マルチプラットフォームサポートを追加します。

CI における BuildKit

エフェメラルな build を高速にするため、BuildKit を registry ベースのキャッシュと組み合わせましょう。マネージド runner はさらに進んで、job 間で BuildKit キャッシュを温かく保つため、依存関係の layer が外部への往復なしに再利用されます。

重要なポイント

  • BuildKit は build をグラフとして扱い、並列化とスキップを可能にします。
  • エクスポート可能なキャッシュにより、エフェメラルな CI runner が冷たい build を回避できます。
  • build secret と cache mount は secret を layer の外に保ち、install を高速化します。

関連ガイド