Laradockによるlaravel開発環境構築

# はじめに
今更ですがLaravelをLaradockを使い環境構築してみます。
(この投稿は自分用メモでもあります。)

# 前提
docker-composeコマンドが使える

```.sh
> docker-compose --version
docker-compose version 1.23.2, build 1110ad01
```

gitコマンドが使える

```.sh
> git --version
git version 2.21.0.windows.1
```

ちなみにPCはWindows10 proを使用しています。

# 1.作業ディレクトリの作成&Laradockのクローン
```.sh
# 作業ディレクトリを作成
> mkdir dockerworkspace

# 作業ディレクトリに移動
> cd dockerworkspace

# GitからLaradockをダウンロード
> git clone https://github.com/LaraDock/laradock.git
```

# 2.「.env」ファイルの作成
```.sh
# laradockディレクトリに移動
> cd laradock

# env-exampleをコピーし.envファイル作成
> cp env-example .env
```

# 3.コンテナの起動
```.sh
# laradockディレクトリ上で入力
# コンテナの起動
> docker-compose up -d nginx
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done
```

コンテナの起動を確認してみましょう。

```.sh
# laradockディレクトリ上で入力
# コンテナの一覧を表示
> docker-compose ps
           Name                          Command                State                      Ports
------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up         2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld      Exit 255   0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        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_phpmyadmin_1         /run.sh supervisord -n -j  ...   Exit 255   0.0.0.0:8080->80/tcp, 9000/tcp
laradock_redis_1              docker-entrypoint.sh redis ...   Exit 255   0.0.0.0:6379->6379/tcp
laradock_workspace_1          /sbin/my_init                    Up         0.0.0.0:2222->22/tcp
```
Stateがupになっていれば起動していることになります。
[http://localhost](http://localhost)にアクセスします。
![nginx_404.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247466/e41cc007-d072-476a-b72c-eb26573a5633.png)

nginxの起動を確認できました。Not Foundは後ほど対処します。

# 4.Laravelプロジェクトの作成
laradock_workspace_1にアクセスしLaravelアプリケーションを作成します。

```.sh
# laradockディレクトリ上で入力
# workspaceコンテナにアクセス
# root@xxxxxxxx:/var/www$ というディレクトリに入る
> docker-compose exec --user=laradock workspace bash

# Laravelアプリケーションの作成
# ここではsample_appという名前で作成
root@xxxxxxxx:/var/www$ composer create-project laravel/laravel sampleApp
```

# 5.nginxの設定ファイルの編集
```.sh
root@xxxxxxxx:/var/www$ exit

# laradockディレクトリ上で入力
# コンテナの停止
> docker-compose stop

# laradockディレクトリ上で入力
# dockerworkspace/laradock/nginx/sitesの中のdefaul.confをdefault.conf.backup等の名前にしコピー
> cd nginx/sites
> cp default.conf default.conf.backup

# 同じディレクトリにあるlaravel.conf.exampleの中のテキストをコピーし、default.confにペースト
> cp laravel.conf.example default.conf
```

dockerworkspace/laradock/nginx/sites/default.confを編集します。

```default.conf
# 一部抜粋
server_name laravel.test;
　　# root /var/www/laravel/public;     # 変更前
    root /var/www/sampleApp/public;    # 変更後
    index index.php index.html index.htm;
```

さらにlaradockディレクトリにある.env(はじめにコピーして作ったファイルですね)も編集します。

```　.env
# 一部抜粋
### Paths #################################################

# Point to the path of your applications code on your host
# APP_CODE_PATH_HOST=../            # 変更前
APP_CODE_PATH_HOST=../sampleApp    # 変更後
```

# 6.LaravelのWelcome画面を見る
```.sh
> docker-compose up -d nginx
```
[http://localhost](http://localhost)にアクセスします。
![laravel_welcome.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247466/1fe64b46-6190-20fb-3f05-dbf07939e781.png)

# 追記
## MySQLに接続
## 設定ファイルの編集
Laradockの初期設定ではMySQLの最新が設定されており認証でエラーが出てしまうそうです。laradock/.envを編集します。

```laradock/.env
### MYSQL #################################################

# MYSQL_VERSION=latest   # 変更前
MYSQL_VERSION=5.7        # 変更後
```
Laravelの設定もします。sample_app/.envを編集します。

```sampleApp/.env
DB_CONNECTION=mysql
# DB_HOST=127.0.0.1        # 変更前
DB_HOST=mysql              # 変更後
DB_PORT=3306
# DB_DATABASE=homestead    # 変更前
# DB_USERNAME=homestead    # 変更前
DB_DATABASE=default        # 変更後
DB_USERNAME=default        # 変更後
DB_PASSWORD=secret
```
これでMySQLへの接続ができます。

### migrateしてみる
```.sh
# laradockディレクトリ上で入力
> docker-compose up -d nginx mysql
# 省略
> docker-compose exec --user=laradock workspace bash
root@xxxxxxxx:/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
```

### DBを見てみる
```.sh
# laradockディレクトリ上で入力
> docker-compose exec mysql bash
root@xxxxxxxxxx:/# mysql -udefault -psecret
# 省略
mysql> use default;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql > show tables;
+-------------------+
| Tables_in_default |
+-------------------+
| migrations        |
| password_resets   |
| users             |
+-------------------+
4 rows in set (0.00 sec)
```

# 最後に
DockerはLaradockでしか触ったことがないので間違った認識、改善点等ありましたらご指摘お願いいたします。:bow_tone1:
Docker勉強しよう、、、。