はじめに
この実験では、docker service ls コマンドを効果的に使用して、Docker Swarm で実行されているサービスを管理および調査する方法を学びます。まず、Swarm 内のすべてのサービスを一覧表示し、コマンドの出力とそれが提供する情報について基本的な理解を得ます。
基本的な一覧表示を基に、強力なフィルタリングオプションを探索します。これには、サービス名でフィルタリングすることが含まれ、特定のサービスをすばやく見つけることができます。また、サービスモード(例:レプリケートモードまたはグローバルモード)やラベル(サービスの整理と識別に使用されるキーバリューペア)でフィルタリングする方法も学びます。最後に、docker service ls コマンドの出力をフォーマットして、自分のニーズに最適な形式で情報を表示する方法を学び、サービスの詳細を解析しやすくします。
Swarm 内のすべてのサービスを一覧表示する
このステップでは、Docker Swarm で実行されているすべてのサービスを一覧表示する方法を学びます。サービスを一覧表示する前に、Docker Swarm を初期化し、少なくとも 1 つのサービスを実行しておく必要があります。
まず、まだ初期化されていない場合は、Docker Swarm を初期化しましょう。docker info コマンドを使用して Swarm の状態を確認できます。出力に "Swarm: active" が含まれている場合、Swarm はすでに初期化されています。そうでない場合は、初期化する必要があります。
docker info
Swarm がアクティブでない場合は、初期化します。
docker swarm init
では、一覧表示するための簡単なサービスを作成しましょう。nginx イメージを使用して my-web-service という名前のサービスを作成します。新しい環境を使用しているため、まず nginx イメージを取得する必要があります。
docker pull nginx
次に、サービスを作成します。
docker service create --name my-web-service -p 80:80 nginx
このコマンドは、nginx イメージから my-web-service という名前のサービスを作成し、コンテナのポート 80 をホストのポート 80 に公開します。
Swarm 内のすべてのサービスを一覧表示するには、docker service ls コマンドを使用します。このコマンドは、サービスの ID、名前、モード、レプリカ数、使用しているイメージなどの情報を表示します。
docker service ls
出力には、先ほど作成した my-web-service が表示されます。その ID、名前、モード(レプリケート)、レプリカ数(通常はデフォルトで 1)、イメージ(nginx)が表示されるはずです。
サービスを名前でフィルタリングする
このステップでは、--filter フラグを使用した docker service ls コマンドを使って、サービスの一覧を名前でフィルタリングする方法を学びます。多数のサービスが実行されている場合に、特定のサービスまたは名前が似ているサービスのグループに関する情報のみを表示したいときに便利です。
名前でフィルタリングする基本的な構文は docker service ls --filter name=<service_name> です。サービスの完全な名前または名前の一部を指定することができます。
前のステップで、my-web-service という名前のサービスを作成しました。このフィルタを使って、このサービスのみを表示しましょう。
docker service ls --filter name=my-web-service
出力には、my-web-service に対応する行のみが表示されるはずです。
部分的な名前を使ってフィルタリングすることもできます。たとえば、my-web-service-1 と my-web-service-2 という名前のサービスがある場合、name=my-web でフィルタリングすると、両方のサービスが表示されます。現在の設定では、name=my-web でフィルタリングしても my-web-service が表示されます。
docker service ls --filter name=my-web
このコマンドは、部分的な名前を使ってフィルタリングする方法を示しています。出力には依然として my-web-service が表示されるはずです。
名前でフィルタリングすることは、サービスの一覧を絞り込み、特定のサービスに関する必要な情報を見つけるための迅速な方法です。一覧全体をスキャンする必要はありません。
サービスをモードでフィルタリングする
このステップでは、--filter フラグを使用した docker service ls コマンドを使って、サービスの一覧をモードに基づいてフィルタリングする方法を学びます。Docker Swarm のサービスは、replicated と global の 2 つのモードで実行できます。
- Replicated(レプリケート): これはデフォルトのモードです。Swarm マネージャは、利用可能なノード上にサービスタスクの指定された数のレプリカをスケジュールします。
- Global(グローバル): Swarm は、利用可能なすべてのノード上でサービスのタスクを 1 つ実行します。
モードでフィルタリングする基本的な構文は docker service ls --filter mode=<mode> です。モードとして replicated または global を使用できます。
前のステップで、my-web-service という名前のサービスを作成しました。このサービスはデフォルトで replicated モードで実行されます。replicated モードで実行されているサービスのみを表示するようにフィルタリングしましょう。
docker service ls --filter mode=replicated
出力には my-web-service が表示されるはずです。なぜなら、これはレプリケートされたサービスだからです。
では、global モードのサービスをフィルタリングしてみましょう。グローバルサービスを作成していないため、このコマンドはサービスを何も表示しないはずです。
docker service ls --filter mode=global
このコマンドの出力には、ヘッダー行のみが表示され、サービスのエントリは表示されません。なぜなら、実行中のグローバルサービスがないからです。
モードでフィルタリングすることは、特定のタイプのサービスのみを表示したい場合に役立ちます。たとえば、すべてのノードで実行されるすべてのグローバルサービスの状態を確認する場合などです。
サービスをラベルでフィルタリングする
このステップでは、--filter フラグを使用した docker service ls コマンドを使って、サービスの一覧をラベルに基づいてフィルタリングする方法を学びます。ラベルは、サービスを含む Docker オブジェクトに付けることができるキーと値のペアで、オブジェクトの整理と識別に役立ちます。
ラベルでフィルタリングする基本的な構文は docker service ls --filter label=<key>=<value> です。特定のラベルのキーと値でフィルタリングすることも、ラベルのキーの存在だけでフィルタリングすることもできます。
まず、既存の my-web-service にラベルを追加しましょう。サービスに environment=development というラベルを追加します。
docker service update --label-add environment=development my-web-service
このコマンドは my-web-service を更新し、指定されたラベルを追加します。
では、environment=development というラベルが付いたサービスのみを表示するようにフィルタリングしましょう。
docker service ls --filter label=environment=development
出力には my-web-service が表示されるはずです。なぜなら、このラベルを追加したからです。
また、ラベルの値に関係なく、ラベルのキーの存在だけでフィルタリングすることもできます。たとえば、environment ラベルが付いたすべてのサービスを一覧表示するには、次のようにします。
docker service ls --filter label=environment
このコマンドは、environment ラベルが付いたすべてのサービスを一覧表示します。ラベルの値は関係ありません。この場合、依然として my-web-service が表示されます。
ラベルでフィルタリングすることは、サービスを管理してクエリを実行する強力な方法です。特に、大規模な Swarm では、環境、チーム、またはアプリケーションごとにサービスを分類するためにラベルを使用することがあります。
サービス一覧の出力をフォーマットする
このステップでは、--format フラグを使用して docker service ls コマンドの出力をフォーマットする方法を学びます。これにより、表示する情報とその表示形式をカスタマイズでき、スクリプト作成やレポート生成に特に役立ちます。
--format フラグは Go の text/template パッケージを使用します。表示したいフィールドとそのフォーマット方法を指定できます。サービスに関する一般的なフィールドには、.ID、.Name、.Mode、.Replicas、.Image などがあります。
まず、サービスの ID と名前のみをタブ区切りで表示してみましょう。
docker service ls --format "{{.ID}}\t{{.Name}}"
出力には、my-web-service の ID と名前がタブ文字で区切られて表示されます。
次に、サービスの名前、イメージ、モードをより読みやすい形式、たとえばデフォルトのヘッダーのない表形式で表示しましょう。
docker service ls --format "table {{.Name}}\t{{.Image}}\t{{.Mode}}"
フォーマット文字列の先頭に table を使用すると、Docker は出力を表形式でフォーマットします。フィールドはタブ (\t) で区切られます。
また、プログラムによる処理に非常に便利な JSON 形式を使用することもできます。
docker service ls --format json
このコマンドは、サービス情報を JSON 形式で出力します。
出力をフォーマットすることで、サービス情報の表示方法や利用方法に柔軟性を持たせることができます。特定のフィールドを選択したり、区切り文字を変更したり、表や JSON などの異なる形式で出力したりできます。
まとめ
この実験では、Docker Swarm で実行中のサービスを一覧表示するために docker service ls コマンドを使用する方法を学びました。まず、Docker Swarm が初期化されていることを確認し、サンプルサービスを作成しました。その後、docker service ls を使用してすべての実行中サービスを表示し、サービスの ID、名前、モード、レプリカ数、イメージなどの基本的な出力内容を理解しました。
さらに、--filter フラグを使用してサービス一覧をフィルタリングする方法を調べました。多数のサービスを管理し、関連する情報に焦点を当てるために不可欠な、サービスを名前で具体的にフィルタリングする方法を学びました。



