docker-compose on CentOS7構築手順

## 概要
CentOS7上にdocker-composeの実行環境を作ってみたメモ。
db,web,web2の３つのコンテナを作成し、web2コンテナからdbコンテナへリンクさせます。

## 関連記事
この記事の内容に、リバースプロキシとロードバランシングの機能を加えたものは下記。
[docker-compose + リバースプロキシ + ロードバランシングの環境構築手順メモ](http://qiita.com/Esfahan/items/91f01368a37abf83cf25)

## 環境
- CentOS 7.1
- docker-engine (Docker 1.12.3)
- docker-compose 1.8.1


## docker-engine, docker-composeのインストール
下記を参照
[docker(docker-engine), docker-composeのインストール](http://qiita.com/Esfahan/items/aa5802548ee42d8a98de)

## docker-compose.ymlの作成
作成したいコンテナの情報をdocker-compose.ymlに記述します。
今回は、db,web,web2の３つのコンテナを作成します。
役割は下記の通りです。

| コンテナ名 | 役割 | リンク先 | イメージ元 |
| :-- | :-- | :-- | :-- |
| db | dbサーバ | - | 既存のmysql:latest |
| web | webサーバ | - | 既存のnginx:latest |
| web2 | webサーバ | db | 自作のDockerfileをbuild |

今回は、各種ファイルをホームディレクトリの直下に作成していますが、他の場所でも構いません。
ディレクトリ構成は適宜変更してください。

### docker-compose.yml

docker-compose.ymlを作成

```
$ vi ~/docker-compose.yml
```

```lang:~/docker-compose.yml
db:
    image: mysql:latest
    environment:
        MYSQL_DATABASE: sample_db
        MYSQL_USER: sample
        MYSQL_PASSWORD: sample_password
        MYSQL_ROOT_PASSWORD: sample_root_password
web:
    image: nginx:latest
    # パスをボリュームとしてマウント {ホスト側:コンテナ側}
    volumes:
        - ./nginx:/usr/share/nginx/html
    ports:
        - 8080:80

web2:
    build: ./web
    # リンク先コンテナ {コンテナ名:エイリアス名}
    links:
        - db:db-server
    ports:
        - 8081:80
```

### 「web」コンテナに設置するファイルの作成
index.htmlの作成

```
$ mkdir ~/nginx
$ vi ~/nginx/index.html
```

```lang:~/nginx/index.html
Hello, docker-compose from index.html:8080.
```

### 「web2」コンテナ用のDockerfile、設置するファイルの作成
Dockerfileの作成

```
$ mkdir ~/web
$ vi ~/web/Dockerfile
```

```lang:~/web/Dockerfile
FROM centos:7
MAINTAINER Iam <xxxx@xxxx.xx>
RUN yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx
RUN yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
RUN yum install -y mysql-community-client
ADD index.html /usr/share/nginx/html/
ADD sample.html /usr/share/nginx/html
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
```

Dockerfileの内容を変更した場合はリビルドが必要

index.htmlの作成

```
$ vi ~/web/index.html
```

```lang:~/web/index.html
Hello, docker-compose from index.html:8081.
```

sample.htmlの作成

```
$ vi ~/web/sample.html
```

```lang:~/web/sample.html
Hello, docker-compose from sample.html:8081.
```

## コンテナの起動
docker-compose.ymlに書かれたコンテナを起動する

```
$ docker-compose up -d
```

ビルドもする場合

```
$ docker-compose up -d --build
```

## 動作確認
### webページの表示確認
それぞれhtmlの内容が取得できるか確認

```
$ curl localhost:8080
Hello, docker-compose from index.html:8080.

$ curl localhost:8081
Hello, docker-compose from index.html:8081.

$ curl localhost:8081/sample.html
Hello, docker-compose from sample.html:8081.
```

### dbコンテナとリンクしているか確認

#### web2
今回dbコンテナにリンクさせたweb2コンテナに入り、mysqlコマンドでdbコンテナに接続できるか確認。

web2コンテナに入る

```
$ docker exec -it {web2のコンテナID} bash
```

envコマンドで、dbコンテナへの接続情報を取得

```
# env | grep DB_SERVER_PORT_3306_TCP_ADDR
DB_SERVER_PORT_3306_TCP_ADDR=172.17.0.2
```

mysqlコマンドで、dbコンテナへ接続

```
# mysql -u sample -p -h $DB_SERVER_PORT_3306_TCP_ADDR sample_db
Enter password: sample_passowrd
```


## コンテナの停止と削除

コンテナの停止、また停止したコンテナの削除を行う

```
$ docker-compose down
```

以上

[参考]
[そろそろDockerを始めないとやばいと思い始めたあなたへ](http://tech.respect-pal.jp/docker_tutorial/)
[Docker Compose - docker-compose.yml リファレンス](http://qiita.com/zembutsu/items/9e9d80e05e36e882caaa)
[docs.docker.com](https://docs.docker.com/compose/rails/)