swarm 上のサービスを調べる¶
swarm に サービスをデプロイ したら、swarm 上で実行している全サービスの詳細を Docker CLI で確認できます。
- 準備がまだであれば、ターミナルを開き、manager ノードを実行しているマシンに SSH で入ります。たとえば、このチュートリアルでは
manager1
という名前のマシンを使います。
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": {}
}
}
]
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
(現在の状態)を表示します。これでサービス定義に従ってタスクを実行しているか確認できます。
- タスクを実行中のノード上で
docker ps
を実行したら、タスク用のコンテナに関する詳細を確認できます。
次は何をしますか?¶
次は、swarm 内で実行するサービスの スケールを変更 できます。
参考
- Inspect a service on the swarm
- https://docs.docker.com/engine/swarm/swarm-tutorial/inspect-service/