2026年11月6日

2026年11月6日

WordPressのDocker開発環境を構築する方法【docker-compose完全設定】

はじめに

Dockerを使ったWordPress開発環境は、チーム全員が同一環境で開発できる・本番環境に近い構成を再現できる・環境構築の手間を大幅削減できるという三つの大きなメリットがあります。この記事ではdocker-compose.ymlを使ってWordPress・MariaDB・phpMyAdminを含む完全な開発環境を構築する方法から、本番デプロイを見据えたマルチステージビルドまで解説します。

症状・原因

  • ローカル環境と本番環境のPHPバージョンやMySQL設定の違いで動作が異なる
  • 開発メンバーそれぞれが異なる環境で開発しており「自分の環境では動く」問題が発生する
  • 新メンバーのオンボーディングに時間がかかっている

解決手順

ステップ1:docker-compose.ymlの基本設定

プロジェクトルートにdocker-compose.ymlを作成します。

# docker-compose.yml
version: '3.8'

services:
  # MariaDBデータベースサービス
  db:
    image: mariadb:10.11
    container_name: wp_db
    restart: unless-stopped
    # データの永続化(コンテナ削除後もDBデータを保持)
    volumes:
      - db_data:/var/lib/mysql
      - ./docker/mysql/conf.d:/etc/mysql/conf.d  # カスタムMySQL設定
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      - wp_network

  # WordPressサービス
  wordpress:
    build:
      context: .
      dockerfile: docker/wordpress/Dockerfile  # カスタムDockerfile
    container_name: wp_app
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "8080:80"  # ホストの8080ポートでアクセス
    volumes:
      # テーマ・プラグインのソースコードをマウント
      - ./wp-content/themes:/var/www/html/wp-content/themes
      - ./wp-content/plugins:/var/www/html/wp-content/plugins
      - ./wp-content/uploads:/var/www/html/wp-content/uploads
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DEBUG: 1
    networks:
      - wp_network

  # phpMyAdmin(DB管理画面)
  phpmyadmin:
    image: phpmyadmin:5.2
    container_name: wp_phpmyadmin
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "8081:80"  # ホストの8081でアクセス
    environment:
      PMA_HOST: db
      PMA_USER: ${MYSQL_USER}
      PMA_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      - wp_network

volumes:
  db_data:

networks:
  wp_network:
    driver: bridge

ステップ2:テーマ・プラグイン開発のためのボリュームマウント

# プロジェクトのディレクトリ構造
project/
├── docker-compose.yml
├── docker-compose.prod.yml  # 本番用オーバーライド
├── .env                     # 環境変数ファイル(.gitignoreに追加)
├── docker/
│   ├── wordpress/
│   │   └── Dockerfile
│   └── mysql/
│       └── conf.d/
│           └── my.cnf
└── wp-content/
    ├── themes/
    │   └── my-theme/        # ← このディレクトリをマウント
    └── plugins/
        └── my-plugin/       # ← このディレクトリをマウント
# .env ファイルの例(.gitignoreに必ず追加)
MYSQL_ROOT_PASSWORD=rootpassword_change_me
MYSQL_DATABASE=wordpress
MYSQL_USER=wp_user
MYSQL_PASSWORD=wp_password_change_me

# WordPress設定
WORDPRESS_TABLE_PREFIX=wp_

ステップ3:環境変数によるDB認証情報とWordPress設定

# docker/mysql/conf.d/my.cnf
[mysqld]
# 文字コードをutf8mb4に設定(絵文字対応)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 最大パケットサイズ(大きな投稿データ対応)
max_allowed_packet = 64M

# スロークエリログ(開発時のSQL最適化に有効)
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mysql/slow.log
# コンテナの起動
docker compose up -d

# ログの確認
docker compose logs -f wordpress

# WordPressコンテナ内でWP-CLIを実行
docker compose exec wordpress wp --info
docker compose exec wordpress wp core install \
    --url=http://localhost:8080 \
    --title="開発サイト" \
    --admin_user=admin \
    --admin_password=admin \
    --admin_email=admin@example.com

ステップ4:PHP拡張を追加するカスタムDockerfile

# docker/wordpress/Dockerfile
FROM wordpress:6.5-php8.2-apache

# 追加するPHP拡張のインストール
RUN apt-get update && apt-get install -y \
    # 画像処理(ImageMagick)
    libmagickwand-dev \
    # Redisクライアント
    libhiredis-dev \
    # ZIP処理
    libzip-dev \
    && docker-php-ext-install zip exif \
    && pecl install imagick redis \
    && docker-php-ext-enable imagick redis \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# php.ini の設定(開発用)
COPY docker/wordpress/php-dev.ini /usr/local/etc/php/conf.d/php-dev.ini

# WP-CLIのインストール
RUN curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
    && chmod +x /usr/local/bin/wp

# エントリーポイントスクリプト
COPY docker/wordpress/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
; docker/wordpress/php-dev.ini(開発環境用PHP設定)
[PHP]
; エラー表示を有効化
display_errors = On
error_reporting = E_ALL

; メモリ制限を増加
memory_limit = 256M

; ファイルアップロードサイズ
upload_max_filesize = 64M
post_max_size = 64M

; 実行タイムアウト
max_execution_time = 300

ステップ5:本番向けマルチステージビルドとヘルスチェック

# Dockerfile.prod(本番用マルチステージビルド)

# ステージ1: 依存関係のインストール
FROM composer:2 AS composer
WORKDIR /app
COPY composer.json composer.lock ./
# 開発依存を除外してインストール
RUN composer install --no-dev --optimize-autoloader --no-interaction

# ステージ2: 本番イメージの構築
FROM wordpress:6.5-php8.2-fpm-alpine AS production

# セキュリティ: 不要なパッケージを除外
RUN apk add --no-cache \
    libzip \
    imagemagick \
    && docker-php-ext-install zip exif opcache

# OPcacheの設定(本番用)
COPY docker/wordpress/opcache.ini /usr/local/etc/php/conf.d/

# Composerでインストールした依存関係をコピー
COPY --from=composer /app/vendor /var/www/html/vendor

# 本番用php.ini
COPY docker/wordpress/php-prod.ini /usr/local/etc/php/conf.d/

# ヘルスチェック設定
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD wp --info --path=/var/www/html || exit 1

# 非rootユーザーで実行
USER www-data
# docker-compose.prod.yml(本番オーバーライド)
version: '3.8'

services:
  wordpress:
    build:
      dockerfile: Dockerfile.prod
    restart: always
    # 本番ではポートを公開しない(Nginxリバースプロキシ経由)
    ports: []
    environment:
      WORDPRESS_DEBUG: 0

  db:
    restart: always
    # 本番では外部に公開しない
    ports: []

注意事項

  • .envファイルの管理: .envファイルは絶対にGitにコミットしない。.env.exampleをサンプルとしてリポジトリに含め、実際の値はCI/CDシステムや秘密管理ツールで注入する。
  • ボリュームのパーミッション: wp-content/uploadsのパーミッションがwww-dataと合わない場合、docker compose exec wordpress chown -R www-data:www-data /var/www/html/wp-content/uploadsで修正する。
  • 本番環境への適用: 開発用docker-compose.ymlをそのまま本番に使わない。本番用にはマルチステージビルド・ヘルスチェック・リソース制限を設定する。

まとめ

Docker + docker-composeによるWordPress開発環境は、一度構築すればdocker compose up -dの一コマンドでチーム全員が同一環境を立ち上げられる強力なツールです。カスタムDockerfileでPHP拡張を追加し、マルチステージビルドで本番イメージを最適化することで、開発から本番まで一貫した環境管理が実現できます。関連記事:WordPress on Kubernetesのクラスター構成と運用方法

お気軽にご相談ください

お見積りへ お問い合わせへ
▲