docker buildx とは?マルチプラットフォーム build を手軽に
docker buildx は BuildKit の力を引き出す拡張された build コマンドです - 最も顕著なのは、複数の CPU アーキテクチャ向けのイメージを一度に build することです。
buildx は BuildKit を駆動する Docker CLI プラグインです。目玉となる機能はマルチプラットフォーム build で、amd64 と arm64 の両方で動作する単一のイメージ参照を生成します。また、builder インスタンスの管理や、従来の build コマンドより豊富なキャッシュと output のオプションも提供します。
builder と build driver
buildx は「builder」を通じて動作します。これはローカル、コンテナ内、またはリモートで実行できる BuildKit インスタンスです。docker buildx create --use は、マルチプラットフォーム output が可能な builder をセットアップします。
マルチプラットフォーム build
--platform linux/amd64,linux/arm64 を渡すと、buildx は各アーキテクチャ向けに build し、manifest list を組み立てるため、1 つのタグが両方に対応します。クロスアーキテクチャの build はエミュレーションまたはネイティブノードを使います。
典型的なコマンド
docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/acme/web:1.4 --push . は両方のアーキテクチャを build し、マルチアーキイメージを一度に push します。
今これが重要な理由
- arm64 サーバーと Apple Silicon の開発者が主流になっている。
- どこでも動く 1 つのタグが deploy を簡素化する。
- エミュレートされた build は遅くなり得るため、ネイティブな arm runner が役立つ。
CI における buildx
マルチアーキ build は、特にエミュレーション下では single-arch のものより重くなります。各アーキテクチャをネイティブ runner で build する方がはるかに高速です - Latchkey はネイティブな arm と x86 の runner を提供するため、buildx は遅いエミュレーションなしにマルチアーキイメージを生成します。
重要なポイント
- buildx は高度でマルチプラットフォームな build のための BuildKit ベースの CLI です。
- 1 回の
--platformbuild で、単一のタグの下にマルチアーキイメージを生成できます。 - クロスアーキテクチャの build 速度では、ネイティブ runner がエミュレーションを上回ります。