swarm タスクの状態¶
Docker でサービスを作成すると、タスクを開始します。サービスは期待状態(desired state)として記述されており、タスクはそれを動かします。動かすとは、以下の手順で swarm ノード上にスケジュールします。
docker service create
を使ってサービスを作成Docker manager ノードにリクエストが渡る
Docker manager ノードは適切なノード上でサービスを実行するようスケジュールする
各サービスは複数のタスクを開始できる
タスク毎にライフサイクルと状態を持ち、状態とは
NEW
、PENDING
、COMPLETE
のようなもの
タスクとは、実行が完了するまでの実行を指す単位です。タスクが停止すると再び実行しませんが、新しいタスクがその場所に配置されます。
タスクの利点とは、完了や失敗に至るまで数々の状態を持ちます。タスクの進行には数々の状態がありますが、状態は巻き戻りません。たとえば、 COMPLETE
のタスクは決して RUNNING
になりません。
タスクの状態は、以下の順番で遷移します。
タスク状態 |
説明 |
---|---|
|
タスクの初期化 |
|
タスクに対するリソースが割り当てられた |
|
Docker がノードにタスクを割り当てた |
|
タスクが worker ノードによって承認(受け入れ)。worker ノードがタスクを拒否すると、状態は |
|
Docker はタスクを準備中 |
|
Docker はタスクの開始中 |
|
タスクが実行中 |
|
タスクがエラーコード無く終了 |
|
タスクがエラーコードと共に終了 |
|
Docker がタスクの停止を供給 |
|
worker ノードがタスクを拒否 |
|
長期間にわたりノードが停止 |
|
タスクは停止していないものの、関連するサービスが削除されたかスケールダウン |
タスク状態の表示¶
タスクの状態を取得するには docker service ps <サービス名>
を実行します。 CURRENT STATE
列でタスクの状態と、どれだけ存在しているかが分かります。
$ docker service ps webserver
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
owsz0yp6z375 webserver.1 nginx UbuntuVM Running Running 44 seconds ago
j91iahr8s74p \_ webserver.1 nginx UbuntuVM Shutdown Failed 50 seconds ago "No such container: webserver.…"
7dyaszg13mw2 \_ webserver.1 nginx UbuntuVM Shutdown Failed 5 hours ago "No such container: webserver.…"
次はどこへ¶
参考
- Swarm task states
https://docs.docker.com/engine/swarm/how-swarm-mode-works/pki/