docker-composeでLaravelの開発環境を構築する(nginx+PHP-FPM+mariaDB+node)【Laravel12対応版】

こんにちは!たくお(@TB_IQ)です。

docker-composeでLaravelの開発環境を構築する方法を紹介します。

スポンサーリンク

ディレクトリ構成 / 必要なファイル

ディレクトリ構成

ディレクトリ構成は以下です。

.
├── compose.yaml
├── docker
│   ├── nginx
│   │   ├── Dockerfile
│   │   └── default.conf
│   ├── node
│   │   └── Dockerfile
│   └── php
│       ├── Dockerfile
│       └── php.ini
└── html

dockerディレクトリ内のファイル

各ファイルの内容は以下です。

compose.yaml

services:
  # Nginx
  nginx:
    container_name: example-nginx
    build: ./docker/nginx
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - php

  # PHP
  php:
    container_name: example-php
    build: ./docker/php
    volumes:
      - ./html:/usr/share/nginx/html

  # Database (MariaDB 10.10.2)
  mariadb:
    container_name: example-db
    image: mariadb:10.10.2
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: example-db
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/mariadb/data:/var/lib/mysql
      - ./docker/mariadb/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - "3306:3306"

  # composer
  composer:
    container_name: example-composer
    image: composer:2
    command: composer install -o
    volumes:
      - ./html:/usr/share/nginx/html:delegated
    working_dir: /usr/share/nginx/html

  # node (npm)
  node:
    container_name: example-node
    build: ./docker/node
    volumes:
      - ./html:/usr/share/nginx/html:delegated
    working_dir: /usr/share/nginx/html
		

nginx/Dockerfile

FROM nginx:1.28

# nginxの設定ファイルをコピー
COPY default.conf /etc/nginx/conf.d/default.conf

nginx/default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html/public;
        index  index.php;
        try_files $uri $uri/ /index.php?$query_string;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html/public;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

php/Dockerfile

FROM php:8-fpm

# PDO を使えるようにする設定
RUN apt-get update
RUN apt-get install zip unzip
RUN docker-php-ext-install pdo_mysql

WORKDIR /usr/share/nginx/html

COPY php.ini /usr/local/etc/php

php/php.ini

date.timezone = "Asia/Tokyo"

# 以下はファイルのアップ等をするなら必要
memory_limit = 10G
post_max_size = 10G
upload_max_filesize = 10G

node/Dockerfile

FROM node:22.16.0-alpine

初回LaravelのWelcomeページを表示するまでの作業手順

docker-composeビルド

docker compose up -d

composerでLaravelプロジェクト作成

docker compose run --rm composer composer create-project laravel/laravel example-laravel

Laravelファイルを1つ上の階層へ移動

cd html/example-laravel  # Laravelプロジェクトのディレクトリに移動

mv * ../
mv .* ../ # 上記コマンドでは.envファイルが移動しないためこの行も実行してください

cd ../ # /htmlに移動
rm -rf example-laravel # example-laravelを削除

composerインストール実行

docker compose run --rm composer composer install

これでhttp://localhostにアクセスするとLaravelのウェルカムページが表示されますが、データベースがSqliteのままですので、MariaDBに変更します。

.env を以下のように修正します。

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

DB_CONNECTION=mysql
DB_HOST=example-db
DB_PORT=3306
DB_DATABASE=example-db
DB_USERNAME=docker
DB_PASSWORD=docker

以下コマンドで.envの内容を反映し、マイグレーションを実施します。

docker compose exec php php artisan config:cache
docker compose exec php php artisan migrate:fresh --seed

npm installも忘れず実行しておきましょう。

docker compose run --rm node npm install

スポンサーリンク

おわりに

普段、私が使用しているLaravelの開発環境の作り方について解説しました。

もし上手く動かないなどありましたら、X経由でDM送って頂いても良いですし、お問い合わせフォームからお問い合わせください。

というわけで次回もよしなに!