laradockの環境設定からMySQL接続まで

#はじめに
laradockでの環境構築でかなり時間がかかり苦労しました。
自分と同じような境遇の方の一助となれば幸いです。
また何か間違っていましたらコメント頂けるとありがたいです。


#前提
・MacOSを使用していること
・laradock for Mac がインストールされていること
・git が使えること


#ポイント
①MySQL5.7へダウングレードすること
②MySQLを再ビルドする場合は
①image ②volume ③laradock内の.envの３つを変更すること
（②の内容は作業中）

#laradockをクローンする

mkdir [ディレクトリ名] でファイル作成 cd [ディレクトリ名]で、移動。
今回はlaravel_appという名前にします。

```desktop
$ mkdir laravel_app 
$ cd laravel_app
```
laravel_app内にgit cloneする

```laravel_app
$ git clone https://github.com/LaraDock/laradock.git
```
laradockディレクトリが確認できたらcdで移動

```laravel_app
$ cd laradock
```
#.envファイルの作成・編集

.envファイルを作成する

```laradock
$ cp env-example .env
```
####▼ポイント
MySQLのバージョンを指定する。

何やらmysqlのバージョンが8.0以上になっていると
セキュリティの関係でDockerがうまく動作しないらしい。

`vim .env`で先ほど作成したlaradock/.envのmysqlの記載を変更する

```laradock/.env
MYSQL_VERSION=5.7　
```
ついでにもうひとつ。
後でインストールするlaravelの名前（なんでもいい）も設定しておく。
ここでは`laravel-practice`にします。

```laradock/.env
APP_CODE_PATH_HOST=../laravel-practice/
```

#コンテナの作成

`docker-compose up -d nginx mysql phpmyadmin`でコンテナを作成する

※Dockerのアプリが立ち上がっていないとエラーになります！！
エラー（Couldn't connect to Docker daemon）

```laradock
$ docker-compose up -d nginx mysql phpmyadmin
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_mysql_1            ... done
Recreating laradock_phpmyadmin_1       ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done
```

`docker ps`コマンド、もしくは`docker container ls`コマンドで
コンテナが立ち上がっているか確認

statusがupになっていれば無事に起動している

```laradock
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                      NAMES
a4204c06f872        laradock_phpmyadmin   "/docker-entrypoint.…"   5 minutes ago         Up 22 seconds       0.0.0.0:8080->80/tcp                       laradock_phpmyadmin_1
ba7a3de12bb8        laradock_mysql        "docker-entrypoint.s…"   5 minutes ago         Up 26 seconds       0.0.0.0:3306->3306/tcp                     laradock_mysql_1
e18f799feb80        laradock_nginx        "/bin/bash /opt/star…"   5 minutes ago         Up 25 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
3cfac25ab736        laradock_php-fpm      "docker-php-entrypoi…"   5 minutes ago         Up 25 minutes       9000/tcp                                   laradock_php-fpm_1
0fce26e9732d        laradock_workspace    "/sbin/my_init"          5 minutes ago         Up 25 minutes       0.0.0.0:2222->22/tcp                       laradock_workspace_1
5acb64003410        docker:dind           "dockerd-entrypoint.…"   5 minutes ago         Up 25 minutes       2375-2376/tcp                              laradock_docker-in-docker_1
```

先ほど起動していることを確認したコンテナ`laradock_workspace`にアクセスし
Laravelプロジェクトを立ち上げる

※rootで入ると後々警告が出るので　--user=laradockで入ったほうがいい。
（--user=laradock書かなくても実行はされます）

```laradock
$ docker-compose exec --user=laradock workspace /bin/bash
```
@の前がlaradockかrootになっていれば成功。
いよいよlaravelをインストール。

laravel-practiceの部分はお好きな名前で大丈夫。
（最初に.envのAPP_CODE_PATH_HOSTに書いた名前）

```root
$ root@f13fff2dfc34:/var/www#　composer create-project laravel/laravel laravel-practice
```

lsでlaravel-practiceがあれば、インストール成功。

```root
$ root@f13fff2dfc34:/var/www# ls
laradock  laravel-practice
```

laravel-practiceの.envを編集。
一度exitで出て、laravel-practiceに移動する。

laravel-practice内の.envファイルを修正。

```laravel-practice/.env
$ DB_CONNECTION=mysql
DB_HOST=mysql　//変更
DB_PORT=3306
DB_DATABASE=default //変更
DB_USERNAME=default　//変更
DB_PASSWORD=secret　//変更
```

できたらDockerの再起動を行う。

```laradock
$ docker-compose up -d nginx mysql phpmyadmin
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_mysql_1            ... done
Recreating laradock_phpmyadmin_1       ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done
```

（http://localhost/ )でlaravelのページが表示されれば成功。

###最後にマイグレーションできるか確認。

```laradock
$ $docker-compose exec workspace /bin/bash
```

で再度workspaceに入る。
`php artisan migrate`でマイグレート

```root
root@64aa8ef8bf14:/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 (0.13 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.09 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)
```

お疲れ様でした。