Docker で WordPress コンテナを作る方法

ブログのシステムとしては WordPress が人気だと思います。 WordPress をカスタマイズして使用されている方も多いのではないでしょうか。 動作確認などするために、自由に使える WordPress 環境があると便利かもしれません。 Docker で WordPress のコンテナを作成してみましょう。

Docker で WordPress コンテナを作る

コンテナのイメージは、下記の公式イメージを使用します。 イメージのバージョン(タグ)は特にこだわりが無ければ最新版(latest)で良いと思います。

WordPress は Web サーバー上で動作しますので、コンテナ側のポート番号は 80 番です。 ホスト側から Web ブラウザ(Chrome など)で接続できるよう、コンテナ側のポート 80 番へのマッピングを設定しましょう。 ホスト側のポート番号は、他で使用されていないものなら何番でも良いと思います。

例:ホスト側のポート 8080 番と、コンテナ側のポート 80 番をマッピングする場合
docker-compose.yml
version: "3.8"
services:

  # WordPress コンテナ
  wordpress:
    image: wordpress:latest
    ports:
      - 8080:80

ファイルが消えないようにする

WordPress の設定ファイルやアップロードしたファイルなどは、デフォルトでは "/var/www/html" に保存されます。 WordPress コンテナを再作成したりした際にファイルが消えてしまっては困ると思いますので、 バインドマウントか名前付きボリュームを使用して、コンテナの外にファイルが保存されるようにしましょう。 ボリュームを設定しない場合は、勝手にハッシュ名のボリュームが作成されるようなのですが、 わかりづらいのでちゃんと設定した方が良いと思います。

ちなみにですが、"/var/www/html" 配下は WordPress コンテナのドキュメントルートです。 Windows でバインドマウントを使用した場合に処理速度が気になる場合は、 「Windows の Docker 環境を高速化する方法」を参考に、 WSL 2 にバインドマウントする方法を検討してみてください。

例:バインドマウントを使用して、ホストの "./wordpress-files" にファイルを保存する場合
docker-compose.yml
version: "3.8"
services:

  # WordPress コンテナ
  wordpress:
    image: wordpress:latest
    ports:
      - 8080:80
    volumes:
      - ./wordpress-files:/var/www/html

データベースを用意する

WordPress のデータはデータベースに保存されますが、 後述の WordPress のインストール時にテーブルなどが作成されるため、 先にデータベースを用意しておく必要があります。 データベースには MySQL(MariaDB)が必要です。 そのため、MySQL コンテナを用意する必要があります。 MySQL コンテナを作成する方法は「Docker で MySQL コンテナを作る方法」を参考にしてください。

なお、MySQL コンテナの中にデータベースを先に作っておく必要があるので注意してください。 テーブルは自動で作成されますが、データベースは自動で作成してくれません。

WordPress コンテナは、接続先の MySQL コンテナが起動していない状態だと意味が無いと思いますので、 depends_on の項目で、MySQL コンテナの後に起動するように設定しておくと良いでしょう。

例:WordPress コンテナを MySQL コンテナの後に起動する場合
docker-compose.yml
version: "3.8"
services:

  # MySQL コンテナ
  mysql:
    image: mysql:latest
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password

  # WordPress コンテナ
  wordpress:
    image: wordpress:latest
    ports:
      - 8080:80
    depends_on:
      - mysql
    volumes:
      - ./wordpress-files:/var/www/html

データベースを接続する

用意したデータベースへの接続情報を WordPress コンテナに設定するには2つの方法があります。

  1. WordPress のインストーラーの画面で指定する方法
  2. 環境変数で指定する方法

どちらの方法を使用してもあまり大差ない気がしますので、お好みの方法で設定すると良いでしょう。 Docker に詳しくない方はインストーラーの画面を使用した方が楽かもしれませんし、 Docker に詳しい方は環境変数の方が楽かもしれません。

なお、接続情報を入力する際、MySQL コンテナのホスト名には docker-compose.yml で定義しているサービス名(つまり、services 項目で指定しているキー)を使用できます。 上記の例では、ホスト名として "mysql" が使用できます。

環境変数で指定する

環境変数で指定する場合は、下記の例を参考にしてください。

例:MySQL コンテナのデータベース「wordpress」にデータを保存する場合
docker-compose.yml
version: "3.8"
services:

  # MySQL コンテナ
  mysql:
    image: mysql:latest
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password

  # WordPress コンテナ
  wordpress:
    image: wordpress:latest
    ports:
      - 8080:80
    depends_on:
      - mysql
    volumes:
      - ./wordpress-files:/var/www/html
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_TABLE_PREFIX: wp_

WordPress をインストールする

データベースの用意ができたら WordPress コンテナを起動しましょう。 WordPress のインストール画面が表示されますので、画面に従って設定しましょう。 データベースの接続情報(未設定の場合のみ)や、管理者アカウントの設定などが必要になります。 インストーラーの画面に従って入力すれば特に困ることもないでしょう。 正しく設定できていれば WordPress が使用できるようになります。

db_settings.png site_settings.png

参考サイト

関連記事

様々な課題やタスクを管理するために、自由に使える課題管理システム(Issue Tracking System)があると便利かもしれません。Docker で Redmine のコンテナを作成してみましょう。Redmine とは?Redmine は、オープンソースのプロジェクト管理ソフトウェアです。Ruby on Rail ...
いろんな情報をまとめたりメモしたりするために、自由に使える wiki があると便利かもしれません。Docker で MediaWiki のコンテナを作成してみましょう。MediaWiki とは?MediaWiki は無料のオープンソースの Wiki ソフトウェアです。PHP で実装されています。MediaWiki は、 ...
ほとんどの Web アプリではデータを保存する際に、データベースを使用しています。XAMPP では、データベースとして MySQL と互換性のある MariaDB が採用されていますが、Docker を使用するのであればせっかくなので MySQL のコンテナを作成してみましょう。Docker で MySQL コンテナを ...
Docker の PHP コンテナで開発する際に、テスト用のメールサーバーを使用すると便利です。メールを外部に送信せずに、メールの動作確認を行うことができます。Mailpit とは?Mailpit はテスト用に開発されたメールサーバーです。Go 言語で実装されています。本物のメールサーバーのように振舞いながらも、メール ...
Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。