docker node ls コマンドを使って Swarm ノードをリストする方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker node ls コマンドを効果的に使用して、Docker Swarm 内のノードを管理および調査する方法を学びます。まず、Docker Swarm を初期化し、すべてのノードを一覧表示します。

その後、ノード ID、役割(マネージャまたはワーカー)、カスタムノードラベルなどの基準に基づいてノードリストを絞り込むためのさまざまなフィルタリングオプションを探索します。最後に、必要な特定の情報のみを表示するように出力をフォーマットする方法を学び、関連するノードの詳細を迅速に取得する能力を向上させます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") subgraph Lab Skills docker/ls -.-> lab-555182{{"docker node ls コマンドを使って Swarm ノードをリストする方法"}} docker/ps -.-> lab-555182{{"docker node ls コマンドを使って Swarm ノードをリストする方法"}} docker/inspect -.-> lab-555182{{"docker node ls コマンドを使って Swarm ノードをリストする方法"}} end

Swarm 内のすべてのノードを一覧表示する

このステップでは、Docker Swarm 内のすべてのノードを一覧表示する方法を学びます。ノードを一覧表示する前に、Docker Swarm を初期化する必要があります。

まず、現在のマシンで swarm を初期化しましょう。このマシンはマネージャノードになります。

docker swarm init

swarm が初期化され、他のノードを swarm に参加させるためのコマンドが表示される出力が表示されるはずです。

これで swarm が初期化されたので、docker node ls コマンドを使用して swarm 内のノードを一覧表示できます。

docker node ls

このコマンドは、swarm 内のノードに関する情報を含むテーブルを表示します。これには、ノードの ID、ホスト名、ステータス、可用性、マネージャステータス、およびエンジンバージョンが含まれます。現在は 1 つのノード(先ほど初期化したマネージャノード)しかないため、リストには 1 つのエントリが表示されます。

出力は次のようになります。

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

ID の横にある * は、これがコマンドを実行している現在のノードであることを示しています。MANAGER STATUS 列は、このノードが swarm の Leader であることを示しています。

ID でノードをフィルタリングする

このステップでは、Docker Swarm 内のノードのリストを ID に基づいてフィルタリングする方法を学びます。多数のノードがあり、特定のノードに関する情報を表示したい場合に便利です。

まず、マネージャノードの ID を取得するために、再度すべてのノードを一覧表示しましょう。

docker node ls

出力からノードの ID を特定します。これは長い文字列になります。

次に、--filter フラグと id キーを使用して、出力をフィルタリングし、指定された ID のノードのみを表示できます。<node_id> を前のコマンドで取得した実際の ID に置き換えます。

docker node ls --filter id=<node_id>

このコマンドは、指定された ID のノードに対応する行のみを表示します。ノードの ID がわかっている場合、特定のノードに関する情報をすばやく見つける簡単な方法です。

たとえば、ノード ID が 24ifihg345h345h345h345h34 の場合、コマンドは次のようになります。

docker node ls --filter id=24ifihg345h345h345h345h34

出力は、前のステップの docker node ls コマンドでのマネージャノードの単一行と同じになります。

役割によるノードのフィルタリング

このステップでは、Docker Swarm 内のノードのリストを役割に基づいてフィルタリングする方法を学びます。Docker Swarm では、ノードは manager または worker の 2 つの役割のいずれかを持つことができます。マネージャノードは Swarm を管理し、ワーカーノードはサービスを実行します。

現在、私たちの Swarm には 1 つのノードしかなく、それがマネージャノードです。そこで、マネージャノードのみを表示するようにフィルタリングしましょう。--filter フラグを role キーと manager 値で使用します。

docker node ls --filter role=manager

このコマンドは、manager 役割を持つノードのみを表示します。現在の設定では、これは前と同じ 1 つのノードを表示します。

もし Swarm にワーカーノードがある場合、次のコマンドを使用してワーカーノードのみを表示するようにフィルタリングできます。

docker node ls --filter role=worker

現在、このコマンドは Swarm にワーカーノードがないため、何も出力されません。

役割によるフィルタリングの方法を理解することは、複数のマネージャノードとワーカーノードを持つ大規模な Swarm を管理する上で重要です。

ノードラベルによるノードのフィルタリング

このステップでは、ノードに割り当てられたラベルに基づいてノードをフィルタリングする方法を学びます。ノードラベルは、組織目的やサービス配置の制御のためにノードに付けることができるキーと値のペアです。

まず、マネージャノードにラベルを追加しましょう。location=datacenter1 というラベルを追加します。これを行うには、docker node update コマンドの後にノード ID と --label-add フラグを指定します。

docker node ls -q を使用して再度ノード ID を取得します。

NODE_ID=$(docker node ls -q)
echo $NODE_ID

次に、ノードにラベルを追加して更新します。

docker node update --label-add location=datacenter1 $NODE_ID

ノードが更新されたことを確認する出力が表示されるはずです。

ラベルが追加されたことを確認するには、ノードを調査できます。

docker node inspect $NODE_ID

出力の Labels セクションを探します。"location": "datacenter1" が表示されるはずです。

次に、このラベルに基づいてノードをフィルタリングしましょう。--filter フラグを label キーと key=value 形式のラベルで使用します。

docker node ls --filter label=location=datacenter1

このコマンドは、location ラベルの値が datacenter1 であるノードのみを表示します。この場合、マネージャノードが表示されます。

また、特定のラベルキーを持つノードを、その値に関係なくフィルタリングすることもできます。キーのみを指定します。

docker node ls --filter label=location

これにより、location ラベルが定義されているすべてのノードが表示されます。

特定の情報を表示するように出力をフォーマットする

このステップでは、docker node ls コマンドの出力をフォーマットして、自分が関心のある情報のみを表示する方法を学びます。これは、スクリプト作成や特定の詳細をすぐに確認したい場合に便利です。

出力フォーマットを指定するには、--format フラグを使用します。Go テンプレート構文を使って、希望する出力を定義できます。アクセスできる一般的なフィールドには、.ID.Hostname.Status.Availability.ManagerStatus.EngineVersion などがあります。

ノードの ID とホスト名のみを表示してみましょう。

docker node ls --format "{{.ID}}\t{{.Hostname}}"

{{.ID}}{{.Hostname}} は、それぞれノードの ID とホスト名のプレースホルダーです。\t は区切りのためにタブ文字を挿入します。

出力は次のようになります。

<node_id>	<hostname>

次に、ホスト名とマネージャーの状態を表示してみましょう。

docker node ls --format "Hostname: {{.Hostname}}, Manager Status: {{.ManagerStatus}}"

これにより、次のように出力されます。

Hostname: <hostname>, Manager Status: Leader

フィルタリングとフォーマットを組み合わせることもできます。たとえば、マネージャーノードをフィルタリングして、それらの ID とホスト名を表示してみましょう。

docker node ls --filter role=manager --format "{{.ID}}\t{{.Hostname}}"

このコマンドは、まずノードをフィルタリングしてマネージャーのみを含め、次に出力をフォーマットしてそれらの ID とホスト名を表示します。

--format フラグを使用することで、Docker Swarm ノードに関する情報を表示および処理する方法に柔軟性を持たせることができます。

まとめ

この実験では、docker node ls コマンドを使用して Docker Swarm 内のノードを管理し、ノードに関する情報を表示する方法を学びました。まず、現在のマシンで Docker Swarm を初期化し、それをマネージャーノードに設定しました。次に、docker node ls を使用して Swarm 内のすべてのノードをリストし、ID、ホスト名、ステータス、可用性、マネージャーステータス、エンジンバージョンを含むデフォルトの出力を確認しました。

次に、--filter フラグを使用してノードリストをフィルタリングする方法を調べました。具体的には、ノードの一意の ID に基づいてノードをフィルタリングする方法を学び、大規模な Swarm 内の特定のノードに関する情報をすばやく見つけて表示できるようになりました。この実験では、役割 (role) やノードラベルによるフィルタリング、特定の情報のみを表示するように出力をフォーマットする方法もカバーしていますが、提供された内容では ID によるフィルタリングのみが詳細に説明されています。