Docker ComposeでLaravel開発環境を構築その弐

前回、Docker ComposeでLaravel環境を構築してみたが、Laravelの扱いに困った。
[Docker ComposeでLaravel開発環境を構築その壱](https://qiita.com/_bobtabo_/items/42b70d334dee33befdfb)

結局コンテナに入ってLaravelインストールしたけど、、、ちょっとイマイチ。
考えた結果、docker-compose.yml達と一緒にLaravelもリポジトリ管理すれば良いんじゃないかと思った。
うん、多分コレが一番！っていうか、コレしかない！！

# マシンスペック
* Mac mini 2018
* macOS Catalina（10.15.x）
* Intel Core-i7 3.2GHz 6コア
* メモリ 32GB
* SSD 512GB

# Docker環境
* Nginx 最新版
* PHP（PHP-FPM）7.2.x
* MySQL 5.7.x
* Composer 最新版
* Laravel 5.6.x

# やること
* Docker ComposeでLaravel環境構築

# 補足
各環境を行ったり来たりするので、下記のように記載します。

```
[Mac]$ MacのターミナルでMac内の作業
[PHP]$ MacのターミナルからPHPコンテナに接続して作業
```

# docker-compose.ymlを編集

https://github.com/bobtabo/docker/blob/master/docker-compose.yml

```
services:
  nginx:
  ・・・
    volumes:
      - ~/MountPoint/docker/home:/home/docker
  ・・・
  php:
  ・・・
    volumes:
      - ~/Work/MountPoint/docker/home:/home/docker
  ・・・
  db:
    volumes:
      - ~/Work/MountPoint/docker/db/data:/var/lib/mysql
  ・・・
```

マウントポイントはコンテナファイル達から切り離していたけど、同ディレクトリにする為、下記に変更。

```
services:
  nginx:
  ・・・
    volumes:
      - ./src:/home/docker
  ・・・
  php:
  ・・・
    volumes:
      - ./src:/home/docker
  ・・・
  db:
    volumes:
      - ./db:/var/lib/mysql
  ・・・
```

# .gitignoreの編集

https://github.com/bobtabo/docker/blob/master/.gitignore

- /var/lib/mysqlのマウントは不要。
- /home/docker/laravel以外のマウントは不要。

```
/db
/src/*
!/src/laravel
```

# Laravelの準備

上記までで雛形になるけど、せっかくなのでLaravelも用意。
MacとコンテナのPHPバージョンが違ったので、コンテナ内で作業。

```
[Mac]$ docker-compose exec --user 1000 php bash

[PHP]$ composer create-project --prefer-dist laravel/laravel laravel "5.6.*"
[PHP]$ cd laravel
[PHP]$ composer require --dev barryvdh/laravel-ide-helper
[PHP]$ composer require --dev squizlabs/php_codesniffer
[PHP]$ mkdir bin
[PHP]$ vi bin/clear-laravel.sh
---
#!/bin/bash
php artisan view:clear
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache
composer dump-autoload
php artisan ide-helper:generate
php artisan ide-helper:models -N
php artisan ide-helper:meta
find . -name '._.DS_Store' -type f -ls -delete
---
:wq
[PHP]$ vi .env.example
---
:%s/DB_HOST=127.0.0.1/DB_HOST=mysql/g
:%s/DB_DATABASE=homestead/DB_DATABASE=hoge/g
:%s/DB_USERNAME=homestead/DB_USERNAME=fuga/g
:%s/DB_PASSWORD=secret/DB_PASSWORD=docker#DOCKER1234/g
---
:wq
```

完成！！
https://github.com/bobtabo/docker2

# 使い方

### Laravel環境の準備

```
[Mac]$ cd <任意のディレクトリ>
[Mac]$ git clone https://github.com/bobtabo/docker2.git docker
[Mac]$ cd docker
[Mac]$ docker-compose up -d
・・・
Creating mysql ... done
Creating php   ... done
Creating nginx ... done

[Mac]$ docker-compose exec --user 1000 php bash

[PHP]$ pwd
/home/docker

[PHP]$ cd laravel
[PHP]$ composer install
[PHP]$ chmod -R 777 storage
[PHP]$ chmod -R 777 bootstrap/cache
[PHP]$ cp -p .env.example .env
[PHP]$ php artisan key:generate
[PHP]$ chmod 755 bin/clear-laravel.sh
[PHP]$ bin/clear-laravel.sh
[PHP]$ php artisan migrate:fresh --seed
```

### 動作確認（Macのhosts編集）
```
[Mac]$ sudo vi /private/etc/hosts
★下記を点線内を追記
---
127.0.0.1 laravel.local
---
:wq
```

### ブラウザで動作確認
http://laravel.local/

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/3f735218-18a5-d1c0-d8dc-c433bf65cad7.png)

### コンテナ削除

```
[Mac]$ docker-compose down --rmi all --volumes
```

※参考
[《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド](https://qiita.com/suin/items/19d65e191b96a0079417)