プログラミング

【Docker】重いWordPressコンテナを軽くする為に

概要

自身のローカル環境にて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に変更しました。

OrbStack - サイト

これにより、12秒かかったページ表示が半分の6秒まで短縮しました。(かなり早くなった!)
自身の環境で6秒は許容範囲かなと思い、これ以上の対応は一旦諦めました。(時間もなかったですし、、)

他にやってみたこと

1. phpファイルのバインドをやめてみた

compose.yamlのwordpressコンテナにて、phpのファイルをボリュームバインドで設定しています。こちらバインドせずに、コンテナの中に直接ファイルをコピーして実行してみましたが、ページ表示にかかる時間は変わらずでした。

2. Docker Desktopのリソース設定

以下画像のようにDocker Desktopのリソース設定にてメモリリミット等を上げてみたりしてみましたが、ページ表示にかかる時間は変わらずでした。

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

スポンサーリンク

  • この記事を書いた人
プロフィール画像

かず

バックエンド/フロントエンド/クラウドインフラのフルスタックエンジニア | デジタルノマド(‘23/6〜) で世界放浪中 | 主にプログラミングに役立つ情報を発信 | Xでは旅の様子を発信

-プログラミング
-,