概要
自身のローカル環境にてDockerでWordPressを立ち上げた際、WordPressの挙動が重くなっている方はいますでしょうか。
かくゆう私もWordPress環境を構築していざ起動してみたら、ページを表示するのになんと16秒程かかる問題が発生しておりました。(これでは仕事にならない)
現在は6秒程でページを表示することができている為、10秒程度の短縮に成功しました。(因みに使用しているMacのスペックはM3、メモリ8G、ストレージ512GBとなります。)
今回はWordPressのコンテナを軽くする為に実施したことを、紹介しようと思います。
1. コンテナ構成の見直し
まずやって効果があったのは、コンテナ構成の見直しです。
docker composeによりWordPressとMySQLのコンテナを立ち上げて構築してました。以下古いcompose.yamlの例です。
services
db:
image: mariadb:10.5.24
platform: linux/amd64
container_name: wordpress_db
volumes:
- app-data:/var/lib/mysql
restart: always
expose:
- 3306
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: <database_name>
MYSQL_USER: <user_name>
MYSQL_PASSWORD: <user_password>
networks:
- app-net
wordpress:
depends_on:
- db
image: wordpress:6.7.1-php8.1-apache
container_name: wordpress_app
volumes:
- type: bind
source: "./"
target: "/var/www/html"
- ./php.ini-development:/usr/local/etc/php/php.ini
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: wordpress_db:3306
WORDPRESS_DB_USER: <user_user>
WORDPRESS_DB_PASSWORD: <user_password>
WORDPRESS_DEBUG: true
networks:
- app-net
volumes:
app-data:
networks:
app-net:
driver: bridge
NginxとPHP-FPM構成への変更
新しいcompose.yamlでは、wordpressのコンテナイメージにてapacheのイメージ使用を辞め、NginxとPHP-FPMの構成に変更しました。内容は以下の通り。
services:
db:
image: mariadb:10.5.24
platform: linux/amd64
container_name: minguru_db
volumes:
- db_data:/var/lib/mysql
restart: always
expose:
- 3306
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: <database_name>
MYSQL_USER: <user_name>
MYSQL_PASSWORD: <user_password>
networks:
- app-net
wordpress:
depends_on:
- db
image: wordpress:6.7.1-php8.1-fpm-alpine
container_name: wordpress_db
volumes:
- ./:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: wordpress_db:3306
WORDPRESS_DB_USER: <user_user>
WORDPRESS_DB_PASSWORD: <user_password>
WORDPRESS_DEBUG: true
networks:
- app-net
nginx:
image: nginx:1.27.3-alpine
container_name: minguru_nginx
restart: unless-stopped
networks:
- app-net
depends_on:
- wordpress
ports:
- "8000:80"
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
volumes:
db_data:
networks:
app-net:
driver: bridge
因みにnginx.confの内容は以下の通り。
# default.conf
server {
listen 80;
listen [::]:80;
server_name $host;
index index.php index.html index.htm;
root /var/www/html;
server_tokens off;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress_app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; # access_log off;
}
location = /favicon.svg {
log_not_found off; # access_log off;
}
location = /robots.txt {
log_not_found off; # access_log off# allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
上記の構成変更によってページの表示時間が16秒から12秒程度になり、4秒程改善しました!が、まだ遅い。
2. OrbStackへの変更
Docker環境ツールとして今まで特に不自由がなかったので、Docker Desktopを使用していました。が、同様のツールでOrbStackにした方が軽量で高速といった記事を散見したので、この機会にOrbStackに変更しました。
これにより、12秒かかったページ表示が半分の6秒まで短縮しました。(かなり早くなった!)
自身の環境で6秒は許容範囲かなと思い、これ以上の対応は一旦諦めました。(時間もなかったですし、、)
他にやってみたこと
1. phpファイルのバインドをやめてみた
compose.yamlのwordpressコンテナにて、phpのファイルをボリュームバインドで設定しています。こちらバインドせずに、コンテナの中に直接ファイルをコピーして実行してみましたが、ページ表示にかかる時間は変わらずでした。
2. Docker Desktopのリソース設定
以下画像のようにDocker Desktopのリソース設定にてメモリリミット等を上げてみたりしてみましたが、ページ表示にかかる時間は変わらずでした。

多分PCのスペックが高ければより効果実感できる設定なのか?とも思ってしまいました。