Docker pull commit push Dockerfile WordPress環境をつくる～Docker Compose～ 新コマンド編

[Docker pull commit push Dockerfile WordPress環境をつくる 新コマンド編](https://qiita.com/cyberblack28/items/7ed6fbc75503bf9418b3)では、一つのコンテナーにApache、MySQLをインストールする形式でしたが、Docker Composeを利用すると、ApacheとMySQLのコンテナーをそれぞれ作成し、連携することが簡単に行えます。

中小規模のコンテナーシステムにおいて、WEB、APP、DB等の役割に分けてコンテナーを作成する場合に便利なので、WordPressコンテナーとMySQLコンテナーを分けて、連携するDocker Composeの入門をやってみたいと思います。

[Docker pull commit push Dockerfile WordPress環境をつくる](http://qiita.com/cyberblack28/items/e3fb956f584094341c62)の続きですので、環境は以下同じです。

環境：VirtualBoxの仮想マシン上にCentOS7を初期インストールまたはパブリッククラウドでCentOS7のインスタンスを準備

# Dockerのインストール

## 1.Dockerのインストール

必要なパッケージのインストール

```lang:コマンド
# yum install -y yum-utils device-mapper-persistent-data lvm2
```

リポジトリの追加

```lang:コマンド
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

最新版のDockerをインストール

```lang:コマンド
# yum install -y docker-ce
```

※今回は、最新版のDockerで行いますが、参考までにバージョン指定のインストールも記します。

＜参考＞
バージョン指定する場合

バージョンの確認

```lang:コマンド
# yum list docker-ce --showduplicates | sort -r
 * updates: ftpmirror.your.org
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
 * extras: mirror.san.fastserv.com
 * epel: mirror.pnl.gov
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.1.ce-3.el7                   @docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable 
 * base: mirrors.syringanetworks.net
Available Packages
```

バージョン指定インストール（例としてdocker-ce-17.06.0.ce-1.el7.centos）

```lang:コマンド
# yum install docker-ce-17.06.0.ce-1.el7.centos
```

## 2.Dockerの自動起動設定及びサービスの起動

```lang:コマンド
# systemctl enable docker.service
# systemctl start docker.service
```

## 3.Dockerのバージョンを確認

```lang:コマンド
# docker version
```

## 4.システム情報の確認

```lang:コマンド
# docker info
```

# Docker Composeのインストール

## 1.Docker Composeのインストール

```lang:コマンド
# curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```

ダウンロードしたバイナリに対して実行権限を追加します。

```lang:コマンド
# chmod +x /usr/local/bin/docker-compose
```

Docker Composeのバージョンを確認して、インストールができたことを確認してみます。

```lang:コマンド
# docker-compose -v
docker-compose version 1.22.0, build f46880fe
```

# docker-compose.ymlファイルの作成

## 1.docker-compose.ymlファイルの作成

```lang:コマンド
# vim docker-compose.yml
ファイル内容は事項参照
:wq
```

```lang:docker-compose.yml
version: '2'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     env_file: .env

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
     env_file: .env

volumes:
    db_data:
     driver: local
```

docker-compose.ymlの詳細は、[こちら](http://docs.docker.jp/compose/compose-file.html)！！

## 2..envファイルの作成

WordPressとMySQLは公式のイメージを使用します。WordPressとMySQLのDB設定は、.envファイルを作成して、読み込むようにします。

```lang:コマンド
# vim .env
ファイル内容は事項参照
:wq
```

```lang:.env
MYSQL_ROOT_PASSWORD=somewordpress
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress
```

# WordpressコンテナーとMySQLコンテナーの起動

## 1.WordpressコンテナーとMySQLコンテナーの起動

-dオプションを付けてコンテナーをバックグラウンドでの起動する必要があります。

```lang:コマンド
# docker-compose up -d
```

「http://VirtualBoxのIPアドレス:8080/」または「http://パブリッククラウドグローバルIPアドレス:8080/」にアクセスし、WordPressの管理画面が表示されることを確認

## 2.Volunesの確認

docker-compose.ymlの最終行でdriver:localとすると、ホストLinuxの/var/lib/docker/volumes/以下に「docker volume」コマンドで確認した「volumes名」でディレクトリが作られます。

MySQLのコンテナー内:「/var/lib/mysql」
ホストLinux:「/var/lib/docker/volumes/build_wordpress_db_data/_data」

1.volume名の確認

```lang:コマンド
# docker volume ls
DRIVER              VOLUME NAME
local               4a6d8907ab34c9796f837ed39bc8837403a026df79dd72865b2cd7d228b05a86
local               build_wordpress_db_data
```

2.Linuxホストの以下ディレクトリでtestという空ファイルを作成

```lang:コマンド
# touch /var/lib/docker/volumes/build_wordpress_db_data/_data/test
# ls /var/lib/docker/volumes/build_wordpress_db_data/_data/
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql               private_key.pem  server-cert.pem  sys   wordpress
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem   server-key.pem   test
```

3.MySQLのコンテナID確認

```lang:コマンド
# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
574093a3ab15        wordpress:latest    "docker-entrypoint.s…"   27 minutes ago      Up 27 minutes       0.0.0.0:8080->80/tcp   build_wordpress_wordpress_1
f8d4df440dd7        mysql:5.7           "docker-entrypoint.s…"   27 minutes ago      Up 27 minutes       3306/tcp, 33060/tcp    build_wordpress_db_1
```
4.MySQLコンテナーの中からも確認

```lang:コマンド
# docker container exec -it f8d4df440dd7 /bin/bash
root@f8d4df440dd7:/# ls /var/lib/mysql
auto.cnf    client-cert.pem  ib_logfile0  ibtmp1              private_key.pem  server-key.pem  test
ca-key.pem  client-key.pem   ib_logfile1  mysql               public_key.pem   sys             wordpress
ca.pem      ib_buffer_pool   ibdata1      performance_schema  server-cert.pem
```
5.コンテナーでもtest2という空ファイルを作成して、Linuxホストから確認

```lang:コマンド
root@f8d4df440dd7:/# touch /var/lib/mysql/test2
root@f8d4df440dd7:/# ls /var/lib/mysql
auto.cnf    client-cert.pem  ib_logfile0  ibtmp1              private_key.pem  server-key.pem  test2
ca-key.pem  client-key.pem   ib_logfile1  mysql               public_key.pem   sys             wordpress
ca.pem      ib_buffer_pool   ibdata1      performance_schema  server-cert.pem  test
root@f8d4df440dd7:/# exit
```

6.Linuxホストで確認

```lang:コマンド
# ls /var/lib/docker/volumes/build_wordpress_db_data/_data/
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql               private_key.pem  server-cert.pem  sys   test2
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem   server-key.pem   test  wordpress
```

※volumeのディレクトリは、docker-compose down -v, docker-compose rm -vなど-vオプションを指定することによって削除できます。

## 3.主なdocker-composeコマンド

主なdocker-composeコマンドは以下となります。

| コマンド       | 説明 |
|:-----------------|:------------------|
| up             |コンテナーの生成/起動|
| down             |全てのコンテナーの停止と同時削除|
| scale           |生成するコンテナー数の指定|
| ps             |コンテナーの一覧表示|
| logs               |コンテナーログの出力|
| run               |コンテナーの実行|
| start             |コンテナーの起動|
| stop          |コンテナーの停止|
| restart          |コンテナーの再起動|
| kill          |実行中コンテナーの強制停止|
| rm          |コンテナーの削除|

docker-composeコマンドの詳細は、[こちら](http://docs.docker.jp/compose/reference/overview.html)！！

参考サイト

- [docker-compose を使って WordPress テーマ開発環境を構築しよう](https://tech.recruit-mp.co.jp/infrastructure/post-11266/)
- [Compose ファイル・リファレンス](http://docs.docker.jp/compose/compose-file.html)
- [docker-compose コマンド概要](http://docs.docker.jp/compose/reference/overview.html)