はじめに
この実験では、docker service inspect コマンドを使用して Docker サービスの詳細情報を表示する方法を学びます。サービスの名前や一意の ID を使ってサービスを調査するさまざまな方法を探索します。
さらに、--pretty および --format オプションを使用して docker service inspect コマンドの出力をフォーマットする方法を学び、サービス情報の詳細度と表示形式を制御します。
サービス名でサービスを調査する
このステップでは、名前を使って Docker サービスを調査する方法を学びます。docker service inspect コマンドは、サービスの構成、タスク、ネットワーク設定など、サービスに関する詳細情報を提供します。
まず、調査するためのシンプルなサービスを作成しましょう。nginx イメージを使用して my-web-service という名前のサービスを作成します。Docker Compose は事前にインストールされていないため、直接 docker service create コマンドを使用します。
docker service create --name my-web-service nginx
サービスが作成されたことを示す出力が表示されるはずです。nginx イメージがシステムに存在しない場合、Docker はそのイメージをダウンロードします。
サービスが作成されたので、docker service inspect コマンドにサービス名を続けることで、名前を使ってサービスを調査できます。
docker service inspect my-web-service
このコマンドは、my-web-service に関するすべての詳細を含む大きな JSON オブジェクトを出力します。この出力は非常に長く、サービスの構成と状態を詳細に調べることができます。
ID でサービスを調査する
前のステップでは、名前を使ってサービスを調査する方法を学びました。Docker は各サービスに一意の ID も割り当てます。この ID を使ってサービスを調査することもできます。これは、似た名前のサービスが複数ある場合や、スクリプトを作成する際に特に便利です。
まず、前のステップで作成した my-web-service の ID を取得しましょう。docker service ls コマンドを使用して、実行中のすべてのサービスとその ID を一覧表示できます。
docker service ls
出力には、ID、NAME、MODE、REPLICAS、IMAGE などの列がある表が表示されます。ID 列には各サービスの一意の識別子が含まれています。my-web-service の ID をコピーします。これは文字列になります。
次に、コピーしたサービス ID を docker service inspect コマンドの後に続けて使用します。<SERVICE_ID> を実際の ID に置き換えます。
docker service inspect <SERVICE_ID>
名前で調査したときと同じ詳細な JSON 出力が表示されます。これは、サービス名またはその ID のどちらを使っても調査の詳細を取得できることを示しています。ID を使用すると、特に自動化されたスクリプトでは、より正確になります。
--pretty を使用して出力を整形する
前のステップでは、docker service inspect のデフォルト出力が大きな JSON オブジェクトであることを見ました。この形式は情報が充実していますが、概要をすぐに把握するには読みにくい場合があります。Docker は、情報をより人間が読みやすい形式で出力するための --pretty フラグを提供しています。
my-web-service を再度調査しましょう。今回は --pretty フラグを使用します。
docker service inspect --pretty my-web-service
出力が、スキャンしやすく理解しやすい形式に整形されていることに気づくでしょう。生の JSON ダンプではなく、サービス ID、名前、モード、レプリカ、イメージなどの重要な情報が構造化されたレイアウトで表示されます。これは、サービスの状態と基本的な構成をすぐに確認するのに非常に便利です。
--pretty フラグは、完全な JSON 出力を解析することなく、サービスの詳細の概要を取得する便利な方法です。
--format を使用して出力を整形する
--pretty は人間が読みやすい概要を提供しますが、--format フラグを使用すると、Go テンプレート構文を使って出力形式を細かく制御することができます。これは、特定の情報を抽出したり、スクリプトやレポート用に出力を整形したりするのに非常に強力です。
Go テンプレート構文を使うと、inspect コマンドの JSON 出力内のフィールドにアクセスできます。たとえば、サービス ID と名前だけを取得するには、{{.ID}} {{.Spec.Name}} のようなフォーマット文字列を使用できます。
my-web-service を調査し、出力をサービス ID と名前のみが表示されるように整形してみましょう。
docker service inspect --format '{{.ID}} {{.Spec.Name}}' my-web-service
以下のような出力が表示されるはずです。
<SERVICE_ID> my-web-service
ここで <SERVICE_ID> はサービスの実際の ID です。
ドットを使ってネストされたフィールドにアクセスすることができます。たとえば、イメージ名を取得するには、{{.Spec.TaskTemplate.ContainerSpec.Image}} を使用します。
サービス名とそれが使用しているイメージを取得する別の例を試してみましょう。
docker service inspect --format 'Service Name: {{.Spec.Name}}, Image: {{.Spec.TaskTemplate.ContainerSpec.Image}}' my-web-service
出力は次のようになります。
Service Name: my-web-service, Image: nginx
--format フラグは非常に柔軟で、特定のニーズに合わせて出力を調整することができます。構造を理解し、抽出したいフィールドを特定するために、(--pretty や --format を使用せずに)完全な JSON 出力を調べることができます。
まとめ
この実験では、docker service inspect コマンドを使用して Docker サービスの詳細情報を表示する方法を学びました。まず、docker service create を使用して my-web-service という名前のシンプルな nginx サービスを作成し、次に docker service inspect my-web-service を使用して、その構成と状態を JSON 形式で取得することで、サービス名を指定してサービスを調査する方法を練習しました。
また、一意の ID を使用してサービスを調査する方法も学びました。docker service ls を使用してサービス ID を見つけ、docker service inspect <SERVICE_ID> を使用して同じ詳細情報を取得することができました。これは、サービスを調査する別の方法を示しており、特にスクリプトで使用する場合や名前が曖昧な場合に便利です。



