การพัฒนา Laravel ด้วย Docker จะช่วยให้เราควบคุมสภาพแวดล้อมได้ง่าย และสามารถแชร์โปรเจกต์ให้ทีมอื่นใช้ได้ทันทีโดยไม่ต้องติดตั้ง PHP หรือ Composer บนเครื่องเลย บทความนี้จะสอนคุณตั้งแต่ 0 จนเปิดเว็บ Laravel สำเร็จด้วย PHP 8.2 และ Nginx

โครงสร้างไฟล์โปรเจกต์

laravel-docker/
├── docker-compose.yml
├── php/
│   └── Dockerfile
├── nginx/
│   └── default.conf
└── src/     ← โฟลเดอร์ Laravel Project

docker-compose.yml

version: '3.8'

services:
  app:
    build:
      context: ./php
    container_name: laravel-php82
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
    networks:
      - appnet

  nginx:
    image: nginx:stable
    container_name: laravel-nginx
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - appnet

networks:
  appnet:
    driver: bridge

PHP Dockerfile: PHP 8.2 + Composer

สร้างไฟล์ php/Dockerfile

FROM php:8.2-fpm

RUN apt-get update && apt-get install -y \
    git curl unzip zip \
    libzip-dev libpng-dev libjpeg62-turbo-dev libfreetype6-dev \
    libonig-dev libxml2-dev \
    && docker-php-ext-install pdo pdo_mysql mbstring zip exif pcntl

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

Nginx Config สำหรับ Laravel

server {
    listen 80;
    index index.php index.html;
    server_name localhost;

    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

สร้าง Laravel (หรือคัดมาวางใน src/)

หากยังไม่มี Laravel ให้สร้างแบบนี้:

docker compose run --rm app composer create-project laravel/laravel .

หรือคัด Laravel ของคุณไปใส่ในโฟลเดอร์ src/

เริ่มใช้งาน Laravel

docker compose up -d

เปิดเบราว์เซอร์ไปที่:
👉 http://localhost:8080

ทดสอบ artisan

docker compose exec app bash
php artisan