PHPの勉強を兼ねて、WordPressのテーマを自作してみたいと思い開発環境を作ってみました。仮想化ツールの「Docker」を使って、かなり簡単に環境構築をすることができましたので、今回はその構築手順を説明します。
こんな方向けの記事です。
- Dockerって何?という初心者の人
- WordPressのテーマを作りたいけど、開発環境の用意の仕方がわからない人
前提
- macOS Mojave 10.14.5
- Docker 19.03.2
- WordPress 5.2
- MySQL 5.7(注)
(注)MySQLは8系のバージョンが出ていますが、WordPress 5系では不具合が出るので、MySQLは5系を使っています。理由は後述します。
Dockerを選んだ理由
Dockerとは仮想環境を構築するためのツールです。簡単な言い方をすると、Dockerは周りの環境を汚さない「小さい箱庭」が簡単に作れるツール、というのが私の理解です。
-
Docker公式
Docker is a platform designed to help developers build, share, and run container applications. We ha ...
続きを見る
Dockerについてもっと詳しく知りたい方は、例えば、下記の記事を参考にしてみてください。手を動かしながら学習できるので、理解が深まると思います。
Dockerのドキュメント日本語版です。有志の方々が翻訳くださっています。非常に有難いです。
Dockerは、他の仮想化ツールより、コンパクト、軽い、速い
Dockerは、Linuxの枯れた「コンテナ技術」を使っており、他の仮想環境構築ツールより小型、軽量、高速なのが売りです。
仮想環境の構築は、Virtual BoxとVagrantで一度トライしてみたことがあるのですが、かなりサイズが大きくなってしまい驚いた記憶があります。
どんどん経験を積めば、他の仮想化技術を使うべき場面も出てくるのでしょうが、個人が手軽にやる分には、Dockerはとても良い選択肢だと思います。
仮想環境じゃなくて自分のMacに作ればいいんじゃないの?
仮想化ツールを使わず「自分のMacなりPCに直接ソフトウェアをインストールすれば良いのでは?」という疑問も当然わくと思います。
確かに、WordPressの開発をする場合には、データベースとphpを動かすWebサーバをインストールすれば済みそうです。が、これは、逆に深みにはまる可能性があるのでやめた方がいいです。
その理由は・・・
開発環境を構築する際には、いろいろなソフトウェアをインストールすることになりますが、その際に、Macの既存のソフトウェアや設定とバッティングして不具合を起こす場合があります。そして、それらの不具合を直そうと色々いじっているうちに、Macの既存のソフトウェアすら動かなくなる・・・でも、元に戻す方法もわからない・・・など結構面倒な状況に陥ってしまうのです。
仮想環境ならば、その環境だけで閉じているので、既存のMacに基本的には影響を及ぼしません。また、作った環境が壊れたなどといった状況があれば、すぐに捨てて作り直すことが可能になります。
というわけで、実験するならば、仮想環境を作れた方が絶対いいですね。
大まかな手順
さて、いよいよ、DockerでWordPressの開発環境を作るための具体的な手順に入っていきます。Dockerはすでにインストールしてある前提で進めます。
大まかな流れは以下の通りです。
- イメージファイルの準備
- コンテナの作成
- 起動・停止
今回は手動で環境構築をしてみたいと思います。
手動で環境構築してみる
イメージファイルの準備
まずは、WordPressとMySQLのイメージをDocker Hubのレジストリからダウンロードします。
コマンドは下記の通りです。バージョンを指定するのを忘れないようにしましょう(理由は後述)
$ docker image pull wordpress:5.2
$ docker image pull mysql:5.7
それでは、イメージファイルがきちんとダウンロードできているか確認してみましょう。以下のコマンドでローカルに落としたイメージファイルの一覧が確認できます。
$ docker image ls
wordpressとmysqlがコマンド出力にあるか確認しましょう。
バージョンを指定してイメージをダウンロードする理由
WordPress環境を構築する場合、MySQLの最新バージョン(8.0以上)を使うと不具合が発生します。
MySQLの8.0では「cachingsha2password」という認証方式が導入されたのですが、現在のWordPressのベースとなるPHP7系ではこの認証方式が使えません。もしMySQLの8系を使った場合には、「データベース接続エラー」が発生しWordPressが使えません。
今回は、上記の不具合を避けるために、MySQLの5.7を使います。「docker image pullコマンド」では、イメージのバージョンを指定しなかった場合、Dockerが自動的に最新バージョンのイメージファイルを取得するので、明示的にMySQLは5.7を指定しなければなりません。
MySQLのコンテナを作成する
イメージファイルからコンテナを作ってみます。まずは、MySQLのコンテナを作成します。
以下のコマンドを打ち込みましょう。
$ docker container run —name test-mysql -e MYSQL_ROOT_PASSWORD=test-password -d mysql:5.7
長いコマンドですね。解説します。
docker container run
イメージファイルから新しいコンテナを作るコマンドです。
なお、コマンド構文は下記の通りです。
docker container run [OPTIONS] IMAGE [COMMAND] [ARGS]
今回は、IMAGE(イメージファイルの名前)=mysqlなので、要するに、こういうコマンドということになります。バージョンを指定するのを忘れないようにして下さい。
docker container run [各種オプション] mysql:5.7
各種オプションの内容はこれから説明していきます。
—name オプション
作成したコンテナに名前を付けるオプションです。
—name test-mysql
これで作成したコンテナの名前が「test-mysql」となります。名前は任意のもので構いません。このオプションを付けなかった場合には、Dockerが勝手に名前を付けてくれますが、適当な名前になるので、管理しづらいと思います。
-e オプション
環境変数を設定するオプションです。
-e MYSQL_ROOT_PASSWORD=test-password
上記のように記載することでMySQLのルートのパスワードを設定しています。ここでは「test-password」としましたが、任意のパスワードで構いません。
-d オプション
バックグラウンドでコンテナを実行させるオプションです。
WordPressのコンテナを作成する
続いてWordPressのコンテナを作成します。
以下のコマンドを打ち込みましょう。WordPressのバージョンは最新版(記事の作成時点では5.2.3)でも構いませんが、ここではバージョン指定しました。
$ docker container run —name test-wordpress -e WORDPRESS_DB_PASSWORD=test-password —link test-mysql:mysql -d -p 8080:80 wordpress:5.2
MySQLのときのコマンドと比べて、さらに長くなっています。中身を解説していきます。
docker container run
MySQLのところでも解説した通り、イメージファイルから新しいコンテナを作るコマンドです。
なお、コマンド構文は下記の通りです。
docker container run [OPTIONS] IMAGE [COMMAND] [ARGS]
今回は、IMAGE(イメージファイルの名前)=wordpressなので、要するに、こういうコマンドということになります。
docker container run [各種オプション] wordpress:5.2
各種オプションの内容をこれから説明していきます。
(既出)—nameオプションと-eオプション
MySQLの場合と同じです。「—nameオプション」は作成したコンテナに名前を付けるオプション、「-eオプション」は環境変数を設定するオプションです。
具体的には、以下の記載で作成したコンテナに「test-wordpress」という名前を付けています。名前はもちろん任意のもので構いません。
—name test-wordpress
そして、以下の記載で、WordPressのDBパスワードを設定します。パスワード自体は任意のもので構いませんが、MySQLのrootパスワードと同じにするようにしてください。
-e WORDPRESS_DB_PASSWORD=test-password
-linkオプション
他のコンテナとリンクさせるためのオプションです。
—link test-mysql:mysql
この記載で先に作ってバックグラウンド起動させておいたMySQLのコンテナをWordPressのコンテナとリンクさせます。
(既出)-dオプション
これもMySQLの場合と同じです。バックグラウンドでコンテナを実行させるオプションです。
-pオプション
ポートの設定をするオプションです。「-p ホスト側ポート番号:コンテナ側ポート番号」というように設定します。
-p 8080:80
これで、Mac(ホストOS)側は8080番ポート、WordPressのコンテナ側は80番ポートを使って通信することができるようになります。
作成したコンテナが起動されているか確認する
「docker container run」コマンドは、新たにコンテナを作成するとともに起動もしてくれています。
$ docker container ls
作ったコンテナがあるかコマンドの出力を確認しましょう。
作った環境を確認してみる
ここまでできたらブラウザでローカルホストの8080番ポートにアクセスしてみましょう。「http://localhost:8080/」か「http://127.0.0.1:8080/」にアクセスをしてみて下さい。
以下のような画面が出てくれば、WordPressの開発環境は完成です。
コンテナを削除する
作成したコンテナが不要になった場合には、削除してしまいましょう。
今回作ったコンテナは下記のコマンドで削除できます。
$ docker container rm test-mysql
$ docker container rm test-wordpress
なお、コマンド構文は以下の通りです。
$ docker container rm [OPTIONS] CONTAINER [CONTAINER…]
手順まとめ
今回のWordPressの開発構築の手順を最後にまとめておきます。何度も繰り返しになりますが、MySQLのバージョンは8系ではなく5系に落としましょう。
イメージファイルの準備
Docker HubのレジストリからWordPress(5.2)とMySQL(5.7)をダウンロードします。
$ docker image pull wordpress:5.2
$ docker image pull mysql:5.7
コンテナの作成
先にMySQLのコンテナを作成し、バックグラウンドで起動させます。
$ docker container run —name test-mysql -e MYSQL_ROOT_PASSWORD=test-password -d mysql:5.7
続いて、WordPressのコンテナを作成し、同じようにバックグラウンドで起動させます。
$ docker container run —name test-wordpress -e WORDPRESS_DB_PASSWORD=test-password —link some-mysql:mysql -d -p 8080:80 wordpress
こんな長いコマンドを毎回打つ必要があるの?
必要ないです。Dockerでは、各種の手続を自動化する術が用意されています。次回の記事では、今回の環境構築の自動化をやってみたいと思います。