Dockerのコマンドやコンテナのライフサイクルについて復習しました。
Docker のコンテナとプロセス
いままで docker run
でコンテナとプロセスを同時に作っていて意識することはなかったのですが、コンテナとプロセスの生成を別でわけることもできるようです。
docker run = docker (create + start)
ベクトル的にはこんな感じの式になるのでしょうか。
Dockerコンテナの状態
Dockerのp26によると下記の状態があるようです。
- created
- running
- paused
- exited
- restrting
created
とexited
はプロセスが止まっている状態。違いは1度も起動されたことがないものがcreated
でそれ以外はexited
だそうです。
running
とpaused
はプロセスがある状態。ただし、paused
はプロセスが一時停止されている状態。
restarting
はdocker restart
の実行中にだけなる一時的な状態だそうで、通常気にすることはないようです。exited
と区別する目的だと思います。
状態遷移図を書いてみた
ここを参考に状態遷移図をdotで書いてみました。
便宜的にdeleted
の状態を作って可視化しています。
おまけ
状態遷移図のときにつかったやつ
digraph docker_lifecycle {
graph [
charset = "UTF-8";
compound = true;
dpi = 410;
];
node [
shape = "circle";
];
{rank=min; IMAGE; restarting; };
{rank=same; created; paused; running; };
{rank=max; exited; deleted; };
IMAGE [
group = 1,
style = "dashed",
shape = "box"
];
created [
group = 1
];
deleted [
group = 1,
style = "dotted"
];
restarting [
style = "dotted",
shape = "plain"
];
paused [
group = 3,
color = "#0000ff",
fontcolor = white,
style = "filled"
];
running [
color = "#00ff00",
style = "filled",
group = 2
];
exited [
group = 2
];
IMAGE -> running [ label = "docker run"];
IMAGE -> created [ label = "docker create"];
running -> paused [ label = "docker pause"];
paused -> running [ label = "docker unpause"];
created -> deleted [ label = "docker rm"];
running -> exited [
label = "docker stop/\ndocker kill"
];
exited -> running [
label = "docker start",
constraint = false,
];
running -> restarting [
label = "docker restart",
];
restarting -> running;
created -> running [ label = "docker start"];
exited -> deleted [ label = "docker rm", constraint=false];
}
参考
- Docker