【Docker】PHP8+MySQL8+Nginx+Laravel9で環境構築

プログラミング勉強

現在メモ程度なので、随時更新する予定。

前提条件

MacOS(IntelCPU)、Dockerインストール済み。

PHPは8、MySQLは8、Laravelは9と最新(現時点で)のバージョンを使う。

ディレクトリ・ファイル構成

.
├── docker
│       ├── nginx
│         │        └── default.conf.ini
│       ├── php
│         │        ├── Dockerfile
│         │        └── php.ini
├── docker-compose.yml
└── (Laravelのアプリケーションディレクトリ)

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:8.0
    container_name: db
    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

php/Dockerfile

FROM php:8.1.9-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update && apt-get install -y \
zlib1g-dev \
libzip-dev \
vim \
&& docker-php-ext-install zip pdo_mysql opcache
WORKDIR /var/www
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
RUN composer global require "laravel/installer"

php/php.ini

[Date]
#タイムゾーンの設定
date.timezone = "Asia/Tokyo"

[mbstring]
#文字コードの設定
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

nginx/default.conf

server {
  listen 80;
  root /var/www/eve/public;
  index index.php;
  
  location / {
    root /var/www/eve/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;
  }
}

Laravelインストール(=プロジェクト作成)

アプリのコンテナに入ります。コンテナ起動していない場合は先にしておいてください。

docker compose exec app bash

以下のコマンドを実行します。

composer create-project --prefer-dist laravel/laravel 【プロジェクト名】 "9.*"

ほか注意点など

設定ファイルなど更新したら、Dockerをリビルドするようにしましょう。
↓参考
https://desuto.net/docker-build-image-no-cache/