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 を高速化します。