はじめに
この実験では、docker buildx ls コマンドを使用してビルダーインスタンスとそれに関連するノードを一覧表示する方法を学びます。利用可能なビルド環境とその構成を確認するための基本的なコマンドの使用方法を探求します。
さらに、Go テンプレートを使用して docker buildx ls の出力をフォーマットし、表示される情報をカスタマイズする方法を発見します。これには、特定のフィールドを表示するための出力のフォーマットや、ビルダーインスタンスとそのノード間の関係を視覚化することが含まれます。
すべてのビルダーインスタンスとノードを一覧表示
このステップでは、docker buildx ls コマンドを使用してすべてのビルダーインスタンスとノードを一覧表示する方法を学びます。このコマンドは、利用可能なビルド環境とその構成を理解するのに役立ちます。
まず、基本的なコマンドを実行してビルダーインスタンスとノードを一覧表示しましょう。
docker buildx ls
以下のような出力が表示されるはずです:
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default docker
default docker running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
この出力には、ビルダーインスタンスとそれに関連するノードの情報が含まれています。NAME/NODE 列はビルダーインスタンスの名前とそのインスタンス内のノードを表示します。DRIVER/ENDPOINT 列は使用されているドライバーとノードのエンドポイントを示します。STATUS 列はノードの現在の状態(例:running)を表示します。BUILDKIT 列は BuildKit のバージョンを表示し、PLATFORMS 列はノードがサポートするプラットフォームをリストします。
この例では、default という名前のビルダーインスタンスと、同じく default という名前の単一のノードが表示されています。これは docker ドライバーを使用しており、現在 running 状態です。また、複数のプラットフォームをサポートしています。
Go テンプレートを使用した出力のフォーマット
このステップでは、Go テンプレートを使用してdocker buildx lsコマンドの出力をフォーマットする方法を学びます。Go テンプレートを使用すると、必要な情報のみを表示するように出力形式を柔軟にカスタマイズできます。
--formatフラグを使用して Go テンプレートを指定できます。テンプレートでは{{.Name}}、{{.Driver}}、{{.Status}}などのプレースホルダーを使用して、ビルダーインスタンスとノードオブジェクトの様々なフィールドにアクセスします。
ビルダーインスタンスとノードの名前とドライバーのみを表示するように出力をフォーマットしてみましょう。
docker buildx ls --format "{{.Name}}\t{{.Driver}}"
以下のような出力が表示されるはずです:
default docker
default docker
このテンプレートでは、{{.Name}}がビルダーまたはノードの名前を表し、{{.Driver}}がドライバーを表します。\tは名前とドライバーの間にタブ文字を挿入して可読性を向上させるために使用されます。
これは、docker buildx lsの出力から特定の情報を抽出するためにシンプルな Go テンプレートを使用する方法を示しています。次のステップでは、より複雑なテンプレートを使用して出力を様々な方法でフォーマットする方法を探求します。
特定フィールドを使用した出力フォーマット
このステップでは、Go テンプレートを使用してdocker buildx lsの出力をフォーマットし、特定の関心のあるフィールドを表示する方法を引き続き探求します。ビルダーインスタンスとノードオブジェクトから様々なフィールドを選択して、カスタム出力に含めることができます。
各ビルダーノードの名前、ステータス、およびサポートされているプラットフォームを表示するように出力をフォーマットしてみましょう。
docker buildx ls --format "{{.Name}}\t{{.Status}}\t{{.Platforms}}"
以下のような出力が表示されるはずです:
default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x
このテンプレートでは:
{{.Name}}はビルダーノードの名前を参照します{{.Status}}はビルダーノードのステータス(例:running)を参照します{{.Platforms}}はビルダーノードがサポートするプラットフォームのリストを参照します
フィールドをタブで区切るために再び\tを使用しています。これにより、各ノードのステータスとサポートされているプラットフォームを素早く確認できます。
必要に応じて、テンプレートに異なるフィールドを組み合わせることができます。{{.Driver}}や{{.Buildkit}}などの他のフィールドを含めて、出力がどのように変化するかを試してみてください。
ビルダーとノードの関係性を表示する出力フォーマット
このステップでは、より高度な Go テンプレートを使用して、ビルダーインスタンスとそのノード間の関係性を可視化します。複数のビルダーインスタンスとノードが設定されている場合に特に有用です。
Go テンプレート内で条件文やループを使用してこれを実現できますが、基本的なフォーマットに焦点を当てるため、どのノードがどのビルダーインスタンスに属しているかを明確に示すテンプレートを作成します。
ビルダー名とそのノードをインデントして表示するテンプレートを使用してみましょう。
docker buildx ls --format "{{range .}}{{if .Builder}}{{.Name}} (Builder){{range .Nodes}}\n - {{.Name}} (Node){{end}}{{else}}\n{{.Name}} (Node){{end}}{{end}}"
以下のような出力が表示されるはずです:
default (Builder)
- default (Node)
このテンプレートを分解してみましょう:
{{range .}}...{{end}}: ビルダーインスタンスとノードのリストを反復処理します{{if .Builder}}...{{else}}...{{end}}: 現在の項目がビルダーインスタンスかどうかをチェックします(.Builderが true の場合)- ビルダーの場合:
{{.Name}} (Builder): ビルダー名と"(Builder)"を表示{{range .Nodes}}...{{end}}: 現在のビルダー内のノードを反復処理\n - {{.Name}} (Node): 改行、インデント、"- "、ノード名、"(Node)"を表示
- ビルダーでない場合(基本的な設定ではあまり見られませんが、スタンドアロンノードを意味します):
\n{{.Name}} (Node): 改行、ノード名、"(Node)"を表示
このテンプレートは、どのノードがどのビルダーインスタンスに関連付けられているかを明確に示す構造化された出力を提供します。この例では 1 つのビルダーと 1 つのノードのみのシンプルなケースですが、より複雑な buildx 構成の場合に特に有用です。
まとめ
この実験では、docker buildx ls コマンドを使用してビルダーインスタンスと関連ノードを一覧表示する方法を学びました。最初に基本的なコマンドを実行し、ビルダー名、ノード名、ドライバー、ステータス、BuildKit バージョン、サポートされているプラットフォームなどの詳細を含むデフォルトの出力を確認しました。
さらに、--format フラグを使用した Go テンプレートによる出力フォーマットの方法を探求しました。これにより、異なるフィールドのプレースホルダーを指定することで表示情報をカスタマイズでき、ビルダーインスタンスとノードに関する関連データのみを抽出して表示することが可能になります。



