Dockerで「CentOS+WordPress+Apache+MySQL5.7」の環境を作る
今回は、DockerでWordPressの環境を整える方法を備忘録としてまとめる。
もし、「とりあえずDockerでWordPressが動けばいいや」と言うのであれば、公式で紹介されている「クイックスタート・ガイド:Docker Compose と Wordpress — Docker-docs-ja 17.06.Beta ドキュメント」を参考にすると簡単に環境構築ができる。
しかし、Docker公式で用意されているWordPressは英語版だったりOSはUbuntuを使っている等、必ずしも自分の理想的な環境を用意してくれていない。
なので、今回の方法で以下の環境を作っていく。
- WordPress日本語版
- PHP 7.2.28
- Apache 2.4.6
- MySQL 5.7
僕の開発環境
- Mac 10.14.6
- Docker version 19.03.5
なお、今回はDockerはすでに導入済みの前提で話を進めていく。もし、Dockerをインストールしていなければ、「Get started with Docker Desktop for Mac | Docker Documentation」の公式ページからインストールしよう。
Dockerfileの作成
まずはDockerのイメージを作成するためのDockerfileを作成する。現在のディレクトリにDockerfile
と言うファイルを作成し、以下のコードを書く。
FROM centos:7
# update yum & 必要な物をインストール
RUN yum -y update
RUN yum -y install yum-utils openssl tar wget epel-release
RUN yum clean all
# 今回はphp7をインストールしたいので、必要なremiリポジトリをインストール
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN rpm -Uvh remi-release-7*.rpm
RUN yum-config-manager --enable remi-php72
RUN \
yum -y install \
httpd \
php \
php-common \
php-mbstring \
php-mcrypt \
php-devel \
php-xml \
php-mysqlnd \
php-pdo \
php-opcache --nogpgcheck \
php-bcmath
RUN yum clean all
RUN mkdir /app
WORKDIR /app
# WordPress日本語版を公式サイトからインストール
RUN curl -LO https://ja.wordpress.org/latest-ja.tar.gz
RUN tar xvzf latest-ja.tar.gz -C /var/www/html --strip-components=1
RUN rm latest-ja.tar.gz
RUN chown -R apache:apache /var/www/
RUN echo "ServerName localhost" >> /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
やっていることは、CentOSでLANP+WordPress環境を整えるのとほぼ同じ事を行っている。
ポイントはRUN chown -R apache:apache /var/www/
とサーバーのディレクトリの所有者をApacheに変更する事と、EXPOSE 80
でポート番号80を解放する事。最後にCMD ["/usr/sbin/httpd","-D","FOREGROUND"]
でApacheを起動し続けるようにする事だ。
Dockerfileの書き方については「Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント」が詳しい。
docker-composeを作成
次にdocker-compose.yml
と言うファイルを作成し、以下のコードを書く。
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
build: .
env_file: .env
depends_on:
- db
ports:
- 8080:80
volumes:
- ./themes:/var/www/html/wp-content/themes
- ./plugins:/var/www/html/wp-content/plugins
- ./wp-config.php:/var/www/html/wp-config.php
volumes:
db_data:
ポイントは、以下のvolumes
の部分。以下のように書く事で、現在のディレクトリにあるthemes
ディレクトリと、Dockerコンテナ内の/var/www/html/wp-content/themes
をリンクしてくれるようになる。
また、Dockerのコンテナは再起動するたびにWordPressのwp-config.phpが削除されるので、wp-config.phpも自身で作成してvolumesに入れるようにしている。
volumes:
- ./themes:/var/www/html/wp-content/themes
- ./plugins:/var/www/html/wp-content/plugins
- ./wp-config.php:/var/www/html/wp-config.php
wp-config.phpはWordPress公式を参考に以下のように書けば良い。(結構省略している)
<?php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', getenv("DB_NAME"));
/** MySQL database username */
define('DB_USER', getenv("DB_USER"));
/** MySQL database password */
define('DB_PASSWORD', getenv("DB_PASSWORD"));
/** MySQL hostname */
define('DB_HOST', getenv("DB_HOST"));
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
また、docker-composeはenv_file: .env
と買う事で、現在のディレクトリにある.env
を読み取って環境変数として取り込んでくれる。
.env
は以下のように記述しておいた。
DB_HOST=db:3306
DB_USER=wordpress
DB_PASSWORD=wordpress
DB_NAME=wordpress
今回はdb
とwordpress
と言う名の2つのコンテナを立ち上げており、感覚的には2つのサーバーを立てている状態になっている。
Dockerのネットワークのシステムはシンプルに作られており、db:3306
とする事でdb
コンテナと接続できるようになる。(3306
の部分はポート番号)
参考:Docker入門(第五回)〜コンテナ間通信〜 | さくらのナレッジ
なお、環境変数を指定する際にDB_HOST=db:3306
のように書いているが、"db:3306"
のようにクオーテーションマークは使えないからだ。(参考:環境ファイル — Docker-docs-ja 17.06.Beta ドキュメント)
WordPressを起動する
ここまでくれば、後は以下の2つのコマンドを実行するだけでOK。
docker-compose build
docker-compose up -d