LoginSignup
20
13

More than 5 years have passed since last update.

Docker入門 コンテナのライフサイクル

Last updated at Posted at 2018-10-15

コンテナのライフサイクル

コンテナとは、一緒の仮想環境。
生成されてから停止されるまでのステータスを追っていく。

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を経由する

20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13