DockerでWordPressを使う

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.0

WordPressのコンテナを起動します。

  • 環境変数の設定
    • 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_DEBUGWORDPRESS_CONFIG_EXTRAは削除)
  • wp-contentディレクトリとcompose.ymlを同じディレクトリに配置
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: