Dockerで超簡単にlaravel環境を構築する方法

# Dockerで超簡単にlaravel環境を構築する方法

今更感ありますが、試したら簡単すぎました。

## 使用環境
Mac環境での説明になります。
gitインストールされている前提での説明になります。
今回はNginxでの立ち上げにあります。（Apacheの場合でも途中まで一緒です。）

## docker for macをインストール
[docker for mac](https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac)をインストール。
※特にこだわりがなければ`Stable`版で問題ないです。

細かいdocker for macインストール方法は省きます。

## ターミナルで動作確認
以下コマンドを実行し、正常に動作していることを確認

```
$ docker --version
$ docker-compose --version
$ docker-machine --version
```
バージョンそれぞれバージョンが表示されれば問題ありません。

## laradock用ディレクトリ作成
好きなディレクトリにlaradock用ディレクトリ作成。
当方は`DockerLaravel`ディレクトリを作成しました。

ディレクトリ移動します。
`$ cd DockerLaravel`

## laradockリポジトリをcloneします
`$ git clone https://github.com/LaraDock/laradock.git`

すると`laradock`なるディレクトリが`DockerLaravel`ディレクトリ内に作成しているので、移動します。

`$ cd laradock`

## docker-composeコマンドを使用してlaradockを立ち上げる
以下コマンドを実行し、laradockを立ち上げます。

`$ docker-compose up -d workspace`

ここでエラーが出なければ次へ進んでください。

※※私は大量の__warning__と__error__が出ました。※※

エラーが出た方は`laradock`ディレクトリ内で以下のコマンドを実行して下さい。

`$ cp env-example .env`

.envファイルをコピーして作成してあげているだけです。

その後再び

`$ docker-compose up -d workspace`

を実行。

## 正常にlaradockが立ち上がっているか確認

`$ docker-compose ps`実行

`laradock_workspace_1`があれば問題ないです。

## bashでログインします
`$ docker exec -it laradock_workspace_1 /bin/bash`

上記コマンドを実行しログインします。

## laravelインストール
ログインした直後`/var/www`にいると思いますが、いなかったら`$ cd /var/www`で移動してください。

docker内の`/var/www`が先述の`DockerLaravel`ディレクトリとマウント（紐付け）されているので、docker内の`/var/www`で作成したディレクトリやファイルがMac上の`DockerLaravel`ディレクトリに作成されます。その逆も然り。

その後、以下のコマンドでlaravelインストール

`$ composer create-project laravel/laravel ProjectName "5.3.*"`

※当方laravelバージョン5.3系が良かったので指定していますが、`"5.3.*"` 部分を削れば最新バージョンになります。

※`ProjectName` 部分は適宜お好きなプロジェクト名に変えてください。

結構時間かかりますが、下手に止めず気長にお待ち下さい。(`Updating dependencies (including require-dev)`辺りで止まって不安になりました…)

## dockerから抜け、一度dockerと止める
`$ exit`

上記でログインしたdockerから抜けられます。

そして以下のコマンドで一度動作中の`laradock_workspace_1`を止めます。

`$ docker-compose stop`

## docker-compose.ymlとNginxのドキュメントルートを修正

`$ vim docker-compose.yml`で修正します。

```
### Applications Code Container #############################
applications:
       image: tianon/true
       volumes:
	       ## 変更前
           #- ${APPLICATION}:/var/www
           ## 変更後
           - ../ProjectName/:/var/www/ProjectName
```

```
 ### Nginx Server Container ##################################

     nginx:
       build:
         context: ./nginx
         args:
           - PHP_UPSTREAM=php-fpm
       volumes_from:
         - applications
       volumes:
         - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
         - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
       ports:
	     ## 変更前
         #- "${NGINX_HOST_HTTP_PORT}:80"
         ## 変更後
         - "8080:80"
         ## 変更前
         #- "${NGINX_HOST_HTTPS_PORT}:443"
         ## 変更後
         - "443:443"
       depends_on:
         - php-fpm
       networks:
         - frontend
         - backend
```

Nginxのドキュメントルートの修正

`$ vim nginx/sites/default.conf`で修正します。

```
     ## 変更前
     #root /var/www/public;
     ## 変更後
     root /var/www/ProjectName/public;
```

## docker-compose up 実行
`$ docker-compose up -d php-fpm nginx mysql`を実行。

正常に処理が終了した後、[http://localhost:8080/](http://localhost:8080/)へアクセス。

laravelのトップページが表示されていれば終了です。

## まとめ
最初のみ確認しながらの対応だったので、時間がかかりましたが、それにしても一つずつインストールするより圧倒的に早いです。

二度目以降は数分で環境構築が終わるでしょうし、何より、先述の`DockerLaravel`フォルダ（中身：laradock & ProjectName）ごと人へ渡し、`docker-compose up -d php-fpm nginx mysql workspace`を実行させれば環境構築終了と考えるとかなり有能だと感じます。