苦手なDockerを使ってLaravel開発環境構築を構築（MailHog使いたい）

## きっかけ
- 環境開発苦手
- 長いコマンド打たなきゃでdocker怖い
- ちょうどLaravelの開発環境ほしかった

とにかく環境構築・dockerに対しての喰わず嫌い（つまみ食い嫌い）
感が半端ないのであえてdockerでLaravel環境構築やってみる

## Laradockとは？
Laradock？？dockerじゃないんかい！！
というつっこみを入れつつ・・・

>A full PHP development environment for Docker.
Supports a variety of useful Docker Images, pre-configured to provide a wonderful PHP development environment.

参照：[Lradock](https://laradock.io/)

Laradockとは、Laravelコミュニティの有志がメンテナンスしている
オープンソースのLaravel環境開発であり、「Docker」上で動作する。

なのでざっくりと説明すると、
**dockerが土地でLaradockが家**みたいな関係なのだ。

## Laradockのダウンロードとdockerの初期化

#### プロジェクトのディレクトリ作成
**最終的なディレクトリのイメージ**

```
projectname
     laradock-projectname
     laravel-projectname
```
上記のディレクトリをイメージしながらまず最初に`projectname`ディレクトリを作成し、その中に入る。

```
$ mkdir projectname
$ cd projectname 
```

#### Laradockをダウンロード
LaradockをGitHubからクローンしてくる。つけたいディレクトリ名前を最後に入力。

```
$ git clone https://github.com/Laradock/laradock.git laradock-projectname
```

#### Laradockの環境設定ファイルを作成
Laradockディレクトリの`laradock-projectname`に入っる。
`env-example`ファイルを`.env`としてコピーする。

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

#### dockerコンテナの初期化
コンテナ初期化では必要なファイルのダウンロードをするため、割と時間がかかる。

```
$ docker-compose up -d nginx mysql workspace phpmyadmin
```
こちらのコマンドでStateがUpになっていれば無事成功！

```
$ docker-compose ps
```

## Laravelプロジェクトの作成
Laravelプロジェクトは「workspace」コンテナ上に作成します。

#### 「workspace」コンテナへログイン
「workspace」コンテナにはLaravelに必要なものが一式用意されているため、
composerなどは「workspace」コンテナを通して実行。

とりあえずログイン

```
$ docker-composer exec workspace bash
```
composerコマンドを実行して新規プロジェクトを作成。
今回はlaravel5.5で作成したかったのでバージョン指定。

```
$ composer create-project laravel/laravel laravel-projectname --prefer-dist "5.5.*"
```
無事作成できたらコンテナからログアウト

```
$ exit
```

#### Laradockの環境設定ファイルを設定
先ほど作成したLaradockディレクトリ配下の`.env`を変更。
※必要部分以外省略

```
### Paths #################################################

# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../laravel-projectname

# Point to where the `APP_CODE_PATH_HOST` should be in the container
APP_CODE_PATH_CONTAINER=/var/www

# You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy`
APP_CODE_CONTAINER_FLAG=:cached

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock-projectname/data


```

#### nginxの設定
Laradockディレクトり配下の`docker-compose.yml`を変更する。
これでポート番号を8888に変更することができた。
※必要部分以外省略

```
### NGINX Server #########################################
    nginx:
      build:
        context: ./nginx
        args:
          - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
          - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
          - CHANGE_SOURCE=${CHANGE_SOURCE}
          - http_proxy
          - https_proxy
          - no_proxy
      volumes:
        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
        - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
        - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
        - ${NGINX_SSL_PATH}:/etc/nginx/ssl
      ports:
        - "8888:80"
        - "443:443"
      depends_on:
        - php-fpm
      networks:
        - frontend
        - backend
``` 

#### コンテナ再起動
一通り設定が終わったところで、コンテナを再起動。

```
$ docker-compose stop
$ docker-compose up -d nginx mysql workspace phpmyadmin
```

## そしていよいよ・・・・・・・
ブラウザを開いて`https:8888`にアクセス
![スクリーンショット 2019-07-23 23.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348630/46e2eb0a-c77a-4724-ac39-69be8d4d414d.png)

**じゃじゃじゃーーーん!!!!**