開発用パソコンを新調してからXAMPPの調子が悪いため、今さらですがDockerを開発環境に使い始めました。
そこで今回は、複数人での開発も視野に入れたWordPressの開発環境を、Dockerで構築する方法をご紹介します。
Contents
Dockerとは
まずDockerとは、コンテナ型の仮想環境プラットフォームです。
従来のサーバ仮想化技術では、ホストOS上でハイパーバイザを利用し、ハードウェアのプロセッサやメモリを細かく分割し、それぞれに独立したゲストOSを動作させることで、複数の仮想マシンがあるようにみせています。
比較してコンテナ型と呼ばれるDockerでは、1つのホストOS上に「コンテナ」と呼ばれる他のユーザやプロセスから隔離されたアプリケーション実行環境を作り出します。
Dockerのメリット
メリットとしては、さきほど述べたように1つのホストOS上でコンテナが実行されるため、プロセッサやメモリの消費が少なく、ストレージの使用も抑えることができます。
そのため仮想マシンと比較して高速に起動し、軽量に動作することが可能です。
またDockerはミドルウェアの各種設定やインストールをコード化して管理します。
これにより、複数人でチーム開発する際にコード化した設定ファイルを共有することで、非常に簡単にチーム内での同じ環境の構築が可能になります。
そして、設定ファイルを変更することで容易に環境を変更することが可能です。
案件に合わせた環境作りが格段にスピードアップします。
他にも、コンテナ化することで本番環境への配布が容易になる等のメリットもありますが、今回は開発環境の構築に話の焦点を合わせるため、詳しい内容は省きます。
環境構築方法
前提条件
今回構築する環境の前提条件としては、複数人で開発することも視野に入れたWordPressのローカル開発環境を考えています。
開発環境の条件は以下の通りです。
- WordPress 最新版
- MySQL ver 5.7
- PHPMyAdmin ver 5.2
- docker-compose ver 3
Docker Desktopインストール
まずはDocker Desktopをインストールします。
WindowsまたはMac(Intelチップ版)、Mac(Appleチップ版)とそれぞれインストーラーがあるので、環境にあったものをダウンロードして、インストールします。
Windowsの場合は、別途WSL2が必要になります。
WSL2もあわせてインストールしてください。
docker-compose.ymlの作成
Docker Desktopのインストールが完了したら、任意のディレクトリにdocker-compose.yml
というファイル名でファイルを作成します。
このdocker-compose.yml
を作成したディレクトリが、プロジェクトのルートディレクトリとなるため、わかりやすい場所に、新しいディレクトリとして設置した方がいいでしょう。
docker-compose.yml
の内容は以下の通り記述してください。
version: '3'
services:
wordpress:
image: wordpress:latest
container_name: wp-container
depends_on:
- wordpress-db
ports:
- 8080:80
restart: unless-stopped
volumes:
- ./wp-content:/var/www/html/wp-content
env_file: .env
wordpress-db:
image: mysql:5.7
container_name: wpdb-container
restart: unless-stopped
env_file: .env
volumes:
- db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin:5.2
restart: unless-stopped
depends_on:
- wordpress-db
ports:
- 8081:80
env_file: .env
volumes:
db_data:
.envの作成
docker-compose.yml
と同じディレクトリに.env
というファイルを作成します。
こちらも内容は以下の通り記述してください。
# mysql
MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=wordpress_db
MYSQL_USER=wordpress_user
MYSQL_PASSWORD=wordpress_pass
# wordpress
WORDPRESS_DB_HOST=wordpress-db:3306
WORDPRESS_DB_NAME=wordpress_db
WORDPRESS_DB_USER=wordpress_user
WORDPRESS_DB_PASSWORD=wordpress_pass
# phpmyadmin
PMA_HOST=wordpress-db
PMA_USER=wordpress_user
PMA_PASSWORD=wordpress_pass
docker-compose.ymlの解説
それではdocker-compose.yml
で記述している内容の解説です。
WordPress
4行目のwordpress:
から14行目までがWordpressに関する記述です。
案件によってはWordPressのバージョンを指定する必要があるかもしれません。
その場合は5行目のwordpress:latest
を変更してバージョン指定します。
ディレクトリのマウント
以下のようにディレクトリのマウント設定をおこなっています。
volumes:
- ./wp-content:/var/www/html/wp-content
ホストのwp-content
ディレクトリをコンテナ上の/var/www/html/wp-content
へマウントしています。
これによりwp-content
ディレクトリの内部に関してはホストにコードを保ちながら、開発に関係のないWordPressのコアファイルはコンテナ内で完結します。
ホストで管理するファイルをwp-content
に絞ることで、Git等でソース管理するのにも役立ちます。
MySQL
16行目のwordpress-db:
から22行目までがWordpressに関する記述です。
データの永続化
データベース内のデータの永続化のために以下の設定をおこなっています。
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
通常、コンテナは破棄すると内部のデータもすべて破棄されます。
そのためデータベースのデータは、ボリュームと呼ばれる隔離した保存領域に保管する設定にします。
PHPMyAdmin
24行目のphpmyadmin:
から31行目までがPHPMyAdminに関する記述です。
PHPとMySQLの組み合わせを使う場合は、PHPMyAdminを使用することがほとんどなので、合わせてサービスに追加しています。
.envの解説
.env
ファイルには各サービスの環境変数を定義しています。
各サービスのenv_file: .env
という記述で、ファイルを指定しています。
PHPMyAdminのユーザ情報も記述しているため、PHPMyAdminではログイン不要でデータにアクセスができます。
コンテナの操作
コンテナの作成・起動
コマンドラインでdocker-compose.yml
を作成したディレクトリに移動し、以下のコマンドを実行します。
$ docker-compose up -d
これでコンテナとイメージが作成され、起動します。
起動に成功すれば、「http://localhost:8080」にアクセスすることで、WordPressの画面が表示されます。
また、「http://localhost:8081」にアクセスすることでPHPMyAdminが表示されます。
docker-compose.yml
を作成したディレクトリにあるwp-content
ディレクトリからテーマファイル等を編集することで、開発を進めることができます。
コンテナの停止
コンテナの停止には以下のコマンドを実行します。
$ docker-compose stop
コンテナの起動
停止したコンテナの起動には以下のコマンドを実行します。
$ docker-compose start
stop
ではコンテナが停止しているだけでコンテナを作成する必要はないため、start
で起動ができます。
コンテナの破棄
コンテナの破棄には以下のコマンドを実行します。
$ docker-compose down
コンテナを破棄すると、コンテナ内のデータも破棄されます。
しかし、wp-content
ディレクトリはホストのディレクトリでマウントされているため、破棄されることはありません。
同様にデータベースのデータもボリュームで永続化しているため、意図的にボリュームを破棄しない限りは残り続けます。