Dockerを使ってWordPressの動くウェブサーバーを立ち上げる

WordPressを使うことにしました。しかし、既存のCentOS7で動かそうとしたところ、WordPressの要件(PHP7やMySQL)を整えることができませんでした。そこでdockerで仮想環境を用意してやってみました。

dockerイメージのインストール

# yum install docker
# docker pull docker.io/wordpress
# docker pull docker.io/mysql:5.7  # 最新版(8)では認証が超えられなかった

コンテナの作成

MySQLを起動

コンテナの名前はmy-db、データベースのパスワードはxxxとしました。 データベースが使用するディレクトリをホストのディレクトリ(/anywhere/mysql)にしました。 データベースをイメージの中にいれないことで、ディレクトリまるごとのバックアップがとりやすくなります。

# docker run -d --name my-db --env=MYSQL_ROOT_PASSWORD=xxx \
    --volume /anywhere/mysql:/var/lib/mysql \
    --restart unless-stopped \
    docker.io/mysql:5.7

WordPressを起動

WordPressのプラグインやテーマをいれるときに、直接ファイルを操作できたほうが便利なのですが、docker内のファイルを操作するのは面倒で、コンテナ内ではviも使えません。そこでWordPressのファイルをdockerの外に出すようにしました。

一旦dockerのイメージを作成し、WordPressのファイルをdockerの外へコピーして、それをマウントするようにしました。

コンテナの名前はmy-wpとして作成しました。DocumentRootが/var/www/htmlで、これもホスト側から操作しやすいようにしました。ホストの8000ポートをWordPressのイメージの80番ポートにつないでWordPressにアクセスできるようにしました。

# docker run -d --name my-wp wordpress # 一旦つくる
# docker cp my-wp:/var/www/html /anywhere/    # docker内のファイルを外へコピー
# docker rm my-wp    # 削除。前もってstopが必要だったかも。
# docker run -d --name my-wp \
    --publish 8000:80 \
    --volume /anywhere/html:/var/www/html \
    --link my-db:mysql \
    --restart unless-stopped \
    wordpress

WordPressの設定

http://host.ip.address:8000/ に適当なブラウザでアクセスして、設定を行います。必要な項目は管理者名、そのパスワード、ウェブサイトの名前ぐらいです。

WordPressのバージョンアップ

dockerイメージを更新しました。

# docker pull docker.io/wordpress
# docker stop my-wp
# docker rename my-wp my-wp.old # 現在のコンテナの名前を変更する。
# mv /anywhere/html /anywhere/html.old
# docker run -d -name my-wp wordpress    # 新しいコンテナを作成
# docker cp my-wp:/var/www/html /anywhere/    # docker内のファイルを外へコピー
# docker rm my-wp    # 削除
# cp -r /anywhere/html.old/wp-content/{plugin,theme,uploads} /anywhere/html
# cp -r /anywhere/html.old/wp-config.php /anywhere/html    # .htaccessも同様にコピー
# docker run -d --name my-wp wordpress    # その他オプションは上と同じなので省略

新しいコンテナに接続するとデータベースの更新を行いますというメッセージが表示されました。
たぶん必要なファイルはこのぐらいだったと思いますが、足りない場合はエラーメッセージを見て適宜修正します。
/anywhere/html のアクセス権がたびたび引っ掛かります。chown -R :33 /anywhere/html; chmod -R g+w /anywhere/html としておくといいです。

サーバーの設定

php.ini

php.iniは/usr/local/etc/php/におきます。最初は無いのでphp.ini-productionをコピーします。

# docker cp my-wp:/usr/local/etc/php/php.ini-production ./php.ini
# vim php.ini
# upload_max_filesize = 2M を 8Mに修正。post_max_sizeはもともと8M
# docker cp php/php.ini my-wp:/usr/local/etc/php/
# docker restart my-wp