初心者のDocker入門3 - コンテナの基本操作

[前々回](http://qiita.com/queth/items/1297e77eece7706c1d36)、[前回](http://qiita.com/queth/items/18a0dcfd271e4dce7500)でDockerの概要に関して学んだので、今回はDocker Engineを使用してコンテナの基本操作に関してアウトプットしていきます。

#前提
以下の環境でコンテナの基本操作を試しています。

- Mac book Pro（OS X El Capitan)
- Docker for Mac（1.12.0-rc4）

#コンテナのライフサイクル
コンテナのライフサイクルは下記がわかりやすいです。
（自分でうまくライフサイクルの図を用意できませんでした...）
[Dockerにおけるコンテナのライフサイクル](http://enakai00.hatenablog.com/entry/20140628/1403933390)

#Dockerイメージとは
コンテナの基となるOS・ディレクトリ・ファイル・設定などがひとまとめになったもの。
Dockerイメージはコンテナから作成、もしくはDockerfileにコードを記述してビルドすることにより作成することができる。

#コンテナの作成 - docker create
コンテナを作成するには「docker create」コマンドを使用する。
コンテナの基となるDockerイメージを指定して、新しくコンテナを作成する。
あくまでコンテナを作成するだけで、「docker　create」コマンドを実行した段階ではコンテナは停止した状態。

```
# 使い方：docker create [オプション] イメージ [コマンド] [引数...]

# 実行例
$ docker create -i　-t --name centos centos:centos6 /bin/bash

# 実行結果（コンテナIDが表示される）
$ 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqr
```

実行例ではcentos6のイメージを基に、「centos」という名前のコンテナを作成。
また、オプションとして「-i」「-t」を、コンテナ起動時に実行するコマンドとして「/bin/bash」を指定している。

使用しているオプションの内容は以下の通り。

| オプション | 内容                               |
|:--------|:----------------------------------|
| -i      |アタッチしていなくても、STDINを開き続ける。   |
| -t      |疑似ターミナル（pseudo-TTY）を割り当てる。 　  |
| --name  |コンテナに名前を割り当てる。               |

コンテナに接続して作業を行う場合、オプション「-i」「-t」を指定する必要がある。

理由は、dockerでは指定したコマンドの実行が終わると、コンテナが停止してしまう。

そのため、実行例のようにコマンドに「/bin/bash」を指定した場合、オプション「-i」「-t」を指定しないとすぐにコマンドの実行が終了してしまうが、オプション「-i」を指定するとbashがSTDINを待ち続けるのでコンテナは起動し続ける。
また、オプション「-t」を指定することによって、コンテナに接続した際にターミナルを表示することが可能。

これでコンテナに接続した際にターミナルを表示させ、作業のために「cd」「ls」といったLinuxに標準的なコマンドもSTDINが開いているので実行することができるようになる。

#コンテナの起動 - docker start
指定した1つまたは複数のコンテナを起動するには「docker start」コマンドを使用する。

```
# 使い方：docker start [オプション] コンテナ [コマンド...]

# 実行例
$ docker start -i centos

# 実行結果
[root@0123456789ab /]#
```
実行例では「centos」という名前のコンテナを起動して、STDINにアタッチ。
コンテナに接続している。

使用しているオプションの内容は以下の通り。


| オプション | 内容                   |
|:--------|:----------------------|
| -i      |コンテナのSTDINにアタッチ   |

#コンテナの実行 - docker run
コンテナを実行するには「docker run」コマンドを使用する。
コンテナの基となるDockerイメージから、コンテナを作成→起動を行う。

動きとしては「docker create」→「docker start」を一度に行ってくれる。

```
# 使い方：docker run [オプション] イメージ [コマンド] [引数...]

# 実行例
$ docker run -i -t --name centos centos:centos6 /bin/bash

# 実行結果
[root@0123456789ab /]#
```

「コンテナの作成 - docker create」と同じく、上記実行例ではcentos6のイメージを基に、「centos」という名前のコンテナを作成、その後コンテナの起動を行っている。
コンテナ起動後、コンテナに接続してターミナルが表示される。
使用しているオプションの内容も「コンテナの作成 - docker create」と同じ。

もし、コンテナに接続する必要がなく、バックグラウンドで実行したい場合はオプション「-d」を指定する。

| オプション | 内容                                       |
|:--------|:-------------------------------------------|
| -d      |コンテナをバックグラウンドで実行し、コンテナ ID を表示。  |


#コンテナの停止 - docker stop
起動中のコンテナを停止させるには「docker stop」コマンドを実行する。

```
# 使い方：docker stop [オプション] コンテナ [コンテナ...]

# 実行例
$ docker stop centos

# 実行結果（停止したコンテナを表示）
centos
```

上記、実行例では「centos」という名前の起動中のコンテナを停止する。

#コンテナの削除 - docker rm
コンテナの削除を行うには「docker rm」コマンドを実行する。

```
# 使い方：docker rm [オプション] コンテナ [コンテナ...]

# 実行例
$ docker rm centos

# 実行結果（削除したコンテナを表示）
centos
```
上記、実行例では「centos」という名前のコンテナを削除している。
コンテナを削除するには、前もってコンテナを停止させている必要あり。

もし、実行中のコンテナを強制削除したい場合はオプション「-f」を指定する。


| オプション | 内容                                    |
|:--------|:---------------------------------------|
| -f      |実行中のコンテナを（SIGKILLを使い）強制的に削除。  |

#コンテナの情報を表示 - docker ps
存在するコンテナの情報を表示するには「docker ps」コマンドを実行する。

```
# 使い方：docker ps [オプション]

# 実行例
$ docker ps -a

# 実行結果
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
0123456789ab        centos:centos6      "/bin/bash"         1 minutes ago       Exited (0) 1 seconds ago                           centos
```

上記、実行例では起動・停止中のコンテナの情報を表示する。
オプション「-a」を指定すると停止中のコンテナの情報も表示する。指定しない場合は起動中のコンテナの情報のみ表示。

使用しているオプションの内容は以下の通り。


| オプション  | 内容                                          |
|:---------|:---------------------------------------------|
| -a       |全てのコンテナを表示 (デフォルトは実行中コンテナのみ表示)   |

#Dockerイメージの一覧表示 - docker images
Dockerイメージの一覧を表示するには「docker images」コマンドを実行する。

```
# 使い方：docker images [オプション] [リポジトリ[:タグ]]

# 実行例
$ docker images

# 実行結果
REPOSITORY     TAG        IMAGE ID       CREATED        SIZE
centos         centos6    012345689ab    7 weeks ago    194.6 MB
```

上記、実行例では取得済みイメージの一覧を表示する。
イメージを指定することにより、確認したいイメージの情報だけを表示可能。

#Dockerイメージの削除 - docker rmi
取得したDockerイメージの削除を行うには「docker rmi」を実行する。

```
# 使い方：docker rmi [オプション] イメージ [イメージ...]

# 実行例
$ docker rmi centos:centos6

# 実行結果
Untagged: centos:centos6
Deleted: sha256:0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqr

```
上記、実行例ではタグが「centos6」の「centos」という名前のイメージを削除している。

#参考URL
[Docker ドキュメント日本語化プロジェクト - Dockerコマンド](http://docs.docker.jp/engine/reference/commandline/index.html)

#次回
コンテナを実利用して簡単なシステムを作ってみたいと思います。