Dockerまとめ

## 導入
導入したPCがWindowsのため、Windowsをベースに説明します。
まずは[こちら](https://www.docker.com/products/docker-toolbox)からインストーラをダウンロードし、インストールします。
インストールすると、```Docker Quickstart Terminal```というショートカットができます。
※2016-07-20追記：Docker Toolboxなるものが出たようで、上記リンクをそちらに変更しました。

## ログイン
```Docker Quickstart Terminal```を起動すると、コマンドプロンプトが立ち上がります。
直接、```docker```コマンドを打ってもいいですし、

```
$ docker
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.

Options:
  -D, --debug=false                                                     Enable debug mode
  -d, --daemon=false                                                    Enable daemon mode
  -H, --host=[]                                                         Daemon socket(s) to connect to
  -h, --help=false                                                      Print usage
  -l, --log-level=info                                                  Set the logging level
　　・
　　・
　　・
    top       Lookup the running processes of a container
    unpause   Unpause a paused container
    version   Show the Docker version information
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.

$
```

または、```boot2docker ssh```コマンドでVMにログインしてから、```docker```コマンドを使うこともできます。

```
$ boot2docker ssh
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.6.2, build master : 4534e65 - Wed May 13 21:24:28 UTC 2015
Docker version 1.6.2, build 7c8fca2
docker@boot2docker:~$
```

## Dockerイメージからのサーバ作成
dockerイメージからサーバを作ってみます。仮にcentosをベースにサーバを作るとします。その場合、```docker search```コマンドを使うと簡単にdockerイメージを見つけることができます。

```
docker@boot2docker:~$ docker search centos
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                        The official build of CentOS.                   1094      [OK]
tutum/centos                  Centos image with SSH access. For the root...   13                   [OK]
blalor/centos                 Bare-bones base CentOS 6.5 image                9                    [OK]
torusware/speedus-centos      Always updated official CentOS docker imag...   6                    [OK]
million12/centos-supervisor   Base CentOS-7 with supervisord launcher, h...   5                    [OK]
jdeathe/centos-ssh            CentOS-6 6.6 x86_64 / EPEL Repo. / OpenSSH...   3                    [OK]
layerworx/centos              A general CentOS 6 image with the EPEL6 an...   2                    [OK]
jdeathe/centos-ssh-mysql      CentOS-6 6.6 x86_64 / MySQL.                    2                    [OK]
pdericson/centos              Docker image for CentOS                         0                    [OK]
nathonfowlie/centos-jre       Latest CentOS image with the JRE pre-insta...   0                    [OK]
```

野良Dockerイメージも多数いるとの情報もあるため、（企業で使う場合であれば特に）公式のイメージを使いましょう。今回はOFFICIALフラグが立っている「centos」を使います。

では早速。

```
docker@boot2docker:~$ docker pull centos
latest: Pulling from centos
c852f6d61e65: Pull complete
7322fbe74aa5: Already exists
f1b10cd84249: Already exists
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:a4627c43bafc86705af2e8a5ea1f0ed34fbf27b6e7a392e5ee45dbd4736627cc
Status: Downloaded newer image for centos:latest
docker@boot2docker:~$
```

そして、、、

```
docker@boot2docker:~$ docker run -i -t --name guest centos:latest /bin/bash
[root@557d34c7c799 /]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
[root@557d34c7c799 /]#
```

これでサーバが作成され、ログインできました。簡単すぎます。```exit```でログアウトできます。
一度ログアウトしてしまっても、```docker start```からの```docker attach```で再度ログインすることができます。しかし、```docker start```や```docker attach```する際には、コンテナIDなるものが必要です。コンテナIDは```docker ps```で調べられます。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

あれ？何も表示されないと驚いた方。```docker ps -a```と打ってみてください。

```
$ docker ps -a
CONTAINER ID        IMAGE                 COMMAND            CREATED             STATUS                       PORTS           NAMES
557d34c7c799        centos:latest         "/bin/bash"        24minutes ago       Exited (0) 15 minutes ago                    guest
・
・
・
```

表示されました。これはコンテナは存在するけど停止している状態です。コンテナを起動する際には```docker start [コンテナID]```と打ちます。
**え？？コンテナID？？この10桁以上の乱数みたいなやつ？？**
コンテナIDをいちいち入力するのが面倒かと思いますが、コンテナIDを一意に特定できるところまで入力すればOKです。地味にこの仕様、個人的にはイケてます。

```
$ docker start 557
557
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS           PORTS    NAMES
557d34c7c799        centos:latest       "/bin/bash"         30 minutes ago      Up 17 seconds             guest
```

```docker ps -a```ではなく、```docker ps```で無事にコンテナが表示されました。さらにコンテナにログインするには、```docker attach [コンテナID]```と打ちます。

```
$ docker attach 557
[root@557d34c7c799 /]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
```

無事にCentOSにログインできました。

## Dockerfileを使ってみる
Dockerfileのメンテナンス性を考えると、「boot2docker ssh」ではなく、「docker」コマンドを使うことの方が多いです。


（続く・・・）