swarm タスクの状態¶
Docker でサービスを作成すると、タスクを開始します。サービスは期待状態(desired state)として記述されており、タスクはそれを動かします。動かすとは、以下の手順で swarm ノード上にスケジュールします。
docker service create
を使ってサービスを作成- Docker manager ノードにリクエストが渡る
- Docker manager ノードは適切なノード上でサービスを実行するようスケジュールする
- 各サービスは複数のタスクを開始できる
- タスク毎にライフサイクルと状態を持ち、状態とは
NEW
、PENDING
、COMPLETE
のようなもの
タスクとは、実行が完了するまでの実行を指す単位です。タスクが停止すると再び実行しませんが、新しいタスクがその場所に配置されます。
タスクの利点とは、完了や失敗に至るまで数々の状態を持ちます。タスクの進行には数々の状態がありますが、状態は巻き戻りません。たとえば、 COMPLETE
のタスクは決して RUNNING
になりません。
タスクの状態は、以下の順番で遷移します。
タスク状態 | 説明 |
---|---|
NEW (新規) |
タスクの初期化 |
PENDING (保留) |
タスクに対するリソースが割り当てられた |
ASSIGNED (割り当て) |
Docker がノードにタスクを割り当てた |
ACCEPTED (承認) |
タスクが worker ノードによって承認(受け入れ)。worker ノードがタスクを拒否すると、状態は REJECT に遷移 |
PREPARING (準備中) |
Docker はタスクを準備中 |
STARTING (開始中) |
Docker はタスクの開始中 |
RUNNING (実行中) |
タスクが実行中 |
COMPLETE (完了) |
タスクがエラーコード無く終了 |
FAILED (障害) |
タスクがエラーコードと共に終了 |
SHUTDOWN (停止) |
Docker がタスクの停止を供給 |
REJECTED (拒否) |
worker ノードがタスクを拒否 |
ORPHANED (孤立) |
長期間にわたりノードが停止 |
REMOVE (削除) |
タスクは停止していないものの、関連するサービスが削除されたかスケールダウン |
タスク状態の表示¶
タスクの状態を取得するには 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/