「WordPress」をDockerで環境構築、WP本体をドキュメントルート直下ではなくサブディレクトリ配置する場合やphp.iniカスタムについても解説

【簡単】WordPress環境をDockerで構築手順

1)作業フォルダを作成

2)1)内に「docker-compose.yml」を作成

version: "3.7"
services:
 db:
  image: mysql:8.0
  container_name: mysql8
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: password # rootユーザのパスワード
    MYSQL_DATABASE: db_local # WordPress用データベース名
    MYSQL_USER: wp_user # WordPress用データベース接続ユーザ名
    MYSQL_PASSWORD: password # WordPress用データベース接続パスワード
 WordPress:
  image: wordpress:latest
  container_name: wordpress
  restart: always
  depends_on:
     - db
  ports:
     - 10090:80
  environment:
    WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
    WORDPRESS_DB_USER: wp_user # WordPress用データベース接続ユーザ名(dbの内容に合わせる)
    WORDPRESS_DB_PASSWORD: password # WordPress用データベース接続パスワード(dbの内容に合わせる)
    WORDPRESS_DB_NAME: db_local # WordPress用データベース名(dbの内容に合わせる)
    WORDPRESS_DEBUG: 1 # デバッグモードON
  volumes:
    - ./wp-content:/var/www/html/wp-content
  #    - ./html:/var/www/html
 phpmyadmin:
  image: phpmyadmin/phpmyadmin:latest
  container_name: phpmyadmin_ingrid
  restart: always
  depends_on:
     - db
  ports:
     - 10099:80

volumesは画像のパス等にあわせてください

ボリュームマウントの概念

Dockerコンテナは、デフォルトで隔離された環境を提供します。これにより、コンテナ内のファイルシステムはホストマシンから独立しています。しかし、多くの場合、ホストマシン上のファイルやディレクトリをコンテナ内で直接利用したい場合があります。このような場合にボリュームマウントが使用されます。

ボリュームマウントの構文は以下の通りです

volumes:
  - <ホストのパス>:<コンテナのパス>
Host Machine ./wp-content/ themes/ plugins/ uploads/ languages/ WordPress Container /var/www/html/wp-content/ themes/ plugins/ uploads/ languages/

3)作業ディレクトリにて下記コマンド

docker-compose up -d

多少時間がかかるかもしれません。

4)「Docker Desktop」で確認

エラーログの確認方法

1. Dockerコンテナ内でWordPressのエラーログを有効化

まず、WordPressのwp-config.phpにエラーログを有効にする設定を追加します。

phpコードをコピーするdefine('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

この設定により、エラーログがwp-content/debug.logに保存されます。

2. Dockerコンテナ内でエラーログを確認する

方法1: docker-compose execでコンテナ内に入って確認

Dockerコンテナ内に直接アクセスして、エラーログを確認することができます。

bashコードをコピーするdocker-compose exec <コンテナ名> bash

コンテナ内に入ったら、エラーログファイルにアクセスします。

bashコードをコピーするcat /var/www/html/wp-content/debug.log

<コンテナ名> は、WordPressが稼働しているコンテナの名前に置き換えてください。

方法2: docker-compose logsでコンテナのログを直接表示

WordPressやApache/Nginxのエラーログは、コンテナの標準出力にも表示される場合があります。以下のコマンドでログ全体を確認できます。

bashコードをコピーするdocker-compose logs -f <コンテナ名>

上記コマンドで、リアルタイムにエラーログを追跡しながら確認できます。

方法3: ログファイルをホストマシンにマウント

Dockerのdocker-compose.ymlファイルで、WordPressのwp-contentディレクトリをホストマシンと共有すると、ホスト側で直接debug.logを確認できます。たとえば、以下のように設定を変更します。

yamlコードをコピーするservices:
  wordpress:
    volumes:
      - ./wp-content:/var/www/html/wp-content

これにより、./wp-content/debug.logでホスト側からログを確認できるようになります。

「php.ini」の設定で、WordPressのアップロード制限やメモリ使用量を設定する方法

1)docker-compose.ymlの環境変数で設定

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
      PHP_UPLOAD_MAX_FILESIZE: 128M
      PHP_POST_MAX_SIZE: 128M
      PHP_MEMORY_LIMIT: 128M

2)カスタムPHP設定ファイルをマウントする方法

php.iniを作成

upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 128M

docker-compose.yml でマウント設定

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress_data:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini

WP本体インストールをドキュメントルート直下ではなく、別のサブディレクトリでしたい場合(複雑)

docker-compose.yml

version: '3'

services:
  wordpress:
    image: wordpress:6.4-php8.1
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./public:/var/www/html
      - ./docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh
    working_dir: /var/www/html/wp
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_CONFIG_EXTRA=
        define('WP_HOME', 'http://localhost:8080');
        define('WP_SITEURL', 'http://localhost:8080/wp');

  db:
    image: mysql:8.0
    restart: always
    environment:
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
      - MYSQL_ROOT_PASSWORD=somewordpress
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

working_dirでコンテナ内での作業ディレクトリを指定

working_dirはコンテナ内での作業ディレクトリを指定する設定です。コンテナ内でコマンドを実行する際の基準となります。

volumes: /var/local/wordpress:/var/www/html/wp
working_dir: /var/www/html/wp

この状態でdocker-compose upでイメージからコンテナのを新規作成をすると

– コンテナ内の /var/www/html/wp にファイルを展開

– volumesマウントにより、ホスト側の /var/local/wp にも同じファイルが表示される

2. ボリュームマウント Host Machine /var/local/wp/ Container /var/www/html/wp/ volumes mount 3. WordPressファイル展開 Host Machine /var/local/wp/ wp-admin/ wp-content/ wp-includes/ Container /var/www/html/wp/ wp-admin/ wp-content/ wp-includes/ リアルタイム同期

docker-entrypoint.shでindex.php.htaccessの設定

.sh ファイル(シェルスクリプト)とは

.sh ファイル(シェルスクリプト)は、Unix系システム(LinuxやmacOSなど)でコマンドを自動化するために記述されるスクリプトファイルです。

公式docker-entrypoint.shリポジトリのファイル下部を追記

公式docker-entrypoint.shリポジトリ
https://github.com/docker-library/wordpress/blob/master/docker-entrypoint.sh

...
			fi
		done
	fi
fi

# ↓ 追記部分 ↓

if [ -e /var/www/html/wp/index.php ] && [ -e /var/www/html/wp/.htaccess ] && [ ! -e /var/www/html/index.php ] && [ ! -e /var/www/html/.htaccess ]; then
    sed -i -e 's/\/wp-blog-header\.php/\/wp\/wp-blog-header.php/g' /var/www/html/wp/index.php
    mv /var/www/html/wp/.htaccess /var/www/html/.htaccess
    mv /var/www/html/wp/index.php /var/www/html/index.php
fi

# ↑ 追記部分 ↑

exec "$@"
  1. ファイルの確認
    • wpディレクトリにindex.phpが存在
    • wpディレクトリに.htaccessが存在
    • ルートにindex.phpが存在しない
    • ルートに.htaccessが存在しない
  2. index.phpの中のパス参照を修正
  3. index.phpと.htaccessをwpディレクトリからルートに移動
処理前 /var/www/html/ wp/ index.php require(‘wp-blog-header.php’) .htaccess 処理後 /var/www/html/ index.php require(‘wp/wp-blog-header.php’) .htaccess wp/ その他のWordPressファイル ファイル移動 パス修正 1. 必要なファイルの存在確認 2. index.php内のパス参照を修正 3. index.phpと.htaccessをルートディレクトリに移動 ※ これによりWordPressをサブディレクトリ(wp/)で動作させることができます

参考サイト

WordPress on DockerでWP自体をサブディレクトリにインストールし、index.phpと.htaccessを自動で移動&書き換えする
https://note.com/kezzytak/n/n4f9ac97466f2