👋

Dockerでチーム開発しやすいWordPress環境を作りたい

2023/02/03に公開

目的

Dockerを使用して、WordPressの既存環境を手早くクローンできる環境 をつくること

理由

基本的にMAMPを用いて開発環境を作成していましたが、下記理由で開発時の効率にやや不満...

  • バーチャルホストの設定が面倒
  • 本番ドメインからバーチャルホストで設定したドメインへの置換が面倒
  • 他メンバーがプラグインやその設定を変更した場合、その変更を手動で反映しないといけない
  • 記事更新のスタイルが"ページ全体のHTMLタグをコピペして更新"なので、
    実装前に本番環境と開発環境のページ内文言に差分がないかチェックしないといけない。
    (先祖返りしてしまうため)

案件独自の仕様による部分もありますが、もっと楽に開発環境をアップデートしたい...!
というところで題名にいきついたわけですね。

環境構築

※Dockerはインストール済みという前提です。

基本的な流れは下記になります。

  1. docker-compose.ymlの作成
  2. 本番DBからSQLデータをエクスポート
  3. エクスポートしたSQLファイルを一部修正(site_urlなど)
  4. Docker コンテナ起動
  5. localhostに接続してページ確認

1.に関してはGit管理してしまえば特に気にする必要はなくなります。

また、docker-compose.ymlを作成するにあたってはDocker公式を参考にしました。

ディレクトリ構成は下記を想定します。

project
 ├ _build // ビルド系(docker-compose.yml, gulp, etc...)
    ├ docker/db/sqls/export.sql //本番DBのエクスポートデータ
 ├ _src // 開発ソース系(sass, js, ejs, etc...)
 └ dist // 公開ファイル系
   └ wp // WordPress関連ファイル。ルート直下に設置しない。

docker-compose.ymlの作成

"_build"ディレクトリ内にdocker-compose.ymlを作成し、下記を記述しました。

version: '3.8'

services:
  db:
    platform: linux/x86_64 // - ①
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: DBの名称
      MYSQL_USER: DBのユーザー名
      MYSQL_PASSWORD: DBのパスワード
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      # SQLデータを最新にする場合だけコメントイン
            # - ./docker/db/sqls:/docker-entrypoint-initdb.d // - ④
      - db_data:/var/lib/mysql

  wordpress:
    depends_on:
      - db
    image: wordpress:6.0.3-php7.4-apache  // - ②
    restart: always
    ports:
      - 8080:80
    volumes:
      - ../dist:/var/www/html
    working_dir: /var/www/html/wp   // - ③

volumes:
  db_data:

ファイル内の用語などについてはこの記事がとても参考になりました!

① MySQLコンテナを起動する際に、M1チップ搭載機の場合は追記が必要

公式より引用

ARM64 アーキテクチャー向けのイメージがすべて利用可能となっているわけではありません。 Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。

MySQLを使用したい場合は、Intel版にエミュレートすると良いらしい。

services:
  db:
    platform: linux/x86_64
    image: mysql:5.7

もしくはDocker公式のMySQLイメージではなく、
MySQLが公式で提供しているイメージを使用すればM1にも対応できる。
※ただし、設定に差異があるので検討が必要
参考記事

②既存環境をクローンしてくるならバージョンを指定する

// ↓最新バージョンのイメージ
wordpress:
    image: wordpress

// ↓バージョン指定する場合(WP6.0.3, PHP7.4)
wordpress:6.0.3-php7.4-apache

③ルート直下ではなく、サブディレクトリにWordPress関連ファイルを設置する場合に設定

④本番DBとデータを合わせる場合に記述

エクスポートしたsqlファイルのパスを指定することで、
それを読み込んでDockerの初期化処理に折り込んでくれる。

volumes:
    - ./docker/db/sqls:/docker-entrypoint-initdb.d // - ④
    // [sqlファイル設置パス]:docker-entrypoint-initdb.d

※ただし、記述をそのままにしていると起動するごとにVolumeに保持しているデータが初期化されてしまうので、必要なときのみ記述が必要。

本番DBからSQLファイルをエクスポート

使用しているサーバーに応じてクローンしたいDBからSQLファイルをエクスポートします。
後にSQLファイル内を一部書き換えるので、圧縮しない形が望ましいです。
エクスポートしたファイルを"_build/docker/db/sqls"に格納します。

エクスポートしたSQLファイルを修正

SQLファイルをエディターで開き、下記の部分を書き換えます。

// http://localhost:8080に置き換える
(1, 'siteurl', 'http://localhost:8080/wp', 'yes'),
(2, 'home', 'http://localhost:8080', 'yes'),

Docker コンテナ起動

Dockerアプリを起動しておき、docker-compose.ymlのあるディレクトリで、下記を実行

docker-compose up -d

localhostに接続してページ確認

下記にアクセスしてページが表示されるか確認。
※コンテナ起動からページが見れるまでタイムラグがある場合があります。

http://localhost:8080

補足

SQLファイルは不要であれば必ず削除しておく。
また、作業終了時はコンテナを消しておく。

docker-compose down

Discussion