2018年 Docker 使い方 まとめ その4
2019.01.12
この記事は最終更新日から1年以上が経過しています。

どもです。
前回の「2018年 Docker 使い方 まとめ その3」の続きになります。
今回は、コンテナの状態がどう移り変わっていくのか(ライフサイクル)と、コンテナのシェルへ接続する docker attach / docker exec まわりをまとめた形になります。
ちなみに Docker の公式サイトはこちら。
コンテナのライフサイクル
まずはコンテナを create で作成してみます。
$ docker create --name status-test -it alpine /bin/sh
ここで付けている -it オプションについて少し補足を。
-i… コンテナの標準入出力を取得して双方向に接続する-t… コンテナ内に tty を割り当てる
この2つはセットで -it として指定する場合が多いです(指定しないとシェルがすぐに終了してしまうので)。
Created 状態
作成した直後の状態を確認してみます。
$ docker ps -a
STATUS を見ると、まだ起動していない Created の状態になっています。
STATUS Created
Up(running)状態
スタートさせると running 状態になります。
$ docker start status-test
STATUS Up 7 seconds
詳細な状態は inspect でも確認できます。
$ docker inspect status-test
一時停止(Paused)
pause でコンテナを一時停止できます。
$ docker pause status-test
この状態で docker ps を見てみると、
$ docker ps
STATUS に (Paused) が付いた状態になっています。
STATUS Up About a minute(Paused)
こちらも inspect で確認できます。
$ docker inspect status-test
一時停止を解除するには unpause です。
$ docker unpause status-test
Exited 状態
続いて exit 状態も確認してみます。試しに hello-world を動かしてみます。
$ docker run hello-world
hello-world は処理が終わるとすぐに終了するので、STATUS は Exited になります。
STATUS Exited
その他の状態
このほかにも、
removing状態 … 削除中dead状態 … 異常
といった状態がありますが、こちらは余り見ることはないかと思います。
コンテナのシェルに接続する
さて、ここからはコンテナのシェルへ接続する方法です。docker attach と docker exec の2つがあります。
docker attach を使用する場合
$ docker attach <コンテナ名 または コンテナID>
※ただし、シェルに接続できるのは、コンテナでシェルを実行している場合のみとなります。
docker exec を使用する場合
$ docker exec -it <コンテナ名 または コンテナID> /bin/bash
※ここでは /bin/bash を実行していますが、bash が無い場合は別のシェルを指定してください。exec の場合は、exit で抜けてもコンテナは停止しません。
実際に試してみる
それでは実際に手を動かしてみます。まずは ubuntu のコンテナをバックグラウンドで起動。
$ docker run --name connect-test -it -d ubuntu /bin/bash
attach で接続した場合
$ docker attach connect-test
これでコンテナ内へ入れます。抜けるときは Ctrl + d や Ctrl + c です。
$ docker ps
docker ps で見ると status は起動中ですが……exit で抜けると、こちらは コンテナが停止してしまいます。
exec で接続した場合
もう一度スタートさせて、
$ docker start connect-test
今度は exec で接続してみます。
$ docker exec -it connect-test /bin/bash
こちらは exit で抜けてもコンテナは起動中のまま。なので、exec のほうが安全 ですね。
ではではぁ。
またまたぁ。












