swarm 上のサービスを調べる

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

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

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

    [manager1]$ docker service inspect --pretty helloworld
    
    ID:               9uk4639qpg7npwf3fn2aasksr
    Name:             helloworld
    Service Mode:     REPLICATED
     Replicas:                1
    Placement:
    UpdateConfig:
     Parallelism:     1
    ContainerSpec:
     Image:           alpine
     Args:    ping docker.com
    Resources:
    Endpoint Mode:  vip
    

ちなみに

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

[manager1]$ 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> を実行すると、サービスがどのノードで動作しているのか分かります。

    [manager1]$ docker service ps helloworld
    
    NAME                                    IMAGE   NODE     DESIRED STATE  CURRENT STATE           ERROR               PORTS
    helloworld.1.8p1vev3fq5zm0mi8g0as41w35  alpine  worker2  Running        Running 3 minutes
    

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

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

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

次は何をしますか?

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