Laravel開発環境をDockerを使って構築する（LEMP環境)


今回はDocker, docker-composeを使ってローカルに以下の環境を構築します。（LEMP環境）

Laravel 8.0
PHP 8.0
Nginx
MySQL 5.7

**前提条件**
Macbook Air M2  バージョン　14.0
iTerm2 使用
Docker がローカルにインストールされている
Docker Compose がローカルにインストールされている
_______________
``今回はiTerm2で行います``
### プロジェクト用のディレクトリ作成
名前はなんでもいいですが、laravel_dockerという名前の新しいディレクトリを作成しました。
```
mkdir laravel_docker
cd laravel_docker
```

### 環境構築用のディレクトリ作成
laravel_docker内に以下のような構造で作成していきます。
![スクリーンショット 2023-09-30 23.20.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/cc24ebe6-0058-95cb-484a-c842f2f46260.png)

### :star:docker-compose.yml
laravel_docker内に``docker-compose.yml``ファイルを作成します。
```
touch docker-compose.yml
```
docker-compose.ymlを開いて編集します。
```
vim docker-compose.yml
```
```docker-compose.yml
version: '3'
services:
  app:
    container_name: app
    build: ./docker/php
    volumes:
      - .:/var/www
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 8000:80
    volumes:
      - .:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /var/www
    depends_on:
      - app
  db:
    image: mysql:5.7
    container_name: db
    platform: linux/amd64
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
      MYSQL_USER: db-user
      MYSQL_PASSWORD: db-pass
      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
```
____________
### :star:php > php.iniファイルの設定


laravel_docker内に``docker``ディレクトリを作成します。
```
mkdir docker
cd docker
```
dockerディレクトリ内に``php``をディレクトリを作成
``php``ディレクトリ内に``php.ini``をファイル作成
```
mkdir php && cd php
touch　php.ini
```
#### php.iniの設定
php.iniは、phpの設定ファイルです。
```php: php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[opcache]
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
```
### php > Dockerfileの設定
phpディレクトリ内に``Dockerfile``ファイルを作成
```
touch Dockerfile
```
```php:Dockerfile
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
  && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
  && docker-php-ext-install zip pdo_mysql

#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/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"
```
### nginx > default.confの設定
dockerディレクトリ内に``nginx``ディレクトリを作成
``nginx``ディレクトリ内に``default.conf``ファイル作成
```
mkdir nginx && cd nginx
touch default.conf
```
```php: default.conf
server {
  listen 80;
  root /var/www/laravel-project/public;
  index index.php;
  location / {
    root /var/www/laravel-project/public;
    index index.php;
    try_files $uri $uri/ /index.php$query_string;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000; 
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}
```
_________
### コンテナの立ち上げ
```
docker-compose up -d
```
コンテナが立ち上がっているかの確認
```
docker-compose ps
```
以下のように全てのコンテナのStateがUpになっていたらOK!
![スクリーンショット 2023-09-30 23.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/e0b04ba8-d4d3-89db-38e1-1156826b7b23.png)
___________

参考

https://docs.docker.jp/engine/reference/commandline/compose_ps.html

https://docs.docker.com/engine/reference/commandline/compose_ps/