WordPress開発環境をDockerで構築する際、公式イメージを使うだけでは冗長な構成やサイズが肥大してしまいます。
本記事では、WordPress+ PHP-FPMをマルチステージビルドで構築し、NginxとMySQLを使った軽量構成のWordPress開発環境をDocker Composeで構築する方法を解説します。
構成内容
- WordPress を PHP-FPM と組み合わせて軽量動作
- 最新 Nginx(1.29)と MySQL(8.4)を使用
- マルチステージビルドでPHP拡張のビルドを分離
- docker-compose による自動構築
ディレクトリ構成
.
├── docker-compose.yml
├── nginx/
│ └── default.conf
└── php/
└── Dockerfile ← PHP-FPM + WordPressのマルチステージDockerfile
PHP-FPM + WordPressのマルチステージDockerfile作成
#PHP-FPM + WordPressのマルチステージ用のDockerfile作成
# Build stage
FROM php:8.3-fpm AS builder
RUN apt-get update && apt-get install -y \
libjpeg-dev libpng-dev libfreetype6-dev libzip-dev unzip wget \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd mysqli opcache zip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src
RUN wget https://wordpress.org/latest.tar.gz \
&& tar -xzf latest.tar.gz \
&& rm latest.tar.gz
# Runtime stage
FROM php:8.3-fpm-alpine
RUN apk add --no-cache libpng freetype libjpeg-turbo libzip bash curl
RUN docker-php-ext-install mysqli opcache
COPY --from=builder /usr/src/wordpress /var/www/html
RUN chown -R www-data:www-data /var/www/html
WORKDIR /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
【説明】
ビルドステージ (FROM php:8.3-fpm AS builder)
FROM php:8.3-fpm AS builder:
php:8.3-fpmというPHPの公式イメージ(PHP-FPMがプリインストールされているもの)をベースイメージとして使用します。
AS builderは、このステージにbuilderという名前を付けています。これにより、後のステージでこのステージからファイルや成果物をコピーできるようになります。
RUN apt-get update && apt-get install -y ...:
Debianベースのイメージ(php:8.3-fpm)でパッケージリストを更新し、WordPressやPHP拡張機能が必要とするシステムライブラリ(libjpeg-dev, libpng-dev, libfreetype6-dev, libzip-dev, unzip, wget)をインストールします。
&& docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install gd mysqli opcache zip:
gd(画像処理)、mysqli(MySQLデータベース接続)、opcache(PHPコードの高速化)、zip(ZIPアーカイブ操作)といったPHP拡張機能を設定し、インストールします。
&& apt-get clean && rm -rf /var/lib/apt/lists/*:
インストール後に不要になったAPTキャッシュや一時ファイルを削除し、イメージのサイズを削減します。
WORKDIR /usr/src:
以降のコマンドが実行されるディレクトリを/usr/srcに設定します。
RUN wget https://wordpress.org/latest.tar.gz \ && tar -xzf latest.tar.gz \ && rm latest.tar.gz:
WordPressの最新版のtar.gzファイルをダウンロードします。
ダウンロードしたファイルを解凍します。これにより/usr/src/wordpressディレクトリにWordPressのファイルが展開されます。
ダウンロードしたtar.gzファイルを削除し、イメージのサイズを削減します。
ランタイムステージ (FROM php:8.3-fpm-alpine)
FROM php:8.3-fpm-alpine:
php:8.3-fpm-alpineというAlpine LinuxベースのPHPイメージをベースとして使用します。
RUN apk add --no-cache libpng freetype libjpeg-turbo libzip bash curl:
Alpine Linuxのパッケージマネージャーapkを使用して、WordPressの実行に必要な最小限のシステムライブラリをインストールします。
RUN docker-php-ext-install mysqli opcache:
ランタイムに必要なPHP拡張機能(mysqliとopcache)をインストールします。
COPY --from=builder /usr/src/wordpress /var/www/html:
これがマルチステージビルドの重要な部分です。
前のbuilderステージでダウンロード・解凍されたWordPressのファイル一式を、このランタイムステージの/var/www/htmlディレクトリにコピーします。
RUN chown -R www-data:www-data /var/www/html:
コピーされたWordPressファイルの所有者とグループを、PHP-FPMプロセスが通常実行されるwww-dataユーザーに変更します。
WORKDIR /var/www/html:
コンテナが起動したときのデフォルトの作業ディレクトリを/var/www/htmlに設定します。
EXPOSE 9000:
このコンテナがポート9000でリッスンすることを示します。
PHP-FPMは通常このポートでWebサーバー(NginxやApacheなど)からのリクエストを待ち受けます。
CMD ["php-fpm"]:
このイメージからコンテナが起動したときに実行されるデフォルトのコマンドを定義します。
ここではPHP-FPMプロセスを開始します。
Nginx用の設定ファイル作成
#Nginx用の設定ファイルのdefault.confを作成する。
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass wordpress-php:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
location ~ /\.ht {
deny all;
}
}
docker-compose.yml の作成
services:
wordpress-php:
build:
context: ./php
image: custom-wordpress:latest
volumes:
- wordpress_data:/var/www/html
nginx:
image: nginx:1.29
ports:
- "8080:80"
volumes:
- wordpress_data:/var/www/html:ro
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- wordpress-php
db:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
volumes:
wordpress_data:
db_data:
#作成ファイル確認
.
├── docker-compose.yml
├── nginx
│ └── default.conf
└── php
└── Dockerfile
コンテナ起動
docker compose up --build -d
イメージサイズの確認
#マルチステージビルドで作成したイメージと公式イメージを比べる
#マルチステージビルド
docker images custom-wordpress:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
custom-wordpress latest cd98bf5e7126 5 hours ago 352MB
#公式イメージ
docker images wordpress:6.8.2-php8.3-fpm
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress 6.8.2-php8.3-fpm db983f8ce610 12 days ago 988MB
ブラウザでWordPressを設定する
#WordPressのインストール画面へアクセス
http://localhost/8080
#WordPressの設定
言語選択画面から日本語を選択する。
DB情報の入力画面になるので、データベース接続のための詳細(データベース名、ユーザー名、パスワード、データベースのホスト名(db)、テーブル接頭辞)を入力する。
これは、docker-compose.ymlの db:セクションに設定した情報です。
その後画面に従い、インストールを実行します。
まとめ
マルチステージビルドを活用して、サーバーリソースを抑えて効率的に動作する軽量な WordPress(PHP-FPM)+Nginx+MySQL の組み合わせたDocker環境を作成しました。

