DockerでWordPressを動かす最も簡単な方法は、WordPress公式イメージとMySQLをDocker Composeで同時に起動することです。以下の手順なら、http://localhost:8080で初期設定画面を開けます。WordPress本体用とデータベース用の名前付きボリュームも設定するため、コンテナを作り直してもデータを保持できます。
Docker版WordPressの仕組み
通常は2つのサービスを動かします。wordpressコンテナはPHPとWebサーバーを含む実行環境、dbコンテナは投稿、ユーザー、設定などを保存するMySQLです。Composeのサービス名dbが、WordPressコンテナから見たデータベースのホスト名になります。公式イメージの仕様はWordPress公式イメージで確認できます。
As an Amazon Associate I earn from qualifying purchases.
コンテナは削除・再作成される可能性があるため、WordPressファイルとデータベースをそれぞれボリュームへ保存します。
事前準備
- Docker Desktop、またはDocker EngineとDocker Compose
- ターミナル(WindowsはPowerShellでも可)
- Webブラウザー
バージョンを確認します。
docker --version
docker compose version
WindowsではDocker Desktopを起動してから実行してください。インストール手順はDocker Desktop for Windowsの公式手順を参照できます。
#1 Best Overall
作業フォルダーと環境変数を作る
mkdir wordpress-docker
cd wordpress-docker
同じフォルダーに.envを作成し、次を記述します。パスワードは実際には長くランダムな値へ変更してください。
WORDPRESS_PORT=8080
MYSQL_DATABASE=wordpress
MYSQL_USER=wp_user
MYSQL_PASSWORD=replace-with-a-long-random-password
.envはGitへコミットしないでください。共有リポジトリでは秘密情報をDocker secretsなどで管理する方法もあります。WordPress公式イメージはファイルから値を読む_FILE形式にも対応しています。
compose.yamlを記述する
services:
wordpress:
image: wordpress:apache
restart: unless-stopped
ports:
- "${WORDPRESS_PORT:-8080}:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: "1"
volumes:
- db_data:/var/lib/mysql
volumes:
wordpress_data:
db_data:
設定の要点
wordpress:apacheはApache内蔵の初心者向け構成です。FPM版はNGINXなどのFastCGI対応リバースプロキシが必要です。8080:80はホストの8080番をコンテナの80番へ転送します。8080番が使用中なら、例えばWORDPRESS_PORT=8081に変更します。WORDPRESS_DB_HOSTはdb:3306にします。コンテナ内のlocalhostはWordPress自身であり、MySQLではありません。WORDPRESS_DB_NAMEとMYSQL_DATABASE、ユーザー名、パスワードは同じ値にそろえます。データベースはMySQL側の初回初期化で作成されます。/var/www/htmlにはWordPress本体、テーマ、プラグイン、アップロードファイルが保存され、/var/lib/mysqlにはデータベースが保存されます。
MySQLの代わりにMariaDBを使う場合は、データベースサービスをmariadb:latestへ変更し、MARIADB_DATABASE、MARIADB_USER、MARIADB_PASSWORD、MARIADB_ROOT_PASSWORDを設定します。詳細はMariaDB公式イメージを確認してください。MariaDBはMySQLとの高い互換性を意図していますが、バージョンやプラグインによる差異は残ります。
コンテナを起動する
- 作業フォルダーで次を実行します。
docker compose up -d - 起動状態を確認します。
docker compose ps - ブラウザーでhttp://localhost:8080を開きます。
初回はMySQLの初期化に時間がかかり、短時間だけデータベース接続エラーになることがあります。数秒待って再読み込みし、必要なら次でログを確認します。
docker compose logs -f db
docker compose logs -f wordpress
depends_onは起動順を指定しますが、データベースが接続可能になるまでを保証しません。自動起動環境ではヘルスチェックとcondition: service_healthyを追加すると待機を制御できます。
ブラウザーでWordPressを初期設定する
http://localhost:8080の画面で、次の項目を入力します。
Rank #3
- 言語
- サイトのタイトル
- 管理者ユーザー名
- 管理者パスワード
- 管理者メールアドレス
- 検索エンジンへの表示設定
完了後の管理画面はhttp://localhost:8080/wp-admin/です。ここで行う設定は通常のWordPressと同じで、Docker固有の操作ではありません。
停止・再起動・削除の違い
| コマンド | コンテナ | 名前付きボリューム | 用途 |
|---|---|---|---|
docker compose stop |
停止 | 残る | 一時停止 |
docker compose start |
再起動 | 残る | 停止した環境を再開 |
docker compose down |
削除 | 通常残る | コンテナを作り直す |
docker compose down -v |
削除 | 削除 | WordPressとDBを初期化 |
docker compose down -vは永続データを削除します。バックアップや初期化以外では使用しないでください。
データをバックアップする
最低限、WordPressボリュームとデータベースのSQLダンプを別々に保管します。データベースのダンプ例は次のとおりです。
Rank #4
docker compose exec -T db
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" > wordpress.sql
復元前には作業環境を停止し、バックアップの内容と復元手順を検証してください。ホスト障害や誤ったボリューム削除に備え、別の保存先へコピーします。
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.よくあるエラーと対処法
データベースに接続できない
WORDPRESS_DB_HOSTがlocalhostになっていないか確認し、db:3306にします。- データベース名、ユーザー名、パスワードがWordPress側とMySQL側で一致しているか確認します。
docker compose logs -f dbで初期化完了を待ち、ページを再読み込みします。
8080番ポートを使えない
「port is already allocated」と表示されたら、.envのWORDPRESS_PORTを8081などへ変更し、docker compose up -dを再実行します。アクセス先はhttp://localhost:8081です。
Free tools Windows power users keep installed
One-click scans. No signup required.
パスワード変更が反映されない
MySQLやMariaDBの初期化用環境変数は、既存のデータディレクトリがあると通常再適用されません。既存ユーザーをSQLで変更するか、開発環境でデータを捨ててよい場合だけdocker compose down -vで初期化します。本番データのボリュームは削除しないでください。
Best Value
プラグインが動かない
公式WordPressイメージに、すべてのプラグインが必要とするPHP拡張が含まれるとは限りません。プラグインの要件を確認し、必要ならwordpress:apacheをベースにしたDockerfileで拡張を追加します。
メールを送信できない
メール送信にはSMTPプラグインと外部SMTPサービスなどの追加設定が必要になる場合があります。ローカル環境で送信できなくても、WordPress本体の起動失敗とは限りません。
イメージタグを固定するか
wordpress:apacheは手軽ですが、将来の更新で含まれるWordPress、PHP、Apacheの組み合わせが変わる可能性があります。学習用ならこのタグで構いませんが、再現性が必要な検証・本番では具体的なバージョンタグやダイジェストをDocker Hubで確認して固定し、更新前にバックアップと互換性確認を行います。タグは更新されるため、公開時点で存在を確認してください。
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →ローカル開発と本番公開は別に考える
ここまでの構成はlocalhostで試す開発環境です。インターネットへ公開するには、通常さらに次の設計が必要です。
- ドメインとHTTPS(TLS)
- NGINX、Caddy、Traefikなどのリバースプロキシ
- ファイアウォールとアクセス制御
- WordPress・PHP・DB・OSの更新
- ボリュームとSQLのバックアップ、復元テスト
- ログ監視、脆弱性確認、メール送信設定
- 秘密情報をComposeファイルや公開リポジトリへ置かない運用
FPMイメージを使う場合は、FPMコンテナ単体を外部公開せず、FastCGI対応のリバースプロキシを前段に置きます。Dockerで起動できることと、安全に本番公開できることは同じではありません。
Docker Desktopの利用条件
Docker Desktopは個人利用、教育、非商用オープンソース、条件を満たす小規模企業などでは無料対象ですが、企業規模や政府機関などによって有料サブスクリプションが必要です。最新の条件はDocker Desktopのライセンス説明と公式料金ページで確認してください。
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

