はじめに
この実験では、docker buildx createコマンドを使用して Docker ビルダーを効果的に管理する方法を学びます。新しいビルダーインスタンスの作成、既存のビルダーへのノード追加、ビルダーやノードへのカスタム名指定、ビルドノードでサポートされるプラットフォームの設定、新しく作成したビルダーへの自動切り替えといった重要な手順を網羅します。この実験を終える頃には、マルチアーキテクチャや分散ビルドのための様々なビルダー設定を構成し活用する方法について、確固たる理解を得られるでしょう。
新しいビルダーインスタンスを作成
このステップでは、docker buildx createコマンドを使用して新しいビルダーインスタンスを作成する方法を学びます。ビルダーインスタンスは、複数のビルドノードを管理する Docker オブジェクトです。各ノードは、異なるアーキテクチャや環境を表すことができます。
新しいビルダーを作成する前に、システム上に存在する既存のビルダーを確認しましょう。docker buildx lsコマンドを使用して確認できます。
docker buildx ls
通常はdefaultという名前のデフォルトビルダーインスタンスが表示されるはずです。
それでは、新しいビルダーインスタンスを作成しましょう。この新しいビルダーにはmybuilderという名前を付けます。
docker buildx create --name mybuilder
このコマンドはmybuilderという名前の新しいビルダーインスタンスを作成します。デフォルトでは、この新しいビルダーにはまだノードが関連付けられていません。ノードの追加は次のステップで行います。
新しいビルダーを作成した後、再度ビルダーをリスト表示して新しく作成されたものを確認できます。
docker buildx ls
これでdefaultビルダーとmybuilderビルダーの両方が表示されるはずです。mybuilderビルダーは、まだアクティブなノードを持っていないため、非アクティブとして表示されます。
既存ビルダーに新規ノードを追加
前のステップでは、mybuilderという名前の新しいビルダーインスタンスを作成しました。現在、このビルダーにはビルドノードがありません。このステップでは、既存のビルダーに新しいノードを追加します。
ビルドノードは、基本的にビルドプロセスが実行される Docker エンドポイントです。デフォルトでは、ノードを指定せずに新しいビルダーを作成すると、アクティブなノードなしで作成されます。
mybuilderビルダーに新しいノードを追加するには、再びdocker buildx createコマンドを使用しますが、今回は--appendフラグを使用してノードを追加するビルダーを指定します。mybuilderビルダーにノードを追加します。
docker buildx create --name mybuilder --append
このコマンドはmybuilderビルダーに新しいノードを追加します。デフォルトでは、名前を指定せずにノードを追加すると、Docker Buildx が名前を自動生成します。
更新されたmybuilderインスタンスと新しいノードを確認するため、再度ビルダーをリスト表示しましょう。
docker buildx ls
これでmybuilderの下にノードが表示されるはずです。ノードには生成された名前が付けられ、実行状態 (running) になっているでしょう。
ビルダーとノードに名前を指定
前のステップでは、mybuilderという名前のビルダーを作成し、そこにノードを追加しました。ノードには自動的に生成された名前が割り当てられていました。このステップでは、作成時にビルダーとノードの両方に名前を指定する方法を学びます。
まず、前のステップで作成したmybuilderビルダーを削除して、新たに始めましょう。
docker buildx rm mybuilder
次に、新しいビルダーインスタンスを作成し、その名前をcustombuilderと指定します。また、このビルダー内の初期ノードの名前をnode1と指定します。ビルダーには--nameフラグを、ノードには--nodeフラグを使用して指定できます。
docker buildx create --name custombuilder --node node1
このコマンドは、custombuilderという名前の新しいビルダーインスタンスと、その中のnode1という名前の初期ノードを作成します。
名前を確認するためにビルダーをリスト表示しましょう。
docker buildx ls
これでcustombuilderが表示され、その下にnode1という名前のノードが表示されるはずです。これにより、ビルダーとノードの整理と識別をより詳細に制御できるようになります。
ノードがサポートするプラットフォームの設定
このステップでは、ビルドノードがサポートするプラットフォームを指定する方法を学びます。これはマルチアーキテクチャイメージを構築する上で重要です。デフォルトでは、ノードは実行されているホストのアーキテクチャのみをサポートします。しかし Buildx を使用すると、QEMU などのエミュレーションを使って追加のプラットフォームをサポートするようにノードを設定できます。
まず、前のステップで作成したcustombuilderを検査して、そのノードがサポートするプラットフォームを確認しましょう。
docker buildx inspect custombuilder
出力の"Platforms"フィールドを確認してください。LabEx VM のネイティブアーキテクチャ(例:linux/amd64)が表示されるはずです。
次に、custombuilder内のnode1を更新して追加のプラットフォームをサポートさせます。docker buildx createコマンドに--appendフラグと--platformフラグを使用します。ここではlinux/arm64とlinux/riscv64のサポートを追加します。
docker buildx create --name custombuilder --append --node node1 --platform linux/arm64,linux/riscv64
既存のビルダー名とノード名に対して--appendを使用している点に注意してください。このコマンドはcustombuilder内の既存ノードnode1を更新し、指定されたプラットフォームを含めるようにします。
再度ビルダーを検査して、node1の更新されたプラットフォームを確認しましょう。
docker buildx inspect custombuilder
node1の"Platforms"フィールドには、linux/amd64、linux/arm64、linux/riscv64が含まれるようになります。これにより、このノードはこれらのアーキテクチャ向けのイメージを構築できるようになります。
新規作成したビルダーへの自動切り替え
この最終ステップでは、新しく作成したビルダーインスタンスの使用に自動的に切り替える方法を学びます。複数のビルダーがある場合、Docker Buildx にどのビルダーをビルド操作に使用するかを指定する必要があります。
デフォルトでは、Docker Buildx はdefaultビルダーを使用します。現在アクティブなビルダーを確認するには、docker buildx lsの出力を確認してください。アクティブなビルダーには名前の横にアスタリスク (*) が表示されます。
docker buildx ls
作成したcustombuilderに切り替えるには、docker buildx useコマンドの後にビルダー名を指定します。
docker buildx use custombuilder
このコマンドはcustombuilderを現在のアクティブビルダーとして設定します。これ以降のdocker buildx buildコマンドは、custombuilder内に設定されたノードを使用するようになります。
再度ビルダーをリスト表示して、custombuilderがアクティブビルダーになったことを確認しましょう。
docker buildx ls
custombuilderの横にアスタリスク (*) が表示され、これがアクティブビルダーであることがわかります。
新しいビルダーインスタンスの作成、ノードの追加、名前の指定、ノードのサポートプラットフォーム設定、そしてこの新しいビルダーへの切り替えをすべて正常に完了しました。
まとめ
この実験では、docker buildx createコマンドを使用して Docker ビルダーを管理する方法を学びました。まず、mybuilderという名前の新しいビルダーインスタンスを作成し、独立したビルド環境を初期化する方法を実践しました。次に、既存のビルダーに新しいビルドノードを追加する方法を学び、mybuilderインスタンスにビルドエンドポイントを効果的に追加しました。
さらに、ビルダーとそのノードにカスタム名を指定して整理と明確化を行う方法をカバーしました。また、特定のビルドノードがサポートするプラットフォーム(アーキテクチャ)を定義し、ターゲットを絞ったビルドを可能にする方法も学びました。最後に、新しく作成したビルダーに自動的に切り替え、それ以降のビルド操作でアクティブなビルダーとして使用する練習を行いました。



