DockerでLaravelの開発環境を構築する(更新:2017/07/03)

## はじめに :whale: 
[Laradock - official](http://laradock.io/)
[Laravel使った開発にLaradockを使うというのはどうだろう](http://qiita.com/niisan-tokyo/items/d4485b8bb4fbfcfcc6be)
を参考にLaravelの開発環境を構築してみます。
Qiitaの記事は非常にわかりやすいのですが、バージョンの問題なのか一部現在の公式と異なる部分がありましたので公式優先で行きます。

また、[@y_tsubuku](https://twitter.com/y_tsubuku)が開発する[yaritori - メール共有システム](https://yaritori.jp/)も、良ければご覧ください :tada: 

追記） [エンジニアの募集もはじめました！!](https://www.wantedly.com/projects/509643)

## 環境 :deciduous_tree: 
* Mac OS X El Capitan 10.11.6（15G31）
* [Docker for Mac](http://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)

## Laradockをcloneする :sheep: 
まずはapplicationのルートディレクトリを作成しましょう。
今回は**app**としました。そこでLaradockをcloneします。
LaradockにはDockerfileやComposeのymlファイルが含まれています。

```
$ mkdir app
$ cd app
$ git clone https://github.com/LaraDock/laradock.git
```

また、この時点でenvファイルもコピーしておきます。

```
$ cd laradock
$ cp env-example .env
```

簡単！

## コンテナを起動する :rocket: 
```
$ docker-compose up -d nginx mysql redis beanstalkd
```
**一発目はimageを落としてきたりするので、かなり時間が掛かります**

完了したらステータスを確認しましょう。

```
laradock $docker-compose ps
         Name                        Command                State                      Ports                   
--------------------------------------------------------------------------------------------------------------
laradock_applications_1   /true                            Exit 0                                              
laradock_beanstalkd_1     /usr/bin/beanstalkd              Exit 137                                            
laradock_mysql_1          docker-entrypoint.sh mysqld      Exit 0                                              
laradock_nginx_1          nginx                            Up         0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp 
laradock_php-fpm_1        docker-php-entrypoint php-fpm    Up         9000/tcp                                 
laradock_redis_1          docker-entrypoint.sh redis ...   Exit 0                                              
laradock_workspace_1      /sbin/my_init                    Up         0.0.0.0:2222->22/tcp 
```

いい感じ！

ここで**.env**にも情報を追加してあげます。

```file:.env
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
```

ここで公式では

<img width="480" alt="enjoy.png" src="https://qiita-image-store.s3.amazonaws.com/0/99874/03c0265d-7977-7daf-88a6-5be424d72a8a.png">


と記載されてますが、実際に[アクセス](http://localhost/)してみると…

![404.png](https://qiita-image-store.s3.amazonaws.com/0/99874/71f83d67-5c12-ec12-264e-99717bdd0076.png)

**:((((**


まだenjoyさせてくれないようなので、次はLaravelのプロジェクトを作成してみます。

## Laravelのプロジェクトを作成する :tada: 
**composer**を使用してLaravelのプロジェクトを作成しますが、
コンテナに予め**composer**が入っているので、そちらを利用しましょう

#### ワークスペース（コンテナ）へログイン
`docker exec -it {ログイン先のNAMES} /bin/bash`でログインします。
今回は、**laradock_workspace_1**にログインするため、以下のようになります。

```
$ docker exec -it laradock_workspace_1 /bin/bash
```

#### Laravelプロジェクトを作成
`composer create-project laravel/laravel {アプリケーション名}`で作成します。
今回は**testapp**という名前にしました。

```
# composer create-project laravel/laravel testapp
```

## データボリュームを変更する :sparkles: 
これだけではまだ動きませんので、データボリュームを変更して動くようにします。

一旦、コンテナを停止します。

```
$ docker-compose stop
```

**docker-compose.yml**を書き換えて、ホストのtestappディレクトリが/var/www直下にマウントされるようにします。

```yml:docker-compose.yml
     applications:
       image: tianon/true
       volumes:
-        - ${APPLICATION}:/var/www
+        - ${APPLICATION}/testapp:/var/www
```

再度、コンテナを起動します。

```
$ docker-compose up -d nginx mysql redis beanstalkd
```

## ブラウザで確認する :eyeglasses: 
早速、[アクセス](http://localhost/)してみましょう。

![tada.png](https://qiita-image-store.s3.amazonaws.com/0/99874/9398484d-6d04-76cf-1b9b-7f1fe962d6bd.png)


**:)))))**

ようやくenjoyできました。あとはザクザク開発していきましょう。

## バージョンを確認する :eyes: 

**PHP**

```
# php -v
PHP 7.1.4-1+deb.sury.org~xenial+1 (cli) (built: Apr 11 2017 22:12:32) ( NTS )
```

**Laravel**

```
# php artisan --version
Laravel Framework 5.4.24
```

## 終わりに
とりあえず、ゼロからLaravelの開発環境を整えるまでできました。
実際に開発をすすめる中で**「これ必要やん」**みたいなのがあったら随時足していこうと思います。