WordPressの公式Dockerイメージの基本的な使い方の紹介です。WordPressのテーマやプラグインの動作検証などをローカル環境で手軽にやることができます。
Dockerでのファイルマウント方法、ネットワーク仕様については、Dockerまとめを参照してください。
コンソールでの操作はすべてWSL UbuntuのBash上のものです。
目次
WordPress+MySQLで起動
WordPressとDB用のMySQLのコンテナを連携させて使います。
2つのコンテナを連携させるためにユーザー定義ネットワークを作成しておきます。
$ docker network create nw1最初にMySQLのコンテナを起動します。
$ docker run --rm -d --name db-wp --network=nw1 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=db1 \
mysql:9.6.0WordPressのコンテナを起動します。
- 環境変数の設定
WORDPRESS_DB_HOST: MySQLコンテナの名前WORDPRESS_DB_USER=root: DBのユーザー名(デフォルトではroot)WORDPRESS_DB_PASSWORD: MySQLコンテナで設定したパスワードWORDPRESS_DB_NAME: MySQLコンテナで設定したDB名
$ docker run --rm -d --name wordpress1 -p 8085:80 --network nw1 \
-e WORDPRESS_DB_HOST=db-wp \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=my-secret-pw \
-e WORDPRESS_DB_NAME=db1 \
wordpress:6.9.0公開したポート(この例ではhttp://localhost:8085/)にブラウザでアクセスするとWordPressの初期設定画面が開きます。
テーマ、プラグインディレクトリをマウント
テーマ、プラグインを編集・新規作成したい場合はローカルディレクトリにマウントすると簡単に操作できます。
WordPressファイルのダウンロード
まずは元々Dockerイメージに入っているものと同じデフォルトのテーマ・プラグインをマウントします。公式サイト(https://wordpress.org/download/)からWordPress一式のファイルをダウンロード・解凍します。
この中のwordpress/wp-content/themesディレクトリとwordpress/wp-content/pluginsディレクトリがマウント対象です。
ファイルをマウントしてコンテナを起動
先ほどのWordPress起動コマンドにマウントオプションを追加します。ここではカレントディレクトリ直下に解凍したwordpressディレクトリを置いています。
$ docker run --rm -d --name wordpress1 -p 8085:80 --network nw1 \
-e WORDPRESS_DB_HOST=db-wp \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=my-secret-pw \
-e WORDPRESS_DB_NAME=db1 \
--mount type=bind,src="$(pwd)/wordpress/wp-content/themes",dst=/var/www/html/wp-content/themes \
--mount type=bind,src="$(pwd)/wordpress/wp-content/plugins",dst=/var/www/html/wp-content/plugins \
wordpress:6.9.0この状態でWordPress上でテーマやプラグインを追加すると、マウント先のディレクトリにファイルが追加されることが確認できます。
Docker Composeを使う
DBとWordPressは必ずセットで起動するので、Docker Composeファイルにした方が便利です。
以下の仕様で作成しています。名前や設定は各自の環境に合わせて適宜編集してください。
- MySQLのDBはDocker Volumeを使用
- WordPressのデバッグモードを有効に(不要なら
WORDPRESS_DEBUG、WORDPRESS_CONFIG_EXTRAは削除) - wp-contentディレクトリとcompose.ymlを同じディレクトリに配置
name: wordpress-test
services:
wp:
image: wordpress:6.9.0
restart: "no"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: my-secret-pw
WORDPRESS_DB_NAME: db1
WORDPRESS_DEBUG: 1
WORDPRESS_CONFIG_EXTRA: |
//Enable error logging.
@ini_set('log_errors', 'On');
@ini_set('error_log', '/var/www/html/wp-content/elm-error-logs/php-errors.log');
//Don't show errors to site visitors.
@ini_set('display_errors', 'Off');
if ( !defined('WP_DEBUG_DISPLAY') ) {
define('WP_DEBUG_DISPLAY', false);
}
ports:
- "8085:80"
depends_on:
- db
networks:
- nw1
volumes:
- type: bind
source: ./wp-content/themes
target: /var/www/html/wp-content/themes
- type: bind
source: ./wp-content/plugins
target: /var/www/html/wp-content/plugins
db:
image: mysql:9.6.0
restart: "no"
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
MYSQL_DATABASE: db1
networks:
- nw1
volumes:
- type: volume
source: wp-data
target: /var/lib/mysql
networks:
nw1:
volumes:
wp-data: