Dockerコンテナの作成、起動〜停止まで

今回はDocker Hubからイメージを取得し、コンテナを作成した後に起動/停止といった一連の流れを行います。

## 1.イメージの確認
`docker images`コマンドを実行すると、Docker Machineに保存されているイメージを確認できます。
<pre>
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
</pre>
何も保存されていないので現在はリストされていいるものがありません。

それではイメージの取得を行いましょう。

## 2.イメージの取得
今回はDocker Hubにあるubuntuリポジトリからコンテナイメージを取得します。
取得は`docker pull <REPOSITORY>`コマンドで行えます。
<pre>
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
0a85502c06c9: Pull complete 
0998bf8fb9e9: Pull complete 
a6785352b25c: Pull complete 
e9ae3c220b23: Pull complete 
Digest: sha256:f91f9bab1fe6d0db0bfecc751d127a29d36e85483b1c68e69a246cf1df9b4251
Status: Downloaded newer image for ubuntu:latest
</pre>
以上で取得が完了しました。再度イメージの確認をするとREPOSITORYが"ubuntu"という名前のイメージが取得されているのが確認できます。
<pre>
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              e9ae3c220b23        6 days ago          187.9 MB
</pre>
このコマンドは実行したタイミングで[https://hub.docker.com/_/ubuntu/](https://hub.docker.com/_/ubuntu/)にある最新のものを取得しています。


## 3.コンテナの作成
まず、`docker ps`コマンドで現在のコンテナの稼働状況を確認します。
<pre>
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
</pre>
現状、ひとつも稼働していないため、何も表示されません。
それでは、先ほど取得したイメージ(ubuntu)からコンテナを作成します。
<pre>
$ docker run -it ubuntu
root@0b5aad08487b:/# 
</pre>
上記のコマンドを実行すると作成と同時にコンテナも起動し、そのタイミングで自動的にログインします。

また、ログイン状態を抜けるには"_control_"を押した状態で"_P、Q_"を順番に押します。
この抜けることを「dettach(デタッチ)」と呼びます。
サーバからログアウトする感覚で`exit`コマンドを実行すると、起動したコンテナも停止してしまうので注意してください。

それでは、"_control + P、Q_"で抜けた後に再度`docker ps`コマンドで稼働状況を確認します。
<pre>
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0b5aad08487b        ubuntu              "/bin/bash"         10 minutes ago      Up 10 minutes                           big_hawking
</pre>
STATUSがUPになっているのが確認できます。

先ほどdettachしたubuntuコンテナに再度ログインするには、`docker attach <CONTAINER IDまたはNAME>`を実行します。
<pre>
$ docker attach 0b5aad08487b

root@0b5aad08487b:/# 
</pre>
または、
<pre>
$ docker attach big_hawking
root@0b5aad08487b:/# 
</pre>

それでは一旦、`exit`コマンドでコンテナを抜けて停止させましょう。
<pre>
root@0b5aad08487b:/# exit
exit
</pre>
確認してみると表示されなくなりました。
<pre>
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
</pre>
これは`docker ps`コマンドが「現在稼働中のコンテナのみを表示する」からです。
"_-a_"オプションを付けることで、停止中のも含めて全てのコンテナを表示します。
<pre>
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0b5aad08487b        ubuntu              "/bin/bash"         26 minutes ago      Exited (0) 4 minutes ago                       big_hawking
</pre>
ここでは停止しているのでSTATUSがExitedとなっています。
「Exited=停止」という意味です。


## 4.コンテナの起動
コンテナイメージを作成した後は`docker start <CONTAINER IDまたはNAME>`で起動することができます。
<pre>
$ docker start 0b5aad08487b
0b5aad08487b
</pre>
または、
<pre>
$ docker start big_hawking
big_hawking
</pre>

STATUSがUpとなり、起動しているのが確認できます。
<pre>
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0b5aad08487b        ubuntu              "/bin/bash"         31 minutes ago      Up 3 seconds                            big_hawking
</pre>


## 5.コンテナの停止
起動と同様に、`docker stop <CONTAINER IDまたはNAME>`で停止することができます。
<pre>
$ docker stop 0b5aad08487b
0b5aad08487b
</pre>
または、
<pre>
$ docker stop big_hawking
big_hawking
</pre>

STATUSがExitedとなり、停止しているのが確認できます。
<pre>
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0b5aad08487b        ubuntu              "/bin/bash"         38 minutes ago      Exited (0) 9 seconds ago                       big_hawking
</pre>

また、`docker start`コマンドで起動させた場合でも、`docker attach`後に`exit
`コマンドで抜けると停止します。
<pre>
$ docker attach big_hawking
root@0b5aad08487b:/# 
</pre>
<pre>
root@0b5aad08487b:/# exit
exit
</pre>
<pre>
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0b5aad08487b        ubuntu              "/bin/bash"         42 minutes ago      Exited (0) 4 seconds ago                       big_hawking
</pre>

以上、コンテナの作成、起動〜停止までの基本的な操作方法です。