WordPressを動かすのに便利なphp-fpmのDockerコンテナ

言うまでもなくWordPressはPHPで動いているわけですが、このPHPという輩、何かにつけセキュリティホールが見つかってバージョンがどんどん変わっていくのはご存じのとおりです。ならば、パッケージでインストールしておいて、都度アップデートしていけばいいじゃないか、と考えたくなるわけですが……たとえばCentOSとかですと、公式のリポジトリでは未だにバージョン5.4とかいう、ちょっとふざけんなと言いたくなるくらい古いものを使わざるを得ないのが現状だったりします。
ちなみに、WordPressはPHP5からPHP7に変えるとパフォーマンスが2倍以上上がるというのはよく言われていることなので、できればぜひともPHP7を使いたいところです。かといって、非公式のリポジトリ(remiとか)に頼るのも、何となく不安……と思うのは、私だけでしょうか。

最新のPHPを公式のイメージで、しかもいつでも手軽にバージョンを変えることができるように運用する。そんな便利な方法のひとつとして、php-fpmをDockerコンテナで動かす、という手があります。以下、その方法についてざっくりとご紹介します。

なお、前置きとして

  • WebサーバはNginxを使用、php-fpmで動作するように設定済み
  • Dockerはすでにインストール済み

とします。この辺りから説明するのは、さすがに大変ですので……。

で、WordPressを動かすコンテナを作るのが、以下のスクリプトです。

#!/bin/bash
PHP_VERSION='7.1.xx'
CON_IMAGE="php:$PHP_VERSION-fpm"
CON_NAME="php-fpm_${PHP_VERSION}"
rm -rf /var/run/php-fpm/*
docker run --name $CON_NAME \
  -v /etc/php.ini:/usr/local/etc/php/php.ini \
  -v /etc/php-fpm.conf:/usr/local/etc/php-fpm.conf \
  -v /etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf \
  -v /var/log/php-fpm:/home \
  -v /var/run/php-fpm:/var/run \
  -v /etc/localtime:/etc/localtime:ro \
  -v /home/hogehoge:/home/hogehoge \
  -v /var/lib/mysql:/var/lib/mysql \
  --restart="always" \
-d $CON_IMAGE > /dev/null 2>&1
echo 'preparing to start php-fpm container. please wait...'
docker exec $CON_NAME apt-get update
docker exec $CON_NAME apt-get install -y sendmail --no-install-recommends --no-install-suggests
docker exec $CON_NAME apt-get install -y libpng12-0 libpng12-dev libjpeg62-turbo libjpeg62-turbo-dev libwebp5 \
libwebp-dev
docker exec $CON_NAME /usr/local/bin/docker-php-ext-install mysqli
docker exec $CON_NAME /usr/local/bin/docker-php-ext-configure gd --with-jpeg-dir=/usr/lib/x86_64-linux-gnu \
--with-webp-dir=/usr/lib/x86_64-linux-gnu --with-png-dir=/usr/lib/x86_64-linux-gnu
docker exec $CON_NAME /usr/local/bin/docker-php-ext-install gd
docker restart $CON_NAME > /dev/null 2>&1
echo 'php-fpm container started.'

内容をざっくり説明しますと、

  • /var/runをリンクしているのは、Nginxとソケットで通信するためです。もちろん、その旨はphp-fpmのconfにも書いておく必要がありますが、たぶんTCP通信の設定をするよりは楽だと思います。
  • ホームディレクトリは「/home/hogehoge」のところを適宜変更してください。
  • WordPressで使えるように、mysqliとgdをインストールしています。
  • コンテナホスト側でmail()が使えないので、sendmailもインストールしています。WordPressからメールを出す場合は、「WP Mail SMTP」のようなSMTPを話すプラグインを導入する必要があります。

こんなところでしょうか。ちなみに、今日現在でのPHPの最新バージョンは7.2.2ですが、いくら最新のイメージが使えるといっても、WordPressで使う場合は7.2系にするのはしばらく待った方がよいです。なぜかと言えば、7.2系になってからPHPの文法チェックがかなり厳しくなったため、今まで目こぼしされていたミスやdeprecatedとなった部分がWarningとしてボロボロと画面を埋めるようになってしまったからです。そんな7.2系に未対応のプラグインなどを使っていると、管理画面がめちゃめちゃになったりします(初めて見たときは焦りました……)。そういうわけで、(あくまで今日現在で)7.2系はおすすめしません。

といったところで、どこかでどなたかのお役に立てば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください