Contents
【簡単】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:
- <ホストのパス>:<コンテナのパス>
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 にも同じファイルが表示される
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 "$@"
- ファイルの確認
- wpディレクトリにindex.phpが存在
- wpディレクトリに.htaccessが存在
- ルートにindex.phpが存在しない
- ルートに.htaccessが存在しない
- index.phpの中のパス参照を修正
- index.phpと.htaccessをwpディレクトリからルートに移動
参考サイト
WordPress on DockerでWP自体をサブディレクトリにインストールし、index.phpと.htaccessを自動で移動&書き換えする
https://note.com/kezzytak/n/n4f9ac97466f2