サービスを ID でフィルタリングする
このステップでは、Docker スタック内のサービスのリストを一意の ID に基づいてフィルタリングする方法を学びます。名前でフィルタリングする方が直感的なことが多いですが、ID でフィルタリングすると、絶対的な精度が必要な場合や、似た名前のサービスを扱う場合に便利です。
Docker スタック内の各サービスには一意の ID が割り当てられています。これらの ID は docker stack services の出力の最初の列に表示されます。
サービス ID でフィルタリングするには、--filter フラグと id フィルタを使用します。構文は --filter id=<service_id> です。サービスを一意に識別するのに十分な ID の接頭辞を提供するだけで済みます。
まず、すべてのサービスを再度リストアップして、それらの ID を取得しましょう。
docker stack services mystack
出力を見て、mystack_web と mystack_app サービスの ID を特定します。ID は 16 進数の文字列になります。たとえば、出力は次のようになるかもしれません(あなたの ID は異なります)。
ID NAME MODE REPLICAS IMAGE PORTS
xxxxxxxxxxxx mystack_app replicated 1/1 alpine:latest
yyyyyyyyyyyy mystack_web replicated 1/1 nginx:latest *:80->80/tcp
mystack_web の ID が yyyyyyyyyyyy で始まるとしましょう。この ID(またはより短い一意の接頭辞)で次のようにフィルタリングできます。
docker stack services mystack --filter id=yyyyyyyyyyyy
yyyyyyyyyyyy をあなたの mystack_web サービスの実際の ID の先頭部分に置き換えてください。
このコマンドは、一致する ID を持つサービスの行のみを表示します。
次のような出力が表示され、mystack_web サービスのみが表示されるはずです。
ID NAME MODE REPLICAS IMAGE PORTS
yyyyyyyyyyyy mystack_web replicated 1/1 nginx:latest *:80->80/tcp
同様に、mystack_app サービスの ID でフィルタリングすることもできます。docker stack services mystack の出力からその ID を見つけて、フィルタに使用します。たとえば、ID が xxxxxxxxxxxx で始まる場合:
docker stack services mystack --filter id=xxxxxxxxxxxx
xxxxxxxxxxxx をあなたの mystack_app サービスの実際の ID の先頭部分に置き換えてください。
これにより、mystack_app サービスに関する情報が表示されます。
ID NAME MODE REPLICAS IMAGE
xxxxxxxxxxxx mystack_app replicated 1/1 alpine:latest
ID でフィルタリングすることで、特に自動化スクリプトで、または似た名前のサービスを扱う場合に、特定のサービスを正確に対象とすることができます。