こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。
WordPressのプラグインや自作テーマを作成したい場合、ローカル環境にWordPressを構築すると思います。
みなさんはWordPressのローカル開発環境はどのように構築していますでしょうか?
WordPressのローカル開発環境といえば、MAMPやXAMPが有名だと思います。
しかし、MAMP・XAMPを利用してWordPressの開発環境を用意する場合、『MAMP・XAMPのインストール → WordPress用DBの構築 → WordPressのインストール…』と結構手間がかかります。
また、ローカル開発環境に直接ツールをインストールすることになるので、開発環境を複数用意したい場合は面倒ですし、開発環境の破棄・再構築も気兼ねなく実行できません。
MAMP・XAMPに変わる手段として、個人的にはDockerをオススメします。
Dockerはコンテナ型の仮想環境ですので、開発環境の破棄・再構築がとても楽に行えます。
また、MAMP・XAMPで行なっていたWordPressの開発環境構築の手順も、Dockerの場合であればdocekr-compose.ymlというファイルを作成するだけで完了します。
そこで今回はDockerによるWordPressのローカル開発環境の構築方法について紹介したいと思います。
なお、今回はDockerコマンドが実行できるmacOS環境という前提で説明をおこないます。
もし手元の環境でDockerが利用できない場合はDocker Desktopをインストールしてください。
- Docker Composeを利用した開発環境の構築方法について知りたい
- ローカルに簡単にWordPressの開発環境を用意したい
- WordPress x Dockerの開発環境を作りたい
目次
今回作成するWordPressの開発環境について
まずはじめに今回作成するWordPressの開発環境の全体像について説明をします。
今回作成するWordPressの開発環境はWordPressが実行される『wordpressコンテナ』、MySQLが実行される『dbコンテナ』、データベースの情報を保存する『mysql_data』というデータボリュームで構成されています。
データボリュームとコンテナのライフサイクルはそれぞれ独立しており、コンテナを削除してもデータボリュームは削除されないのが特徴です。
図で表現すると以下のようになります。
図にも記載をしていますが、WordPressからMySQLへ接続する際の設定は以下のようにします。
WordPressのDB接続設定
変数 | 値 |
host | db |
name | wordpress |
user | wp_user |
password | wp_password |
port | 3306(デフォルト) |
バージョンは、WordPressは5.2.2、MySQLは5.7を利用します。
wordpressコンテナとdbコンテナは複数のコンテナを起動設定を一元管理できるDocker Composeを利用して連携させます。
DockerによるWordPress開発環境の構築手順
ではDockerを利用したWordPressの開発環境の具体的な構築手順について紹介をしたいと思います。
といっても、やることは実質Docker Composeの設定ファイルであるdocker-compose.ymlを作成するだけです。
まずは開発環境用のディレクトリの作成と移動をしておきます。今回はmy_wordpressという名前にします。
$ mkdir my_wordpress && cd $_
作業ディレクトリ配下にdocker-compose.ymlを作成します。
docker-compose.yml
version: '3'
services:
wordpress:
image: wordpress:5.2.2-php7.3-apache
ports:
- '80:80' # ローカルのport80でコンテナのport80にアクセスできるようにする
volumes:
- ./wp-content:/var/www/html/wp-content
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db # データベースコンテナ名と一致させる
WORDPRESS_DB_NAME: wordpress # MYSQL_DATABASEと一致させる
WORDPRESS_DB_USER: wp_user # MYSQL_USERと一致させる
WORDPRESS_DB_PASSWORD: wp_pass # MYSQL_PASSWORDと一致させる
db:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_pass
volumes:
mysql_data:
上記のdocker-compose.ymlに記載された内容をもとにwordpressコンテナとdbコンテナが起動します。
以下ではdocker-compose.ymlに記載された設定について解説をしたいと思います。
imagesについて
imagesではコンテナを起動する際に利用するDockerイメージを指定することができます。
wordpressコンテナはwordpress:5.2.2-php7.3-apache、dbコンテナはmysql:5.7を利用しています。
それぞれ、DockerHubで公式のDockerイメージとして公開されているものです。1 2
Dockerでは公式のDockerイメージを活用することで開発環境の準備をグッと楽にすることができます。
environmentについて
コンテナ内で利用する環境変数はenvironmentで定義します。
wordpressコンテナにはWordPressの初期設定の内容、dbコンテナにはWordPressで利用するデータベース設定を記載しています。
なお、dbコンテナの『MYSQL_ROOT_PASSWORD』は必須項目ですので忘れずに記載するようにしましょう。3
また、wordpressコンテナとdbコンテナの環境変数が正しく設定されていないとデータベース接続エラーになりますので、きちんと環境変数を一致させるようにしましょう。
今回は説明を省略しますが、環境変数はdocker-compose.ymlとは別のファイルで管理することでよりセキュアになります。
dbのvolumesについて
データベースの情報は/var/lib/mysql
に保存されます。
mysql_data:/var/lib/mysql
と定義することでmysql_dataというデータボリューム名(名前付きデータボリューム)で、データベースの情報を保存することができるようになります。
データボリュームにデータベースの情報を保存させることでコンテナ削除後もデータが残り続けます。
wordpressのvolumesについて
wordpressコンテナでは./wp-content:/var/www/html/wp-content
と記載することで、コンテナの/var/www/html/wp-content
ディレクトリとローカル環境の./wp-content
を同期(マウント)しています。
wp-contentディレクトリはWordPressのコンテンツ類が入るディレクトリです。
ディレクトリのマウントをしなくてもWordPressの開発環境は構築できますが、同期をしておくことでローカルの変更がDockerに反映されるため(逆も同様)、開発が進めやすくなります。
Docker Composeを利用したWordPressの起動方法
Docker Composeを利用したコンテナはdocker-compose
コマンドで操作できます。
まずはWordPressの開発環境を起動してみます。
$ docker-compose up
プロセスを確認するとコンテナが起動していることがわかります。
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------
my_wordpress_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
my_wordpress_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:80->80/tcp
初回起動時はlocalhost:80
にアクセスすると以下のような言語選択の画面が開きます。
言語選択後、初期情報の入力画面が表示されるので、WordPressの管理者情報を入力しましょう。
ここで入力するユーザー情報等はdocker-compose.ymlで定義したデータベース接続設定の情報と異なっていても問題ありません。
入力が完了すると『ログイン』ボタンがあるので、さっそくWordPressのダッシュボード(管理画面)に入れるか確認してみましょう。
以下のようなダッシュボードにログインできればOKです。
初期設定が正しく完了すると、localhost:80
にアクセスすると、以下のようなブログのトップページに接続されるようになります。
なお、データボリュームはdocker volume
コマンドで確認できます。
結果をみてわかるとおり、my_wordpress_mysql_data
という名前でデータベースの情報が永続化されていることがわかります。
DRIVER VOLUME NAME
local my_wordpress_mysql_data
また、ローカル環境の./wp-content
はDocker環境のディレクトリと同期されているため、コンテナ起動後ローカル環境からWordPressのコンテンツ情報が確認できます。
$ cd wp-content
$ ls
index.php languages plugins themes upgrade uploads
Docker環境のWordPressの削除方法
コンテナの削除は以下のようにします。
$ docker-compose down
データベースの情報はデータボリュームで永続化されています。
ですので、コンテナを削除してもデータベースの情報は削除されずに残り続けます。
例えば、『新規記事を作成 → コンテナ削除 → コンテナ起動』という手順で開発をしても、記事情報は保存され続けます。
もし、永続化したデータベース情報もコンテナとあわせて削除したい場合は以下のようにします。
$ docker-compose down --volumes
まとめ: 開発環境はDockerを使って楽に構築をしよう
以上でDockerを利用したWordPressのローカル開発環境構築手順について紹介を終わります。
Dockerは非エンジニアの方にはあまり馴染みがないツールかもしれませんが、開発環境を簡単に作成・破棄できるので知っておいて損はないです。
もし、Dockerについてよく知らないという方はこの機会に勉強してみてはいかがでしょうか。
初学者向けのDockerの参考書としては以下の『プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化』がオススメです。
Dockerのコマンドを図解も含めながら丁寧に書かれています。ぼくの愛読書のうちの1冊です。
- DockerによるWordPress開発環境構築では、WordPressとMySQLのイメージファイルを利用
- 公式のDockerイメージを活用することで開発環境構築が楽になる
- 開発環境の操作はdocker-composeコマンドで行う
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!