すぐできる!Docker ComposeでWordPressローカル環境を構築する方法を徹底解説
みなさんこんにちは!エンジニアの高澤です!
今回はDocker ComposeでWordPressローカル環境を構築する方法解説していきたいと思います。
今やモダンであり主流の開発環境であるDockerですが、Docker Composeという仕組みを利用することによって、普通にDockerで環境構築するより10倍は早く環境を立ち上げられると言っても過言ではありません。
当記事では、すぐにDocker Composeを使って5分もあれば余裕でローカル環境を構築できるように手順を解説しておりますので、よろしければぜひお仕事でご活用いただき、時短に活かしていただければと思います。
また、筆者の実務での失敗談も掲載しておりますので、同じようなミスを繰り返させたくないという意味でもご確認いただけましたら嬉しいです。
目次
そもそもDockerとは
Dockerとは、アプリケーションを簡単に動かすための「仮想環境」を作る技術のことをいいます。
具体的には、アプリケーションとその動作に必要な環境(OS、ライブラリ、サーバーなど)を「コンテナ」と呼ばれる単位でまとめて動かせるようにします。
これにより、例えば開発者のパソコンで動いていたWordPressが他の環境でもそのまま動くようになります。また、軽量かつ効率的で、仮想マシン(VM)より高速に動作します。
Docker Composeとは
Docker Composeとは、docker-compose.yml
というファイル名でymlファイルを作成した上でコマンドを叩くだけで、複数のコンテナを一括で自動生成できたりするなどして簡単に開発環境を構築・管理することができるツールのことをいいます。
WordPressをローカルで動かす場合、通常WordPress本体とデータベース(MySQLなど)の2つ以上のコンテナが必要になるかと思います。ここで普通にDockerコマンドで作成するとなると、複数のコマンドを叩く必要があり少々複雑なため、場合によっては非常に面倒です。
そういった場面で、このDocker Composeを使うことによって、設定ファイル(docker-compose.yml
)に「WordPressとMySQLをこのように動かしてね」と記述して専用のコマンドを叩くだけで、必要なコンテナをまとめて起動・停止できます。これにより、複雑な環境構築が非常に簡単になります。
WordPress環境を構築する方法
それでは早速、WordPressのローカル環境を構築する方法について解説いたします。
環境を構築する手順は以下になります。
- Dockerをインストール・起動
- Docker Composeをインストール
- プロジェクトディレクトリを作成
docker-compose.yml
ファイルの作成- Dockerコンテナの起動
- WordPressのセットアップ・ログイン・初期設定
- 環境の停止・削除
パッと見難しそうという印象を持たれた方もいらっしゃるかもしれませんが、実際にやってみるとまったく難しくないし、とても簡単なので安心してください。
以下で解説する手順通りに進めていただければ簡単に完了できてしまうので、拍子抜けすることと思います。
それでは、それぞれ解説いたします。
Dockerをインストールして起動
まず初めに、Dockerをご自身のPCにインストールします。
Dockerをインストールする方法は一つだけではなくさまざまな方法がありまして、一番メジャーでかつ簡単な方法が「Docker Desktop」をインストールする方法になります。
そのため、当記事では「Docker Desktop」のインストール方法でまずは進めていただくことを前提としたいと思います。
インストール方法は以下の記事でご確認いただけますので、こちらからご確認してください。
やってみるとお分かりかと思いますが、Docker公式サイトからインストーラーをダウンロードしてPCにインストールするだけなので、まったく難しくないかと思います。
Docker Composeをインストール
次に、Docker Composeをインストールという流れになるのですが、実はすでにDocker Composeを使える状態ですので、別途Docker Composeをインストールする必要はございません。
つまり、もうDocker Composeのコマンドなどが可能の状態となっているということです。
その理由は、Docker DesktopにはパッケージとしてDocker Composeが付属しているからです。詳しくはこちら(https://docs.docker.jp/compose/install/compose-desktop.html)をご確認ください。
そのため、当記事の手順通りDocker Desktopをインストールしている方は、ここでは何もしなくて問題ありません。
プロジェクトディレクトリを作成
DockerとDocker Composeが準備できたら、プロジェクトディレクトリを作成します。
プロジェクトディレクトリといっても任意の場所にただのファイルを作成するだけです。
当記事ではPCのデスクトップに「docker_test」というファイル名でプロジェクトディレクトリを作成する想定で解説を進めさせていただきます。
以下のコマンドをターミナルなどから叩いて処理してください。
# デスクトップへカレントディレクトリを移動
cd desktop
# 「docker_test」というファイル名でプロジェクトディレクトリを作成
mkdir docker_test
# 「docker_test」へカレントディレクトリを移動
cd docker_test
上記コマンドの処理が完了したら、次はdocker-compose.yml
ファイルを作成します。
docker-compose.yml
ファイルの作成
次は作成した「docker_test」ファイル内にdocker-compose.yml
ファイルを作成して、Docker Composeで開発環境を作るための準備を完了させます。
以下のコマンドを叩いて作業を進めてください。
# 「docker_test」ファイル内にdocker-compose.ymlファイルを作成
touch docker-compose.yml
このとき注意点なのですが、ymlファイル名は必ず「docker-compose.yml」としてください。
作成したら、以下の記述をコピー&ペーストしてください。以下の記述がDocker ComposeでWordPressのローカル環境を作成する雛形と思ってください。
version: '3.7'
services:
wordpress:
image: wordpress:latest
container_name: wordpress-container
ports:
- "8080:80" # localhost:8080 でWordPressにアクセス
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: example_db
WORDPRESS_DB_USER: example_user
WORDPRESS_DB_PASSWORD: example_password
volumes:
- wordpress_data:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/php.ini # カスタムphp.iniをマウント
- ./themes:/var/www/html/wp-content/themes # テーマディレクトリをマウント
networks:
- wordpress_network
db:
image: mariadb:latest # MySQLの代わりにMariaDBを使用
container_name: mariadb-container
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: example_db
MYSQL_USER: example_user
MYSQL_PASSWORD: example_password
volumes:
- db_data:/var/lib/mysql
networks:
- wordpress_network
volumes:
wordpress_data:
db_data:
networks:
wordpress_network:
driver: bridge
上記のdocker-compose.yml
の記述は、WordPressとMariaDBで簡単にローカル環境を構築するための設定です。
WordPressのコンテナはポート8080を指定しており「http://localhost:8080」でブラウザからアクセス可能で、データベースにはMariaDBを使用します。環境変数でデータベース接続情報を設定し、ホスト側からカスタムphp.ini
を読み込むことでPHP設定を変更可能です。
また、ホストの./themes
フォルダをWordPressのテーマディレクトリとして使う設定があり、テーマの編集や追加が簡単にできます。データは永続化のため、ホストのストレージに保存されます。
ここまでで、docker_testディレクトリの内容は以下の構成となっているはずです。ご確認ください。
あとはコンテナを機能するだけでWordPressを立ち上げられますので、準備完了です。
Dockerコンテナの起動
docker-compose.ymlの作成まで完了したら、あとは以下のコマンドをターミナルにて実行しましょう。
このとき必ずターミナルでのカレントディレクトリをdocker_testディレクトリのトップ階層にしておいた上でコマンドを実行してください。
docker-compose up -d
すると下図のようにDocker Composeの処理が開始され、数秒すると処理が完了します。
処理が成功すると以下のようにターミナルに出力されるはずです。(筆者の環境で実行しているので、ユーザー名「takasawashou@MacBook-Pro-64」とありますが無視してください)
takasawashou@MacBook-Pro-64 docker_test % docker compose up -d
Cannot connect to the Docker daemon at unix:///Users/takasawashou/.docker/run/docker.sock. Is the docker daemon running?
takasawashou@MacBook-Pro-64 docker_test % docker compose up -d
WARN[0000] /Users/takasawashou/desktop/docker_test/docker-compose.yml: `version` is obsolete
[+] Running 32/15
✔ wordpress Pulled 6.2s
✔ db Pulled 21.9s
[+] Running 5/5
✔ Network docker_test_wordpress_network Created 0.1s
✔ Volume "docker_test_wordpress_data" Created 0.0s
✔ Volume "docker_test_db_data" Created 0.0s
✔ Container wordpress-container Started 1.4s
✔ Container mariadb-container Started 1.3s
takasawashou@MacBook-Pro-64 docker_test %
処理が完了すると、docker_testディレクトリの中身が下図のようになっていることと思います。
新規に「php.ini」と「themes」が作成されていることと思いますが、これは掲載したサンプルのdocker-compose.ymlの記述に以下の記述を加えてひと工夫しているためです。
volumes:
- wordpress_data:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/php.ini # カスタムphp.iniをマウント
- ./themes:/var/www/html/wp-content/themes # テーマディレクトリをマウント
上記の設定は、WordPressコンテナでデータや設定を永続化、php.ini(PHP本体の設定)、テーマファイルのカスタマイズを可能とするために3つのボリュームを指定しています。
wordpress_data : | WordPressの全データを保存し、コンテナを再起動しても内容を保持します。 |
./php.ini : | ホスト側のカスタムPHP設定ファイルをコンテナ内のphp.ini に反映します。PHPの設定変更が可能です。ちなみにホスト(host)とは、Dockerのコンテナを動かしている元のコンピュータやシステムのことを指します。たとえば、自分のPCやサーバーがホストに該当します。 |
./themes : | ホスト側のテーマフォルダをWordPressのテーマディレクトリにマウントし、簡単にテーマを編集・追加できます。 ホスト側のテーマフォルダをWordPressのテーマディレクトリにマウントするとは、自分のPC(ホスト)のデスクトップなどの任意の場所のフォルダをWordPressの中の「テーマが入る場所」として使う設定のことです。 たとえば、この設定をすると、自分のPCの ./themes フォルダにテーマのファイルを保存するだけで、その内容がWordPressのテーマとしてすぐに反映されます。これにより、WordPressの中に直接アクセスせずにテーマを簡単に編集・追加できるようになります。 |
これにより、柔軟な運用が可能になります。
さてここまで進んだので、実はもうWordPressのローカル環境のシステムは動いているためいつでもブラウザからアクセス可能の状態です。
次はブラウザから「http://localhost:8080」へアクセスしてWordPressをセットアップしていきましょう。
WordPressのセットアップ・ログイン・初期設定
次はWordPressのセットアップを行なっていきましょう。ブラウザから「http://localhost:8080」へアクセスしてください。
アクセスすると、下図のようにWordPressのセットアップ画面が表示されることと思います。
「日本語」を選択して「次へ(Continue)」をクリックして次へ進んでください。
すると上図のように「ようこそ」というページが表示されるので、「サイトのタイトル」や「ユーザ名」「パスワード」などを入力して「WordPressをインストール」をクリックします。
インストールが完了すると、上図のように「成功しました!」のページが表示されて、「ログイン」というリンクテキストがあるのでそちらをクリックしていきます。
当記事でのdocker-compose.ymlではポートを8080で設定しているため「http://localhost:8080」でもログイン画面ページを開くことが可能です。
上図のログイン画面にて「ユーザー名またはメールアドレス」と「パスワード」を入力していただき、WordPressへログインしてください。
ログインが完了すると、上図のようにWordPress管理画面が表示されます。
ここまでで、Docker Composeを使ったWordPressローカル環境の構築は完了です。お疲れ様でした!
次のセクションからは、ローカル環境での作業完了後に行うデータ周りの削除方法などについて解説いたします。
環境の停止・ボリューム(データ)削除
それでは、Dockerではお決まりのローカル環境での作業後の後始末である環境の停止やボリュームの削除などのやり方について解説します。
ここでの削除に関する解説内容では、当記事で掲載したサンプルのdocker-compose.ymlを前提にしている部分もあるため、先ほどの環境構築の延長としてもご確認いただける内容となっております。
コンテナの停止と削除
まず、起動しているコンテナを停止し、削除します。
docker-compose down
上記コマンドで、関連するコンテナとネットワークが削除されます。ただし、ボリュームや永続化データは残ります。
当記事掲載のdocker-compose.ymlのサンプルでは、停止後もこのあと解説する「ボリュームの削除」等でデータを削除しない限り永続的に残り続けるようになっているため、次回も引き続きデータ(例えば、WordPressに投稿した記事データや各種設定)をそのままにして作業したければ、「docker-compose down」を実行してそのままPCを閉じれば大丈夫です。
ボリュームの削除
ボリュームに保存されているデータを完全に削除します。
docker volume rm $(docker volume ls -q)
上記コマンドはすべての未使用ボリュームを削除します。
特定のボリュームだけ削除する場合は以下のように指定します。
docker volume rm wordpress_data db_data
上記コマンドは当記事で掲載したdocker-compose.ymlのサンプルにあった「wordpress_data」と「db_data」の2つのボリュームを削除する例になります。
残ったフォルダやファイルの削除
ホスト側にマウントしていたフォルダ(./themes
や./php.ini
など)や不要なファイルを手動で削除します。たとえば、以下のように削除します。
rm -rf ./themes ./php.ini
これで、Docker Composeを使ってWordPressローカル環境を構築する方法の基本的な内容としての解説は終了となります。
ここまでの内容はDockerとしてのライフサイクルになりますので、しっかり当記事の内容を仕事で問題なく使いこなせるようにしましょう。
カスタマイズしたphp.iniを反映させる
すでに当記事で掲載したサンプルのdocker-compose.ymlの記述でphp.iniをカスタマイズできるようにしておりますが、念の為このphp.iniについて解説しておきたいと思います。
docker-compose.ymlにてphp.iniをカスタマイズできるようにする記述は以下の部分になります。
volumes:
...
- ./php.ini:/usr/local/etc/php/conf.d/php.ini # カスタムphp.iniをマウント
...
上記のように追加することで、php.iniファイルをカスタマイズしたい場合、コンテナ内のPHP設定を簡単に変更できます。
このdocker-compose.yml
の設定では、ホスト側にあるカスタムphp.ini
ファイルをWordPressコンテナ内にマウントしています。
具体的には、ホストの./php.ini
(つまり下図の位置)をコンテナの/usr/local/etc/php/conf.d/php.ini
に配置することで、カスタマイズしたPHP設定を反映させています。
これにより、コンテナ内で動作するPHPの設定(例えば、メモリ制限やアップロードファイルサイズ制限など)を自由に調整でき、WordPressの動作を最適化できます。
カスタマイズ例としては以下があります。
upload_max_filesize = 1G
post_max_size = 1G
memory_limit = 256000M
上記ようにphp.iniを更新し、コンテナを再起動すれば、WordPressでより大きなファイルをアップロードできるようになります。
WordPressテーマを編集できるようにする
次に、WordPressテーマなどの開発では必須の「WordPressテーマを編集できるようにする」について解説させていただきます。
docker-compose.ymlにてテーマをカスタマイズできるようにする記述は以下の部分になります。
volumes:
...
...
- ./themes:/var/www/html/wp-content/themes # テーマディレクトリをマウント
上記の設定では、ホスト側(自分のPC)のテーマフォルダをWordPressコンテナ内のテーマディレクトリにマウントしています。具体的には、./themes
(つまり下図の位置)というローカルフォルダをコンテナ内の/var/www/html/wp-content/themes
にマッピングしています。
この方法を使うことで、ホスト側でテーマのファイルを直接編集したり、新しいテーマを追加することができます。
変更を加えるたびに、コンテナを再起動することなく、即座にWordPressで反映されるため、テーマ開発やカスタマイズが非常に便利で効率的になります。
上記はプラグイン開発でも使えるノウハウなので、ぜひお試しください。
筆者の失敗談(エピソード共有)
最後に、当記事のユーザー様へ自分と同じ失敗を繰り返して欲しくないという願いを込めて、ここでは筆者の失敗談をご紹介したいと思います。
Dockerを使ってWordPressのローカル環境構築作業をしている中で割と大きな失敗をして時間を大きく割いてしまったということがあったためよろしければぜひご参考にしていただけますと幸いです。
ディレクトリ・ファイルの編集権限(パーミッション)を忘れていた
ディレクトリ・ファイルの編集権限(パーミッション)を忘れていた、ということなのですが、ローカル環境を構築できたのはいいものの、マウントしたWordPressテーマのPHPファイルなどを編集しても権限(パーミッション)の問題で編集ができない、といった事態が起こったことがありました。
「ただのパーミッションの設定じゃん!」と誰しも思うところですが、言い訳をするとパーミッションの変更をコマンドでやってみていたけれど、できていなかったという失敗になります。
結論としては、以下のコマンドを実行することで読み込み、書き込み、実行などのパーミッションを設定することができるので、
sudo chmod -R 777 【ディレクトリファイル名】
当たり前ですが、上記コマンドで無事編集できるようになったのでもしファイルの保存ができないといったことがあればぜひ試してみてください。
ちなみに注意点なのですが、上記コマンドは、指定したディレクトリとその中の全ファイル・フォルダに「すべてのユーザーが読み書き・実行できる」権限を与えるコマンドです。これには重大な注意点があります。
まず、セキュリティリスクとして、悪意あるユーザーがファイルを改ざんしたり削除したりする可能性があります。また、意図せず不要な実行を許してしまう危険もあります。
さらに、-R
(再帰的)オプションにより、サブディレクトリやその中のファイルにも同じ設定が適用され、変更範囲が広がります。これが意図しないファイルにも影響を及ぼす場合がありますので、ご自身のPC内のローカル環境のみに使用を控え、くれぐれも本番環境で行うことはしないようにしてください。
また、このコマンドを使用する前には、ls -l
で現在の権限を確認し、可能なら777ではなく755や750など、必要最低限の権限を設定してください。誤用は避け、慎重に利用することが重要です。
まとめ
今回はDocker ComposeでWordPressローカル環境を構築する方法を解説いたしました。
今やモダンでかつ主流となっているDockerですが、Docker Composeという仕組みを利用することによって、少ないコマンドを実行するだけで早く環境を立ち上げられます。
当記事では、すぐにDocker Composeを使って5分もあればローカル環境を構築できるように手順を解説しておりますので、よろしければぜひお仕事でご活用いただけましたら幸いです。
また、筆者の実務での失敗談も掲載しておりますので、同じようなミスを繰り返させたくないという意味でもよろしければコラムとしてご確認ください。
お気軽に皆さんのご要望をお聞かせください!
どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!
例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など