docker service ps コマンドを使ってサービスタスクをリストする方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、docker service ps コマンドを効果的に使用して、Docker Swarm サービス内のタスクを調査および管理する方法を学習します。まず、サービスに関連付けられたタスクの基本情報をリストアップし、デフォルトの出力で提供される重要な詳細を理解します。

基本的なリストアップを基に、--no-trunc フラグを使用してサービスタスクの完全な詳細を取得する方法を探索します。これにより、包括的な情報を得ることができます。さらに、この実験では、名前、実行中のノード、および希望する状態などのさまざまな基準に基づいてタスクをフィルタリングする方法を案内し、特定のタスクを正確に特定できるようにします。最後に、docker service ps コマンドの出力をフォーマットして、表示する情報を必要に応じてカスタマイズする方法を学習します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ps -.-> lab-555228{{"docker service ps コマンドを使ってサービスタスクをリストする方法"}} docker/rm -.-> lab-555228{{"docker service ps コマンドを使ってサービスタスクをリストする方法"}} docker/create -.-> lab-555228{{"docker service ps コマンドを使ってサービスタスクをリストする方法"}} end

サービスのタスクをリストする

このステップでは、Docker Swarm 内の特定のサービスに関連付けられたタスクをリストする方法を学習します。タスクは Swarm におけるスケジューリングの基本単位であり、サービスの実行インスタンスを表します。

まず、サービスが実行中であることを確認しましょう。nginx イメージを使用して簡単なサービスを作成します。

docker service create --name my-nginx nginx

このコマンドは、nginx イメージを使用して my-nginx という名前のサービスを作成します。Docker Swarm はこのサービスのタスクを自動的に作成および管理します。

では、my-nginx サービスのタスクをリストするには、docker service ps コマンドの後にサービス名を指定します。

docker service ps my-nginx

以下のような出力が表示され、サービスに関連付けられたタスクが示されます。

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

この出力には、各タスクに関する情報が提供されており、ID、名前、使用しているイメージ、実行中のノード、希望する状態、および現在の状態が含まれます。

完全な詳細でタスクをリストする

前のステップでは、サービスのタスクに関する基本情報をリストする方法を学習しました。時には、各タスクに関するより詳細な情報、たとえば完全なタスク ID、コンテナ ID などが必要になることがあります。

タスクの完全な詳細を取得するには、docker service ps コマンドに --no-trunc フラグを使用します。このフラグを使用すると、Docker が出力を省略せず、完全な ID やその他の情報が表示されます。

my-nginx サービスのタスクを完全な詳細でリストしてみましょう。

docker service ps --no-trunc my-nginx

前のステップと同様の出力が表示されますが、完全なタスク ID が表示され、タスクの状態や設定に応じてより詳細な情報が表示される場合があります。

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

この出力を前のステップの出力と比較すると、省略されていない完全なタスク ID が表示されていることがわかります。これは、たとえばタスクを調査する際に特定のタスクを正確に参照する必要がある場合に便利です。

名前またはノードでタスクをフィルタリングする

大規模な Swarm クラスタでは、複数のノードにまたがって多数のタスクが実行されている場合があります。特定のタスクを見つけるには、docker service ps の出力を、タスク名や実行中のノードなどのさまざまな基準に基づいてフィルタリングすることができます。

フィルタリングには --filter フラグが使用されます。基本的な構文は --filter "key=value" です。

タスクを名前でフィルタリングするには、name キーを使用できます。たとえば、my-nginx で始まる名前のタスクを見つけるには、次のように使用します。

docker service ps --filter "name=my-nginx.1" my-nginx

このコマンドは、my-nginx サービスの my-nginx.1 という名前のタスクのみを表示します。タスク名は通常、service_name.task_number の形式になっています。

タスクを実行中のノードでフィルタリングするには、node キーを使用できます。まず、タスクが実行されているノードの名前を知る必要があります。これは docker service ps の出力から取得できます。ノード名が labex-node であると仮定しましょう。

docker service ps --filter "node=labex-node" my-nginx

このコマンドは、labex-node という名前のノードで実行されている my-nginx サービスのタスクを表示します。ノード名が異なる場合は、labex-node を実際のノード名に置き換えてください。

複数の --filter フラグを使用することで、フィルタを組み合わせることができます。

望ましい状態でタスクをフィルタリングする

名前やノードでフィルタリングする他に、タスクを望ましい状態に基づいてフィルタリングすることもできます。望ましい状態は、Swarm マネージャがタスクをどの状態にすることを望んでいるかを示します(例:RunningShutdownRejected)。

タスクを望ましい状態でフィルタリングするには、--filter フラグと desired-state キーを使用します。

たとえば、my-nginx サービスで現在 Running 状態にすることが望まれているタスクのみをリストするには、次のように使用します。

docker service ps --filter "desired-state=running" my-nginx

my-nginx サービスが実行中であるため、このコマンドはアクティブなタスクを表示します。

シャットダウンされたタスクを表示したい場合は、次のように使用できます。

docker service ps --filter "desired-state=shutdown" my-nginx

現在、タスクを縮小または削除していない限り、このコマンドは何も出力しない場合があります。

Rejected 状態のタスクをフィルタリングすることもできます。この状態は、Swarm マネージャがタスクを起動できなかったことを示します。

docker service ps --filter "desired-state=rejected" my-nginx

望ましい状態を理解することは、Swarm 内のサービスの健全性と状態を監視するために重要です。

サービスタスクの出力形式を設定する

この最後のステップでは、docker service ps コマンドの出力形式をカスタマイズする方法を学びます。特定の情報を抽出したり、出力を他のツールと統合したりする場合に便利です。

--format フラグを使用すると、出力形式を指定するための Go テンプレートを指定できます。.ID.Name.Image.Node.DesiredState.CurrentState.Error.Ports などのプレースホルダを使用して、対応するタスク属性を表示できます。

たとえば、タスク ID、名前、イメージのみを表形式で表示するには、次のように使用します。

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

このコマンドは、次のような出力を生成します。

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

また、出力を値のリストとして形式を設定することもでき、これはスクリプト作成に便利です。たとえば、タスク ID のみを取得するには、次のようにします。

docker service ps --format "{{.ID}}" my-nginx

これにより、タスク ID のみが出力されます。

別の形式を試してみましょう。タスク名とそれが実行されているノードを表示します。

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

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

Task: my-nginx.1 is running on node: <node_name>

必要な出力を得るために、さまざまなプレースホルダと形式オプションを試してみてください。

最後に、作成したサービスをクリーンアップしましょう。

docker service rm my-nginx

このコマンドは、my-nginx サービスとそれに関連するタスクを削除します。

まとめ

この実験では、docker service ps コマンドを使用して Docker Swarm サービスに関連付けられたタスクをリストする方法を学びました。まず、簡単な nginx サービスを作成し、docker service ps <service_name> を使用してそのタスクを表示し、ID、名前、イメージ、ノード、望ましい状態、現在の状態などの基本的な出力列を理解しました。

さらに、--no-trunc フラグを使用して出力の切り捨てを防ぎ、各タスクの完全な ID やその他の詳細情報を表示することで、より詳細なタスク情報を取得する方法を調べました。