ブロックチェーン・AI・システム開発の株式会社INDETAIL

新生活のおともにDockerを始めよう!(PHP開発環境構築編)

2018.03.29
tacck

札幌はかなり雪解けが進み、ようやく春らしさが訪れてきました。
4月から入社するメンバーたちの教育担当となった、tacckです。

弊社に入社するメンバーたちも含め、4月といえば新生活が始まる方も多いと思います。
これを期に心機一転、新しい環境で頑張るぞ!という方も多いと思います。

ということで、開発環境も新しく構築したいですよね。
弊社の中で開発環境というと"Vagrant + VirtualBox"をよく使うようにしているのですが、
そろそろ「Dockerを当然のように使っていく」ように、仕向けようと思っています。

今回は、DockerでLaravel(PHPのフレームワーク)の開発環境を構築するところをやってみたいと思います。

環境

今回試したのは、下記の環境です。

  • macOS High Sierra (10.13.3)
  • Docker Community Edition (18.03.0-ce-mac58 / Channel: edge)

WindowsでもDockerを利用できる環境であれば、同様に試せると思います。
また、Dockerで"edge"を使っているのはKubernetesを確認したかったためなので、今回の内容とは関係がありません。
"stable"の方が良いと思います。

やること

先に書いたように、今回はPHPの開発環境を構築します。

具体的には

  • PHPの実行できるWebサーバの動くコンテナ
  • MariaDBの動くコンテナ
  • LaravelはローカルPCのストレージ

という形にします。

環境構築

Laravel の準備

ローカルPCにLaravelのプロジェクトを作成します。

プロジェクトを作成したら、DBの設定を先回りでやっておきます。

./laravel-server/.env

Docker / Docker Compose の準備

WebサーバとDBサーバを使うので、簡単に連携できるようにDocker Composeを使います。

docker-compose.yml

extra_hostsで指定しているのは、ローカルPCのIPアドレスです。
各自の環境で、適切なものにしてください。

MariaDBは公開されているイメージをそのまま利用しています。
Webサーバ(PHP)については、いくつか追加の設定が必要なので ./files/phpの配下に必要なファイルを配置しています。

./files/php/Dockerfile

PHPのバージョンが7.1のイメージを元に、Laravelを動かすのに必要なパッケージなどを詰めています。
Xdebugも入れているので、これでIDEでのデバッグも可能です。

./files/php/000-default.conf

Apacheの設定です。
DocumentRootを、Laravelのpublicディレクトリに設定しています。

./files/php/docker-php-ext-xdebug.ini

Xdebugの設定です。
xdebug.remote_hostは、docker-compose.yml内のextra_hostsで設定したホスト名を書きます。

ファイルは、下記のように配置されている想定です。

起動

では、起動してみましょう。

これだけで起動完了です。

動作確認

ブラウザで、下記にアクセスしてみてください。

http://localhost:9080/

こちらの画面が見えたら、成功です。

次にDBと接続確認のために、コンテナに入ってマイグレーションを実行してみます。

無事に完了しました。このコマンドでDBにテーブルを作成しています、、が、伝わりづらいですね。
ユーザ認証の機能を追加して、ユーザの追加とログインを行なってみましょう。
これがうまくいけば、ユーザ情報がきちんとDBに登録されていることがわかると思います。

ちなみに、Laravelでユーザ認証機能はとても簡単に実装できます。
というか、コマンド一つです。

これだけです。

では、ユーザの登録をしてみましょう。
下記のURLにブラウザでアクセスしてください。

http://localhost:9080/register

登録に成功すると、ログインした状態になります。
一度ログアウトします。

では、再度ログインしてみましょう。

http://localhost:9080/login

ちゃんとログインできました!

終了する場合

サーバを終了する場合には、下記のようにします。

まとめ

いかがでしょうか。

今回、PHPのバージョンに7.1を指定しましたが、これを7.2にする場合はイメージの名前を変更するだけで問題ありません。
このように、使いたいサーバや言語のバージョンを指定すればよく、そのサーバや言語を動かす環境を気にしなくてよくなります。

Vagrantでやる場合、

  • サーバや言語を動かすOSイメージの指定
  • PHPやMariaDBのバージョンに応じたリポジトリの設定 (OSによって設定が異なる)
  • インストールコマンドの実行 (OSによってコマンドが異なる)
  • ローカルPCのディレクトリ参照のための対応に時間が必要になりがち

といったことが起こります。
OS、リポジトリ、サーバのバージョン、といった、組み合わせを考える必要があり、その点での手間が大きくなりやすいです。

Dockerによって、自分の使いたいもののバージョンにだけ集中できるので、環境構築の負荷も大きく下がります。
みなさんも、ぜひ活用してください!

関連タグ:

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。