swarm 上のサービスを調べる

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

  1. 準備がまだであれば、ターミナルを開き、manager ノードを実行しているマシンに SSH で入ります。たとえば、このチュートリアルでは manager1 という名前のマシンを使います。

  1. dockerserviceinspect--pretty<サービスID> を実行したら、サービスに関する詳細を読みやすい形式で表示します。

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

    [manager1]$ docker service inspect --pretty helloworld
    ID: 9uk4639qpg7npwf3fn2aasksr
    Name: helloworld
    Service Mode: REPLICATED Replicas: 1Placement:
    UpdateConfig: Parallelism: 1ContainerSpec: 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. dockerservicetasks<サービス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 はサービス・タスクの DESIREDSTATE (期待状態)と CURRENTSTATE (現在の状態)を表示します。これでサービス定義に従ってタスクを実行しているか確認できます。

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

次は何をしますか?

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