Docker Compose を使ってWordPress のテーマ開発環境をつくった

一体何番煎じの記事になるのか分からないが、Docker Compose を使用したwordpress のテーマ開発環境をつくってみた。

# この記事を読む対象の人
- Docker を使って間もない人
- WordPress のテーマ開発をDockerを使ってやりたい人
- Linux 環境でDocker Compose を使おうとしている人

# 環境
- Lubuntu 16.04 にDocker が既にインストールされている環境

Docker のインストール方法についてはこちら↓
https://qiita.com/shimisunet/items/b20d1cb45074486c026d

# Docker Compose とは
複数のDocker コンテナからなるサービスを構築・実行する手順をひとまとめに定義して自動化するという機能である。Docker Compose を使うことで、Docker を使用した環境構築が容易になる。
引用先↓
https://tech.recruit-mp.co.jp/infrastructure/post-11266/

# 新規でWordPress, MySQL の環境を構築する
既にDocker がインストールされていることを前提に書く。

ターミナルを起動させて、初めに、docker-compose をインストールする。

```zsh
sudo apt-get install docker-compose
```

任意の場所にディレクトリを作成する。

```zsh
mkdir wordpress(任意のディレクトリ名)
```

# docker-compose.yml の作成
作成したディレクトリ内に移動し、docker-compose.yml のファイルを作成する。任意のエディタで下記を追加。

```yml
version: '2'

services:
   db:
     image: mysql:latest
     volumes:
       - db_data:/var/lib/mysql
     environment:
       MYSQL_DATABASE: wordpress(任意のDB名)
       MYSQL_USER: wp_user(任意のユーザ名)
       MYSQL_PASSWORD: password(任意のパスワード)
       MYSQL_RANDOM_ROOT_PASSWORD: "yes"
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8080:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wp_user(上記で書いたDBのユーザ名)
       WORDPRESS_DB_PASSWORD: password(上記で書いたDBのパスワード)
volumes:
    db_data:
```

上の記述で設定していることは以下のとおり。

- MySQL、WordPress のバージョンのイメージ設定(```latest```で最新のバージョンをを取得するようにしている)。
- WordPress で使用するデータベース名、ユーザ名、パスワードの設定。
- WordPress で作成したサイトをブラウザで閲覧する際のポート番号(今回は8080を割り当てている)。
- WordPress で使用するデータベース名やパスワード。

## WordPress のテーマを開発するディレクトリをDocker のコンテナとマウントさせる
WordPress のテーマの開発をDocker のコンテナ内でコーディングするのは現実的に難しい。そこで、コーディングをしやすく、且つ管理しやすくするため、テーマ開発用のディレクトリをローカル環境に用意する。この用意したテーマ開発用のディレクトリを、ここではVolumeと呼ぶ。ローカル環境に用意したVolume をDocker のコンテナとマウントさせる。

Volume をDocker のコンテナをマウントさせるための設定は、WordPress の設定部分の記述に、```volumes:```以降を追加する。(2018年10月21日更新)

```yml
(上記省略)
wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8080:80"
     volumes:
       - ./themes/hoge:/var/www/html/wp-content/themes/hoge
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wp_user(上記で書いたDBのユーザ名)
       WORDPRESS_DB_PASSWORD: password(上記で書いたDBのパスワード)
```
この設定で、ローカル環境の```/themes/hoge``` というテーマ開発用ディレクトリをDocker のコンテナ内の```/var/www/html/wp-content/themes/hoge```にマウントさせている。
実際のテーマ開発は、ローカル環境の```(任意のディレクトリ)/themes/hoge```内で行う。
予め、ローカル環境に```/themes/hoge```は作成しておくこと。(2018年4月29日追記)

その後、下記のコマンドでDocker を立ち上げる。
オプション`-d`をつけることで、コンテナをバックグラウンドで動かすことができる。

```zsh
docker-compose up -d
```
ブラウザで、http://localhost:8080 を開く。
下記のようなWordPress のインストール画面が表示されたら成功。
![Screen Shot 2018-03-26 at 01.17.31.png](https://qiita-image-store.s3.amazonaws.com/0/215372/6ad48462-192a-91a2-0576-365ace9f5a9b.png)


## 補足
docker-compose.yml でmysql のimage を指定する部分で、`image:latest` にすると、現在、MySQLの5.7を取得してきます。
しかし、MySQL5.7 を使用するとコケてしまい、DB やWordPress に接続できないことがことがわかりました。
この記事を読んでDocker Compose でWordPress のテーマを開発したい方は、MySQL のイメージを取得する際、バージョンを5.6 に指定して環境を構築してください。(2018年7月31日追記)

```yml
version: '2'

services:
   db:
     image: mysql:5.6

```

# 参考URL
https://tech.recruit-mp.co.jp/infrastructure/post-11266/

ありがとうございました。
https://qiita.com/muk-ai/items/3350122d9e09473723c6