swarm 上のサービスを調べる

swarm に サービスをデプロイ したら、swarm 上で実行している全サービスの詳細を Docker CLI で確認できます。

  1. 準備がまだであれば、ターミナルを開き、マネージャ・ノードを実行しているマシンに SSH で入ります。たとえば、このチュートリアルでは manager1 という名前のマシンを使います。
  1. docker service inspect --pretty <サービスID> を実行したら、サービスに関する詳細を読みやすい形式で表示します。

helloworld サービスの詳細を見るには、次のようにします。

$ docker service inspect --pretty helloworld

ID:     9uk4639qpg7npwf3fn2aasksr
Name:       helloworld
Mode:       REPLICATED
 Replicas:      1
Placement:
 Strategy:  SPREAD
UpdateConfig:
 Parallelism:   1
ContainerSpec:
 Image:     alpine
 Args:  ping docker.com

ちなみに

サービスの詳細を json 形式で得るには、同じコマンドで --pretty フラグを使わずに実行します。

$ docker service inspect helloworld
[
{
    "ID": "9uk4639qpg7npwf3fn2aasksr",
    "Version": {
        "Index": 418
    },
    "CreatedAt": "2016-06-16T21:57:11.622222327Z",
    "UpdatedAt": "2016-06-16T21:57:11.622222327Z",
    "Spec": {
        "Name": "helloworld",
        "TaskTemplate": {
            "ContainerSpec": {
                "Image": "alpine",
                "Args": [
                    "ping",
                    "docker.com"
                ]
            },
            "Resources": {
                "Limits": {},
                "Reservations": {}
            },
            "RestartPolicy": {
                "Condition": "any",
                "MaxAttempts": 0
            },
            "Placement": {}
        },
        "Mode": {
            "Replicated": {
                "Replicas": 1
            }
        },
        "UpdateConfig": {
            "Parallelism": 1
        },
        "EndpointSpec": {
            "Mode": "vip"
        }
    },
    "Endpoint": {
        "Spec": {}
    }
}
]
  1. docker service tasks <サービスID> を実行すると、サービスがどのノードで動作しているのか分かります。
$ docker service tasks helloworld

ID                         NAME          SERVICE     IMAGE   LAST STATE         DESIRED STATE  NODE
8p1vev3fq5zm0mi8g0as41w35  helloworld.1  helloworld  alpine  Running 3 minutes  Running        worker2

この場合、 helloworld サービスは worker2 ノード上で動作しています。マネージャ・ノード上からサービスを実行しているのが確認できます。デフォルトでは、Swarm 内のマネージャ・ノードはワーカ・ノードのようにタスクを実行可能です。

また、swarm はサービス・タスクの DESIRED STATE (期待状態)と LAST STATE (最新状態)を表示します。これでサービス定義に従ってタスクを実行しているか確認できます。

  1. タスクを実行中のノード上で docker ps を実行したら、タスク用のコンテナに関する詳細を確認できます。

ちなみに

helloworld がマネージャ・ノード以外で実行中の場合は、対象ノードに SSH する必要があります。

$docker ps

   CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
   e609dde94e47        alpine:latest       "ping docker.com"   3 minutes ago       Up 3 minutes                            helloworld.1.8p1vev3fq5zm0mi8g0as41w35

次は何をしますか?

次は、スワーム内で実行するサービスの スケールを変更 できます。