🐶 はじめに
こんにちは、mikiです。
前職は理学療法士やフリーランスのニューボーンフォトカメラマンをしていましたが、
2025年1月よりIT業界へ飛び込みました。
現在は、PM・ディレクター・フルスタックエンジニア駆け出しとして、Webサイトやシステム開発に携わっています。
今回は、自分の運営する犬との暮らしブログ 「Moful」 を再構築する中で導入した Docker × WordPress 開発環境 について、
「なぜこの構成にしたのか」「どんな意図で設定したのか」を中心にまとめます🐾
エンジニアとしての成長を加速させるための備忘録でもあります。
拙い点や改善点などありましたら、ぜひコメントで教えてください🐾
📚 目次
- 🌼 前提
- 💡 なぜDockerでWordPressを動かすのか
- ⚙️ 設定を分けた理由
- 🧩 docker-compose.yml の設計意図
- 🧱 phpMyAdmin と MailHog を入れた理由
- 💬 最後に
🌼 前提
動作環境(推奨)
| ツール | バージョン |
|---|---|
| Docker Desktop | 4.x 以上 |
| Git | 2.40 以上 |
| OS | macOS |
| エディタ | Visual Studio Code 推奨 |
ディレクトリ構成
プロジェクトルートには、設定ファイルと永続化データ用のディレクトリを配置します。
docker-wordpress-template/
├── docker-compose.yml # コンテナ設定
├── php.ini # PHP 設定ファイル
├── .env.sample # 環境変数サンプル
├── .gitignore # 除外設定
├── README.md # 本ドキュメント
└── docker-data/
└── wordpress/
└── themes/
└── your-theme/ # 自作テーマをここに配置
利用できるサービス
| サービス名 | URL | 説明 |
|---|---|---|
| WordPress | http://localhost:8080 | メインサイト |
| phpMyAdmin | http://localhost:8081 | DB管理ツール |
| MailHog | http://localhost:8025 | メール送信テスト |
| MySQL | db:3306 |
データベースコンテナ |
💡 なぜDockerでWordPressを動かすのか
MAMP(またはXAMPP)を使ってローカル開発も視野に入れましたが、テンプレート化や、チーム開発や・番環境への移行時に以下の課題がありました。
- バージョンの不一致: PHP や MySQL のバージョンが環境(ローカル、本番、メンバーのPC)ごとに異なり、予期せぬエラーが発生する。
- 環境のブレ: 本番とローカルの環境構成がずれることで、動作が変わる「環境依存バグ」が生まれる。
- 管理の煩雑さ: MAMPではプロジェクトごとの環境切り替えや依存関係の管理が手間。
そこで、Dockerで環境をコード化して
「どのPCでも同じ開発環境を即再現できる」ようにしました。
⚙️ 設定を分けた理由
Docker Composeを使って、WordPress・MySQL・phpMyAdmin・MailHog の構成を分離しました。
| サービス | 役割 | 分離した理由 |
|---|---|---|
| WordPress | PHP実行環境 | アプリ本体を独立させ管理しやすくするため |
| MySQL | データベース | バージョンアップやデータ永続化を安全に行うため |
| phpMyAdmin | DB管理GUI | SQL操作をGUI化して確認しやすくするため |
| MailHog | メール送信テスト | 本番メールを誤送信しないため |
🔹 ポイント
- それぞれ独立コンテナ化で影響を最小化
-
depends_onで起動順を制御 - DBを
volumesで永続化
🧩 docker-compose.yml の設計意図
services:
# データベース(MySQL)
db:
image: mysql:latest
container_name: wordpress_db # 案件毎に適宜変更
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: wordpress # 案件毎に適宜変更
MYSQL_USER: wordpress_user # 案件毎に適宜変更
MYSQL_PASSWORD: wordpress_pass # 案件毎に適宜変更
volumes:
- db_data:/var/lib/mysql
# WordPress本体
wordpress:
image: wordpress:latest
container_name: wordpress_app # 案件毎に適宜変更
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress # 案件毎に適宜変更
WORDPRESS_DB_USER: wordpress_user # 案件毎に適宜変更
WORDPRESS_DB_PASSWORD: wordpress_pass # 案件毎に適宜変更
WORDPRESS_DEBUG: 1
volumes:
# 1. WordPressコアファイル用の名前付きボリューム
- wp_data:/var/www/html
# 2. PHP設定ファイルをマウント(dbから移動)
- ./php.ini:/usr/local/etc/php/conf.d/php.ini
# 3. テーマ、プラグイン、アップロードファイルのバインドマウント
- ./docker-data/wordpress/themes:/var/www/html/wp-content/themes
- ./docker-data/wordpress/plugins:/var/www/html/wp-content/plugins
- ./docker-data/wordpress/uploads:/var/www/html/wp-content/uploads
# phpMyAdmin(ブラウザでDB管理用)
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: wordpress_phpmyadmin # 案件毎に適宜変更
depends_on:
- db
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root_password
# MailHog
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025"
- "8025:8025"
volumes:
db_data:
wp_data:
🎯 WordPressポート設定
ports: - "8080:80"
→ 理由:
ローカルでLaravelやNext.jsを同時に動かすことを想定し、ポート衝突を避けるために 8080 を採用。
⚙️ php.ini の外部マウント
- ./php.ini:/usr/local/etc/php/conf.d/php.ini
→ 採用理由:
WordPress管理画面のメディアアップロード制限(2MB)を緩和するため。
php.ini に以下を記述👇
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 512M
max_execution_time = 300
display_errors = On
error_reporting = E_ALL
🎨 テーマフォルダのバインドマウント
- ./docker-data/wordpress/themes:/var/www/html/wp-content/themes
→ 理由:
VSCodeでテーマ開発を行うため、ホスト側でリアルタイム編集を反映。
🧱 phpMyAdmin と MailHog を入れた理由
- 🧰 phpMyAdmin
SQLが苦手でも、投稿データやオプション値をGUIで確認・編集できる。
削除ミスを防ぎ、開発効率を上げられる。 - 📮 MailHog
wp_mail() テスト時の誤送信を防止。
フォーム開発時のデバッグに最適。
💬 最後に
Dockerを導入することによって、どの環境でもブレがなく構築できるようになります。
この記事が、これからWordPressカスタマイズを始める方の参考になれば嬉しいです🐾
GitHubリポジトリ
こちらのREADME.mdに初期セットアップ方法の記載しています。
今回参考にさせていただいた記事(ありがとうございます!):
https://qiita.com/naritomo08/items/226ef6fb1c9368131b20