MAMP・XAMPはもう古い?DockerでWordPressのローカル開発環境を一瞬で作成する方法

WordPress

こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。

WordPressのプラグインや自作テーマを作成したい場合、ローカル環境にWordPressを構築すると思います。

みなさんはWordPressのローカル開発環境はどのように構築していますでしょうか?
WordPressのローカル開発環境といえば、MAMPXAMPが有名だと思います。

しかし、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』というデータボリュームで構成されています。

データボリュームとは1つまたは複数のDockerコンテナ内でデータの共有・再利用をするために設計された特別なディレクトリです。

データボリュームとコンテナのライフサイクルはそれぞれ独立しており、コンテナを削除してもデータボリュームは削除されないのが特徴です。

Dockerのデータを永続化!Data Volume(データボリューム)の理解から始める環境構築入門

2019年8月17日

図で表現すると以下のようになります。

図にも記載をしていますが、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とは別のファイルで管理することでよりセキュアになります。

Dockerで利用する環境変数をenv_fileを利用して一元管理する方法

2019年8月9日

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言語選択

言語選択後、初期情報の入力画面が表示されるので、WordPressの管理者情報を入力しましょう。
ここで入力するユーザー情報等はdocker-compose.ymlで定義したデータベース接続設定の情報と異なっていても問題ありません。

WordPress初期設定

入力が完了すると『ログイン』ボタンがあるので、さっそくWordPressのダッシュボード(管理画面)に入れるか確認してみましょう。

WordPress完了画面

以下のようなダッシュボードにログインできればOKです。

WordPressダッシュボード画面

初期設定が正しく完了すると、localhost:80にアクセスすると、以下のようなブログのトップページに接続されるようになります。

WordPress Hello World

なお、データボリュームは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)のフォローもよろしくお願いします!