WordPressをDocker上でWP-CLIで実行する

WordPressをDocker上でWP-CLIで実行する

WordPressをDocker上でWP-CLIで実行する

WordPressのローカル開発環境の手段として、WP-CLI(WordPressを管理するためのコマンドラインツール)をDocker Desktop上で実行しWordPressを動かす方法を取ってみました。手順を書き残しておきます。

利用環境

私が利用した開発環境は以下になります。

  • Windows 10(WordPressはDocker上で動かすのでホストOS依存しないと思います)
  • wordpress-herokuのプロジェクトを利用

wordpress-herokuとはBedrockをベースにしたWordPressをHeroku上で動かすことを楽ちんにしてくれるプロジェクトです。

この手法を取った背景

そもそもwordpress-herokuプロジェクトはローカル環境でもWordPressを動かすための手順を用意しており、こちらのWikiに記載されております。

にもかかわらず、なぜわざわざDocker上で動かすのかというと、RedisやMySQLもローカル用に環境を用意したいってなった時に楽そうかな、と思ったのがまず一点。

そして、大きな理由としては、Windows上で手順通りにWordPressを動かしてみた(以下のコマンドを実行)ものの、なんか動作が怪しかったという。。。

php wp-cli.phar server --host=0.0.0.0 --port=80 --path=web

自身で追加したテーマが使われずデフォのTwenty-Seventeenっぽいテーマが使用されてたり。。

サーバーログにも特に関連がありそうなエラーも見つからず、コードを深く追うことも避けたかったため、実行環境(Windows)の問題なのかな、とDockerで動かしてみたらなんと諸々問題が解消されました!

セットアップ方法

さて、前置きが長くなりましたが、セットアップに移りましょう。

wp-cliのDocker用のイメージ(wordpress:cli)が配布されており、そちらを使用してWordPressをDocker上で動かします。

手順は以下になります。

  1. Docker Desktopをインストールします。

URL: https://docs.docker.jp/get-docker.html
※インストール手順はWeb上の各所で記載されており、ここでは割愛します。

  1. プロジェクトフォルダの直下にdocker-compose.ymlを作成します。
docker-compose.yml
version: '3.6'
services:
   cli:
     image: wordpress:cli-2.4.0-php7.4
     volumes:
       - .:/var/www/html
     ports:
       - "80:8080"
     envlog_file: .env
     command: wp server --host=0.0.0.0 --port=8080 --path=web
  1. その後、Dockerを起動した状態で、コマンドプロンプトにて以下のコマンド実行しDockerコンテナが稼働するIPアドレスを確認します。
docker-machine ip
  1. 私の場合は192.168.99.100が返ってきました。そのIPアドレスをプロジェクトフォルダ内の.envファイルに記載します。
.env(変更前)
WP_HOME=http://localhost
WP_SITEURL=${WP_HOME}/wp
.env(変更後)
WP_HOME=http://192.168.99.100
WP_SITEURL=http://192.168.99.100/wp
  1. コマンドプロンプトでプロジェクトフォルダに移動して、以下のコマンドを実行してコンテナをビルドおよび実行します。
docker-compose up
  1. これで準備完了です。Dockerコンテナにhttpでアクセスしてページを開くことができます。

http://192.168.99.100

Appendix

docker-compose.ymlの補足的な説明を書き残しときます。

  • image: 現時点で一番新しそうなwordpress:cli-2.4.0-php7.4を使用してます。
  • volumes: .:/var/www/htmlと指定し、ホスト側のカレントディレクトリ(プロジェクトフォルダ)をコンテナ側に共有します。これにより、コンテナ側からホスト側にあるWordPressのプロジェクトフォルダにアクセスできます。
  • ports: 外部(コンテナ外)からは80番ポートで接続できるように、8080を80へマッピングしてます。
  • env_file: こちらの手順通り.envファイルを作成し、それが参照されます。
  • command: wp serverコマンドをport=8080で指定して実行してます。port=80でやろうとしたら以下のエラーになったので、80以外で指定が必要なのだと思います。
cli_1  | [Sun Dec 13 12:30:30 2020] Failed to listen on 0.0.0.0:80 (reason: Permission denied)