はじめに
この実験では、docker node ps コマンドを使用して、Docker Swarm ノード上で実行されているタスクを一覧表示し、フィルタリングする方法を学びます。まず、Docker Swarm を初期化し、タスクを生成するためのシンプルなサービスを作成します。
次に、特定のノード上のすべてのタスクを一覧表示する方法、タスクの名前と希望する状態に基づいてタスクをフィルタリングする方法を調べ、最後に、タスクリストの出力を整形して、読みやすさと情報抽出を向上させる方法を学びます。この実践的な経験を通じて、Docker Swarm クラスタ内のタスクを監視および管理するための実用的なスキルを身につけることができます。
ノード上のすべてのタスクを一覧表示する
このステップでは、Docker Swarm ノード上で実行されているすべてのタスクを一覧表示する方法を学びます。Docker Swarm は、Docker ノードのクラスタを管理できるコンテナオーケストレーションツールです。タスクは、サービスの実行インスタンスです。
タスクを一覧表示する前に、実行中の Docker Swarm サービスが必要です。この実験では、シンプルな nginx サービスを使用します。
まず、このノードで Docker Swarm を初期化しましょう。
docker swarm init
スワームが初期化され、参加トークンが表示される出力が表示されるはずです。
次に、nginx イメージを使用して my-nginx-service という名前のシンプルなサービスを作成しましょう。まず、nginx イメージを取得して、利用可能であることを確認します。
docker pull nginx:latest
docker service create --name my-nginx-service --replicas 1 nginx
docker service create コマンドは、1 つのレプリカ(1 つのタスク)を持つ新しいサービスを作成します。nginx イメージがまだ存在しない場合、Docker は自動的に取得しますが、事前に明示的に取得しました。
サービスが作成された後、Docker はスワーム内のノードの 1 つ(この場合は現在のノード)でこのサービスのタスクを開始します。
ノード上で実行されているすべてのタスクを一覧表示するには、docker node ps コマンドの後にノード ID またはホスト名を指定します。サービスが作成されたマネージャーノードにいるので、このノードのノード ID を使用できます。
ノード ID を見つけるには、docker node ls コマンドを使用できます。
docker node ls
このコマンドは、スワーム内のすべてのノードを一覧表示します。出力には、ノード ID、ホスト名、ステータス、可用性、およびマネージャーステータスが表示されます。現在のノード(MANAGER STATUS の下に Leader が表示されているノード)のノード ID をコピーします。
次に、コピーしたノード ID を使用して docker node ps コマンドを実行し、そのノード上のタスクを一覧表示します。<node_id> を実際のノード ID に置き換えます。
docker node ps <node_id>
このコマンドは、指定されたノード上で実行されているタスクのリストを表示します。タスク ID、サービス名、イメージ、ノード、希望する状態、現在の状態、およびエラーが表示されます。my-nginx-service.1 タスクが Running 状態で一覧表示されるはずです。
あるいは、docker task ls コマンドを使用して、スワーム内のすべてのタスクを一覧表示することもできます。このコマンドは、スワーム内のすべてのノードのタスクを確認するのに便利です。
docker task ls
このコマンドは、docker node ps と同様の情報を表示しますが、スワーム内のすべてのノードのタスクを一覧表示します。ノードとタスクが 1 つしかないため、出力は docker node ps と似ています。
このステップでは、docker node ps を使用して特定のノード上のタスクを一覧表示し、docker task ls を使用してスワーム内のすべてのタスクを一覧表示する方法を学びました。
タスクを名前でフィルタリングする
このステップでは、タスクの名前でタスクリストをフィルタリングする方法を学びます。多数のサービスとタスクが実行されている場合に、特定のサービスに関連するタスクのみを表示したいときに便利です。
前のステップで作成した my-nginx-service を引き続き使用します。
タスクを名前でフィルタリングするには、docker task ls コマンドで --filter フラグと name キーを使用します。構文は --filter name=<service_name> です。
my-nginx-service に属するタスクのみを表示するようにタスクをフィルタリングしましょう。
docker task ls --filter name=my-nginx-service
このコマンドは、サービス名が my-nginx-service のタスクのみを一覧表示します。my-nginx-service.1 タスクが一覧表示されるはずです。
サービス名とタスク番号を含む完全なタスク名(例:my-nginx-service.1)でもフィルタリングできます。
docker task ls --filter name=my-nginx-service.1
このコマンドは、正確に my-nginx-service.1 という名前のタスクを具体的に一覧表示します。
複数のサービスが実行されている場合、サービス名でフィルタリングすると、そのサービスのすべてのタスクが表示されます。たとえば、my-app-service という別のサービスがある場合、docker task ls --filter name=my-app-service を実行すると、my-app-service のすべてのタスクが表示されます。
名前でフィルタリングすることは、docker task ls コマンドの出力を絞り込み、関心のあるタスクに焦点を当てる強力な方法です。
タスクを望ましい状態でフィルタリングする
このステップでは、タスクの希望する状態に基づいてタスクリストをフィルタリングする方法を学びます。タスクの希望する状態とは、Docker Swarm マネージャーがタスクに対して望む状態(例:Running、Shutdown、Accepted)のことです。
前のステップで作成した my-nginx-service を引き続き使用します。現在、このサービスのタスクの希望する状態は Running です。
タスクを希望する状態でフィルタリングするには、docker task ls コマンドで --filter フラグと desired-state キーを使用します。構文は --filter desired-state=<state> です。
希望する状態が Running のタスクのみを表示するようにタスクをフィルタリングしましょう。
docker task ls --filter desired-state=Running
このコマンドは、希望する状態が Running のタスクのみを一覧表示します。my-nginx-service.1 タスクが一覧表示されるはずです。
次に、サービスのレプリカ数を 0 に縮小しましょう。これにより、既存のタスクの希望する状態が Shutdown に変わります。
docker service scale my-nginx-service=0
縮小後、タスクは最終的に Shutdown 状態に移行します。状態が更新されるまで数秒かかる場合があります。
次に、希望する状態が Shutdown のタスクを表示するようにタスクをフィルタリングしましょう。
docker task ls --filter desired-state=Shutdown
これで、希望する状態が Shutdown の my-nginx-service.1 タスクが一覧表示されるはずです。
その他の可能な希望する状態には、Accepted(タスクがワーカーノードに受け入れられたがまだ実行されていない場合)と Failed(タスクの起動に失敗した場合)があります。
希望する状態でフィルタリングすることは、サービスの状態を監視し、予期しない状態のタスクを特定するのに役立ちます。
タスクの出力をフォーマットする
このステップでは、docker task ls コマンドの出力をカスタムフォーマットで特定の情報を表示するようにフォーマットする方法を学びます。これは、スクリプト作成やレポート生成に役立ちます。
引き続き my-nginx-service とそのタスクを使用します。
出力をフォーマットするには、Go テンプレート文字列とともに --format フラグを使用できます。テンプレート文字列を使用すると、表示するフィールドとそのフォーマット方法を指定できます。
タスクの ID、サービス名、および現在の状態のみを表示しましょう。
docker task ls --format "{{.ID}}\t{{.Service}}\t{{.CurrentState}}"
このコマンドでは:
{{.ID}}はタスク ID を指します。{{.Service}}はサービス名を指します。{{.CurrentState}}はタスクの現在の状態を指します。\tは、フィールド間にタブ文字を挿入して読みやすくするために使用されます。
出力には、各タスクのタスク ID、サービス名、および現在の状態が表示されます。
また、table フォーマットを使用して、特定の列を持つテーブル形式で出力を表示することもできます。
docker task ls --format "table {{.ID}}\t{{.Service}}\t{{.CurrentState}}\t{{.Node}}"
このコマンドは、タスク ID、サービス、現在の状態、およびノードの列を持つテーブルを表示します。
フォーマット文字列で使用できるすべての利用可能なフィールドを確認するには、docker task inspect コマンドを使用してタスクを調査し、JSON 出力を確認します。ただし、いくつかの一般的なフィールドは次のとおりです。
.ID: タスク ID.Service: サービス名.Image: イメージ名.Node: ノードのホスト名.DesiredState: タスクの希望する状態.CurrentState: タスクの現在の状態.Error: タスクが失敗した場合のエラーメッセージ.CreatedAt: タスクが作成されたタイムスタンプ.UpdatedAt: タスクが最後に更新されたタイムスタンプ
タスク ID、イメージ、およびそれが実行されているノードを表示しましょう。
docker task ls --format "{{.ID}}\t{{.Image}}\t{{.Node}}"
このコマンドは、タスク ID、タスクで使用されているイメージ、およびタスクが実行されているノードを表示します。
出力をフォーマットすることで、docker task ls によって表示される情報を、迅速な調査やスクリプトでの使用など、あなたのニーズに合わせてカスタマイズできます。
最後に、作成したサービスをクリーンアップしましょう。
docker service rm my-nginx-service
このコマンドは、サービスとそれに関連するタスクを削除します。
まとめ
この実験では、特定の Docker Swarm ノード上で実行されているタスクを一覧表示するために docker node ps コマンドを使用する方法を学びました。まず、Docker Swarm を初期化し、1 つのレプリカを持つシンプルな nginx サービスを作成しました。次に、docker node ls を使用して現在のマネージャーノードのノード ID を特定し、その後 docker node ps <node_id> を使用してそのノード上で実行されているすべてのタスクを表示しました。
この実験ではまた、タスクの名前と希望する状態に基づいてタスクをフィルタリングすることで docker node ps の出力を絞り込む方法、および出力をより読みやすくするためにフォーマットする方法についても説明しました。これらの手順は、Docker Swarm クラスタ内のタスクを監視および管理するための docker node ps コマンドの柔軟性を示しています。



