Docker + nginx-proxy + PHP7 on Apache + MySQL5.7 で WordPress の環境を作る　その1


とある事情で「WordPressのサイトを短期間で複数立ち上げる」という案件がありまして、何とか楽する方法がないかと調べていたら、この秋から冬にかけて PHP7 や MySQL5.7 がリリースされたりしていて、だったら全部まとめてやったれ！ということで、まとめてみました。ごった煮になってしまい分かりにくい点もあると思いますが、ご了承ください。また、説明では /tmp ディレクトリで作業をしていますが、時間が経ったり再起動したりするとファイルが消えてしまう場合があります。消したくない場合は違うディレクトリで作業してください。

# Dockerの環境を作る

詳しくは[こちら](http://qiita.com/ABE_TAKASHI/items/2b04cf4c70f28b864134)にまとめましたので、こちらを参照ください。Dockerの環境があればこの作業は不要です。

# nginx-proxy を立ち上げる

サイトを複数立ち上げるとなると、ポート番号でアクセス先を切り替えたりするのは、ごちゃごちゃして大変です。ドメインを使えるようにする場合は、Docker + nginx-proxy で管理するのが楽そうです。[こちら](http://knowledge.sakura.ad.jp/tech/3142/)を参考にして、nginx および nginx-gen コンテナを立ち上げました。

```shell-session:
[docker-op@docker-base ~]$ docker run -d -p 80:80 --name nginx -v /tmp/nginx:/etc/nginx/conf.d -t nginx
（出力略）

[docker-op@docker-base ~]$ mkdir -p /tmp/templates && cd /tmp/templates

[docker-op@templates]$ curl -o nginx.tmpl https://raw.githubusercontent.com/jwilder/docker-gen/master/templates/nginx.tmpl
（出力略）

[docker-op@templates]$ docker run -d --name nginx-gen --volumes-from nginx \
   -v /var/run/docker.sock:/tmp/docker.sock \
   -v /tmp/templates:/etc/docker-gen/templates \
   -t jwilder/docker-gen:0.3.4 -notify-sighup nginx -watch \
   --only-published /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
```

Dockerのプロセスを確認して、2つのプロセスが立ち上がっているのが確認できれば、準備オッケーです。

![009.png](https://qiita-image-store.s3.amazonaws.com/0/104477/fa2ff26e-7713-a5e4-fd7b-ecd81d07d7e4.png)

# OPCache と GD (と mbstring）入りの PHP7 on Apache イメージの作成

※2016年8月14日追記
最新のWordPressのDockerfileを見ると、OPCacheとGDを別にインストールする記述が追加されていました。以下の手順は冗長のようです。ただ、そのDockerfileにmbstringの追加はありませんので、日本語環境の場合はmbstringはインストールしておいた方が良いと思います。

---

PHP7 で WordPress を動かす場合、OPCache（キャッシュ使用で高速化）と GD（画像の投稿時にサイズの変更）の拡張は組み込みたいところです。PHPの公式からイメージを落として再ビルドし、OPCache と GD 入りの PHP7 Dockerのイメージを作成します。[こちら](http://qiita.com/castaneai/items/6e7ad08f88de1466c607)を参考しながらやってみました。他に必要なのもあるかもしれませんが、たぶんこれと同じ方法でできると思います。

基本的には、以下のような Dockerfile を任意のディレクトリ内に作成して、ビルドします。

```shell-session:
[docker-op@~]$ mkdir -p /tmp/php7-build && cd /tmp/php7-build

[docker-op@/tmp/php7-build]$ vi Dockerfile
```

```diff:Dockerfile
FROM php:7-apache

RUN apt-get update && \
apt-get install -y libpng12-dev libjpeg-dev && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr && \
docker-php-ext-install gd opcache mbstring

CMD ["apache2-foreground"]
```

※2015年12月13日追記
mbstring を追加しました。検索時に使うようですね。これ以外にも必要なライブラリあるかもしれませんね…

```shell-session:
[docker-op@/tmp/php7-build]$ docker build -t abe-local/php7-gd-opcache .
（出力略）

[docker-op@/tmp/php7-build]$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
abe-local/php7-gd-opcache   latest              593598d2a27b        3 minutes ago       533.4 MB
php                             7-apache            f5f858022dc5        3 days ago          521.4 MB
```

何をやっているかややこしいですかね。「abe-local/php7-gd-opcache」と指定しているところは、「今回作成するイメージ名」ですので、任意の好きな名前をつけてください。後ほど利用します。

やってることは、公式の php:7-apache のイメージを落としてきて、そのまま docker-php-ext-install で gd をインストールすると libpng や lib-jgeg がなくてビルドが通りません。なので、apt-get で先に libpng12-dev と libjpeg-dev を落としてきて、さらに docker-php-ext-configure で ライブラリパスを設定してから gd をインストールするとビルドが通るようになります。apt-get なんて書くのは普段 ubuntu とかに触ることがほとんどない自分にとっては久々でした。

# PHP7 + OPcache + GD 入りの WordPress イメージの作成

こちらもWordPress公式のDockerイメージを使用しますが、2015年12月9日現在では PHP5.6 を使用していますので、こちらを先ほど作ったイメージ名（ここでは「abe-local/php7-gd-opcache」）に差し替えて、ビルドを行います。

```shell-session:
[docker-op@~]$ mkdir -p /tmp/wordpress-build && cd /tmp/wordpress-build

[docker-op@/tmp/wordpress-build]$ git clone https://github.com/docker-library/wordpress/

[docker-op@/tmp/wordpress-build]$ vi wordpress/apache/Dockerfile
```

```bash:Dockerfile
FROM php:5.6-apache
↓
FROM abe-local/php7-gd-opcache
```

```shell-session:
[docker-op@/tmp/wordpress-build]$ docker build -t abe-local/wordpress-php7 ./wordpress/apache
（出力略）

[docker-op@/tmp/wordpress-build]$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
abe-local/wordpress-php7    latest              0401735c8900        18 seconds ago      561.9 MB
abe-local/php7-gd-opcache   latest              593598d2a27b        28 minutes ago      533.4 MB
```

「abe-local/wordpress-php7」というのも任意の名前です。自分の好きな名前をつけてください。後ほど利用します。

長くなってきたので、その2へ続きます。
[Docker + nginx-proxy + PHP7 on Apache + MySQL5.7 で WordPress の環境を作る　その2](http://qiita.com/ABE_TAKASHI/items/036179ec1d92be47c9d6)