LOADING

BLOG

HOME > BLOG > 技術 > 環境構築 > Docker > Dockerを使ったWordPressの開発環境構築方法

Dockerを使ったWordPressの開発環境構築方法

DockerPHPWordPress技術環境構築

開発用パソコンを新調してからXAMPPの調子が悪いため、今さらですがDockerを開発環境に使い始めました。

そこで今回は、複数人での開発も視野に入れたWordPressの開発環境を、Dockerで構築する方法をご紹介します。

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ディレクトリはホストのディレクトリでマウントされているため、破棄されることはありません。

同様にデータベースのデータもボリュームで永続化しているため、意図的にボリュームを破棄しない限りは残り続けます。