【ビルドキット】

BuildKit とは?

💡 Dockerfileをターボチャージャー付きで走らせるビルドエンジン
📌 このページのポイント
BuildKit:並列ビルドとキャッシュ最適化 Docker file BuildKit STEP A STEP B STEP C (並列実行) キャッシュ再利用 コンテナ イメージ 並列ビルド / キャッシュ最適化 / マルチプラットフォーム / シークレット安全渡し Docker 23.0以降デフォルト有効
BuildKitの並列ビルドとキャッシュ最適化のイメージ
ひよこ ひよこ

BuildKitって普通のDockerのビルドと何が違うの?

ペンギン先生 ペンギン先生

従来のDockerビルドはDockerfileの命令を上から順番に1行ずつ実行していたんだけど、BuildKitは依存関係を分析して、関係のないステップを並列で走らせられるんだよ。だから全体のビルド時間がグッと短くなるんだ。

ひよこ ひよこ

キャッシュも賢くなってるって聞いたんだけど?

ペンギン先生 ペンギン先生

そうだよ!BuildKitはどのファイルが変わったかを細かく追跡していてね、変化のないレイヤーは前回のキャッシュをそのまま使い回すんだ。マルチステージビルドの未使用ステージはスキップもしてくれるよ。

ひよこ ひよこ

マルチプラットフォームビルドってどういうこと?

ペンギン先生 ペンギン先生

MacのM1チップ(ARM)で作ったイメージをLinuxサーバーx86)でも動かしたい場合があるよね。BuildKitを使うと `--platform` オプションひとつでARM用とx86用のイメージを同時に作れるんだ。

ひよこ ひよこ

シークレットを安全に渡せるって聞いたけど、それも?

ペンギン先生 ペンギン先生

そうだよ。従来は `ENV` でパスワードを渡すとイメージ層にそのまま残ってしまっていたんだ。BuildKitの `--secret` 機能を使えば、ビルド中だけシークレットを参照できてイメージには残らないから、セキュリティが大幅に向上するよ。

ひよこ ひよこ

どうやって使えばいいの?

ペンギン先生 ペンギン先生

Docker 23.0以降はデフォルトで有効になっているよ。古いバージョンなら `DOCKER_BUILDKIT=1 docker build .` か、`docker buildx build .` コマンドで使えるんだ。`docker buildx` はBuildKitを前提にした拡張コマンドで、クロスプラットフォームビルドもここから操作するよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「BuildKit」って出てきたら「Dockerのビルドを速く・安全にする次世代エンジン」と思えればだいたいOK!
📖 おまけ:英語の意味
「BuildKit」 = ビルドキット(ビルド用ツールキット)
💬 Moby ProjectによってDockerのビルドバックエンドとして開発され、Docker 23.0以降はデフォルトで有効になっているよ。旧来の `docker build` に代わる新世代の仕組みだよ。
← 用語集にもどる