Laradockを利用した環境構築


Laradockとは?

LaradockはオープンソースのLaravel開発環境でDocker上で動作するものです。

VirtualBoxと比較して、高速に起動・停止することができるというメリットがあります。

前提条件

  • Dockerがインストールされていること
  • Gitがインストールされていること

また、今回は以下のDockerイメージを利用します。

  • nginx(webサーバ)
  • php-fpm(PHPの実行環境)
  • MySQL(データベース)
  • workspace(Laravelの開発環境がまとまっているもの)
  • phpMyAdmin(DBクライアント)

Laradockのダウンロード

$ cd
$ mkdir laravel_docker
$ git clone https://github.com/Laradock/laradock.git

作成したディレクトリ配下にlaradockが作成されます。

.envファイルの設定

.envで設定した値が、Docker起動時の設定ファイルdocker-compose.ymlに変数として使われているため、
.envファイルをコピーして編集します。

$ cd laradock
$ cp env-example .env

MySQLのバージョンは5.7に変更しました。なぜかlatestでは上手くいきませんでした。
.envを編集します。

### MYSQL #################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

docker-compose upでコンテナを起動する

docker-compose.ymlで定義した内容でサービスを開始します。
初回起動時はダウンロードしてくるためかなりの時間を要します。
2回目以降は数秒で起動しますね。

$ docker-compose up -d nginx mysql workspace phpmyadmin

完了すると、コンテナは起動状態となります。
docker psコマンドで確認すると、STATUSがUpとなっているでしょう。

Laravelプロジェクトの作成

Laravelプロジェクトはworkspace上で作成するので、workspaceのコンテナの中に入ります。

$ docker-compose exec --user=laradock workspace bash

今回はLaravelのバージョンは5.5とします。
testappの部分は任意のプロジェクト名を設定してください。

$ composer create-project laravel/laravel testapp --prefer-dist "5.5.*"

作成が完了したら、laradockディレクトリの.envファイルを書き換えます。

APP_CODE_PATH_HOST=../testapp

設定の変更を反映させるために、コンテナを再起動します。

$ docker-compose stop
$ docker-compose up -d nginx mysql

再起動後に、ブラウザで
http://localhost
にアクセスして、Laravelのwelcome画面が表示されれば上手くいっています。

PhpStormでプロジェクトを作成する

次は、PhpStormでプロジェクトを作成してみます。
任意に作成したlaravel_dockerフォルダ配下にtestappのプロジェクトフォルダが作成されていて、
こちらのファイルは、Dockerのworkspace上のファイルと同期されています。

Locationの項目は、testappのフォルダを選択すればおっけいです。

また、Filter packagesでlaravel/laravelを選択して、Createします。

migrationを行う

表示はできたので、次は、マイグレーションを行ってみます。

Laravelにはプロジェクト作成時に、/database/migrations/配下にユーザー認証用のマイグレーションファイルがあるので、workspaceに入り、コマンドを実行します。

$ docker-compose exec --user=laradock workspace bash
$ php artisan migrate

In Connection.php line 664:
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = myapp and table_name = migrations) 

ここで、僕はこういったエラーが出ました。
DBの接続に失敗しています。
下記の記事に書かれていたのですが、
MySQLのバージョンがlatestの場合に上手くいかないことがあるそうです。

一度データベースを作成してしまうと、初期化されないようなので、下記のコマンドで一度mysqlのイメージを入れ直すことで上手くいきました。

$ docker-compose down
$ rm -rf ~/.laradock/data/mysql
$ docker rmi laradock_mysql -f
$ docker rmi mysql -f
$ docker-compose build mysql

再起動後にもう一度マイグレーションを実行します。

$ docker-compose exec --user=laradock workspace bash
laradock@d2d62adadd06:/var/www$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

今度は上手くいきました。

データベースに接続する

Laravelのデータベース設定は/config/database.phpに書かれていますが、変数はlaravelプロジェクト配下の.envファイルに書きます。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

このような感じで設定すると良いと思います。

Data Sources and Driversのウィンドウを開き、MySQLを選択。

.envで設定した値を入れます。

Test Connectionで Successfulが出たらOKです。