Docker(docker-compose)で、Laravelの環境を作成

# 初めに
もともと作られた方のものを参考(パクって)展開
※<a href="https://qiita.com/A-Kira/items/1c55ef689c0f91420e81" target="_blank">こちらの方</a>のページを参考(パク…)

# ソース
https://github.com/naozo-se/Docker-Laravel
にあります。ダウンロードしたら、[実行コマンド](#実行コマンド)から

# こんな感じで作成
・php7.4 / mysql8 / nginx1.19 のイメージで作成
・sampleprojectというプロジェクト名で作成(名称変更する場合は、適当に置換を)
・確認はDocker Desktop for Windows で確認
・Ubuntuでも確認(Dockerのバージョンは以下)
　⇛Docker version 20.10.1, build 831ebea
　⇛docker-compose version 1.26.0, build d4451659

# フォルダ構成
```
laravel
　├ docker-compose.yml
　├ docker
　│　 ├ php
　│ 　│　 ├ php.ini
　│ 　│ 　└ Dockerfile
　│　 └ nginx
　│ 　　　└ default.conf
　└ server
```

# 各ファイル内容
``` docker-compose.yml
version: '3'

services:
  laravel_php:
    container_name: laravel_php
    build: ./docker/php
    volumes:
    - ./server:/var/www

  laravel_nginx:
    image: nginx:1.19
    container_name: laravel_nginx
    ports:
    - 80:80
    volumes:
    - ./server:/var/www
    - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
    - laravel_php

  laravel_db:
    image: mysql:8.0
    container_name: laravel_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: sampleproject
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpass
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
    - ./docker/db/data:/var/lib/mysql
    - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
    - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
    - 3306:3306
```

``` ../docker/php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
```

``` ../docker/php/Dockerfile
FROM php:7.4-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update && apt-get -y upgrade
RUN apt-get install -y zlib1g-dev && apt-get install -y libzip-dev
RUN docker-php-ext-install pdo_mysql zip

COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www

RUN composer global require "laravel/installer"
```

``` ../docker/nginx/default.conf
server {
    index index.php index.html;
    server_name localhost;
    root /var/www/sampleproject/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass laravel_php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
```

# 実行コマンド
## １．コンテナ構築

``` shell
docker-compose up -d
```

## ２．Laravelプロジェクト作成

#### コンテナ内に入る
``` shell
docker exec -ti laravel_php bash
```
#### バージョン６の作成コマンド(コンテナ内)
``` shell
composer create-project "laravel/laravel=6.*" sampleproject
```
#### プロジェクト作成後(そのままコンテナ内で実行)
``` shell
cd sampleproject
chmod -R 777 storage
chmod -R 777 bootstrap/cache
``` 
#### サーバー起動
``` shell 
php artisan serve
``` 
※localhostのみで接続できるはず


## ３．ＤＢ関連
#### .env の編集(プロジェクトフォルダ以下)

``` ..env
DB_CONNECTION=mysql
DB_HOST=laravel_db
DB_PORT=3306
DB_DATABASE=sampleproject
DB_USERNAME=dbuser
DB_PASSWORD=dbpass
``` 
※composeのymlで記述した参考に

#### 接続確認

``` shell
php artisan migrate
``` 

# 修正履歴
2021.01.25
・タイトル等の記載修正
・ファイル名、コマンドの誤記載修正
・ubuntuでの確認を追記
2021.02.06
・GitHubのリンクを追加