コンテナのライフサイクル
コンテナとは、一緒の仮想環境。
生成されてから停止されるまでのステータスを追っていく。
created
コンテナを生成する
docker create --name status-test -it alpine /bin/sh
そして、docker ps -a
で状態を見てみる
$docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d75e0580aa81 alpine "/bin/sh" 4 seconds ago Created status-test
ステータスはCreated
。
この状態ではまだコンテナは起動していない。
running
実際にコンテナを起動してみる。
$ docker start コンテナ名
で起動する
$ docker start status-test
status-test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d75e0580aa81 alpine "/bin/sh" 4 minutes ago Up 6 seconds status-test
ステータスが、Created
からUp 6 seconds
に変わりコンテナが起動されたことが確認できる。
paused
こんどは、start
で起動したコンテナを$ docker pause コンテナ名
停止させてみる
$ docker pause status-test
status-test
とりあえず成功。
肝心のステータスは、、、
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d75e0580aa81 alpine "/bin/sh" 8 minutes ago Up 4 minutes (Paused) status-test
Up
にはなっているがその横に(Paused)
の文字が。
一時停止状態になっていることが確認できます。
restarting
一時停止したコンテナを$ docker unpause コンテナ名
で再起動させてみます。
この状態で一瞬だけrestarting
になります!!
$ docker unpause status-test
status-test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d75e0580aa81 alpine "/bin/sh" 13 minutes ago Up 8 minutes status-test
一時停止時にあった (Pause)
の文字が消えてますね!ナイス!
そして、時間はstart
実行時のからカウントされてるみたいですね。
exited
exited
はコンテナが終了した状態を指す。(この状態だとコンテナ自体はまだ存在している。)
$ docker stop コンテナ名
を実行したときもこのステータスになる
$ docker stop status-test
status-test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d75e0580aa81 alpine "/bin/sh" 20 minutes ago Exited (137) About a minute ago status-test
ステータスがrunning
からExited
へ変更された。
$docker start
でまたrunning
状態へ戻すことができる。
removing
Dockerのコンテナ削除中を表すステータス。
通常は、コンテナ削除にそう時間を要さないためこのremoving
状態をみることはなかなかレア
コンテナ削除方法
停止中のコマンドの削除
$docker rm コンテナ名
起動中のコンテナの削除
強制的に削除する
$ docker rm -f コンテナ名
または
停止させてから削除コマンドを実行する
$ docker stop コンテナ名
$ docker rm コンテナ名
dead
コンテナが正常に終了できなかったときの状態
基本的に社会復帰させるのは不可能なので、迷わず削除!!削除!!削除!!
まとめ
paused dead
/ /
created -> running -> exited -> removing
\ /
restarting
上記のようなライフサイクルでコンテナのステータスは変化する。
exited
の状態をstart
で再起動させる場合は一度restarting
を経由する