หมวดหมู่: Cloud Computing

Docker สำหรับ PHP Local Development: รวมศูนย์ Runtime และ Database แยก Workspace อิสระDocker สำหรับ PHP Local Development: รวมศูนย์ Runtime และ Database แยก Workspace อิสระ

คู่มือฉบับนี้รวบรวมไฟล์คอนฟิกฉบับสมบูรณ์พร้อม Bash Script แบบ All-in-One ที่ผ่านการทดสอบลำดับการ Mount Volume อย่างรัดกุม (สร้างโฟลเดอร์ src/ ให้พร้อมก่อน Container เริ่มทำงาน) เพื่อป้องกันปัญหา chdir failed: no such file or directory พร้อมติดตั้ง WordPress 7.1 และ Laravel 13 เชื่อมต่อฐานข้อมูล MariaDB 12.3 กลางโดยอัตโนมัติผ่าน Terminal 100%




แนวคิดและสถาปัตยกรรมระบบ

SQL

┌──────────────────────────────┐
                            │    Docker Host (OrbStack)    │
                            │   Network: shared_dev_net    │
                            └──────────────┬───────────────┘
                                           │
         ┌─────────────────────────────────┼─────────────────────────────────┐
         │                                 │                                 │
┌────────▼────────────────┐     ┌──────────▼───────────────┐      ┌──────────▼───────────────┐
│     db_mariadb:3306     │     │    wordpress_app_7_1     │      │    laravel_app_13_0      │
│  (Database กลางก้อนเดียว) │     │ - wp71_web (พอร์ต 8082)   │      │ - laravel13_web (8083)   │
└─────────────────────────┘     │ - wp71_app (PHP-FPM)     │      │ - laravel13_app (PHP)    │
                                └──────────▲───────────────┘      └──────────▲───────────────┘
                                           │                                 │
                                           └────────────────┬────────────────┘
                                                            │
                                            ┌───────────────┴────────────────┐
                                            │      Shared Base Runtime       │
                                            │        (php_dev_8_5/)          │
                                            │   - PHP 8.3 / OPcache / Xdebug │
                                            │   - Composer 2.x               │
                                            └────────────────────────────────┘
  • Centralized Base Runtime (php_dev_8_5/): จัดการ Dockerfile กลางจุดเดียว รวม Extensions ครบชุด (pdo_mysql, mysqli, gd, intl, mbstring, zip, bcmath, opcache, exif) พร้อมฝัง Xdebug 3.x และ Composer 2.x
  • Shared Database (mariadb_12_3/): รัน MariaDB Container กลางตัวเดียว (db_mariadb:3306) ช่วยประหยัด RAM เครื่อง Host ลงกว่า 60%
  • Isolated Web Workspaces: แยก Nginx Web Server อิสระ (8082 สำหรับ WordPress และ 8083 สำหรับ Laravel) โดยชี้ FastCGI ไปยัง Application Container ของแต่ละ Stack
  • Deterministic Underscore Versioning: ใช้รูปแบบ _<major>_<minor> (เช่น php_dev_8_5, wordpress_app_7_1, laravel_app_13_0) เพื่อความถูกต้องตามมาตรฐาน Docker Compose



โครงสร้างโฟลเดอร์ทั้งหมด (Directory Tree)

SQL

/Users/common/Docker/
├── php_dev_8_5/
│   ├── Dockerfile
│   └── xdebug.ini
├── mariadb_12_3/
│   └── docker-compose.yml
├── wordpress_app_7_1/
│   ├── docker-compose.yml
│   ├── nginx/
│   │   └── default.conf
│   └── src/
│       ├── wp-config.php
│       └── ... (WordPress Core Files)
└── laravel_app_13_0/
    ├── docker-compose.yml
    ├── nginx/
    │   └── default.conf
    └── src/
        ├── .env
        └── ... (Laravel Project Files)



รายละเอียดไฟล์คอนฟิกฉบับเต็มทุกไฟล์ (Full Source Files)




Base Runtime Layer (php_dev_8_5/)

php_dev_8_5/Dockerfile/

SQL

FROM composer:2.7 AS composer_binary
FROM php:8.3-fpm-alpine AS dev_runtime
# ติดตั้ง System Dependencies สำหรับ Build Extensions
RUN apk update && apk add --no-cache \
    linux-headers \
    $PHPIZE_DEPS \
    git \
    curl \
    unzip \
    libzip-dev \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    icu-dev \
    oniguruma-dev \
    && rm -rf /var/cache/apk/*
# ติดตั้ง PHP Core Extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
        pdo_mysql \
        mysqli \
        gd \
        intl \
        mbstring \
        zip \
        bcmath \
        opcache \
        exif
# ติดตั้ง Xdebug สำหรับ Step Debugging
RUN pecl install xdebug && docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
COPY --from=composer_binary /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
EXPOSE 9000
CMD &#x5B;"php-fpm"]

php_dev_8_5/xdebug.ini

SQL

zend_extension=xdebug.so
xdebug.mode=debug,develop
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.log=/tmp/xdebug.log
xdebug.discover_client_host=0



Database Layer (mariadb_12_3/)

mariadb_12_3/docker-compose.yml

SQL

services:
  mariadb:
    container_name: db_mariadb
    image: mariadb:12.3
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: "mVbF58YgwCjh"
      MARIADB_DATABASE: "63U2k3jmmetY"
      MARIADB_USER: "QQbPM5nzBuXQ"
      MARIADB_PASSWORD: "ggzhUNbNTkcX"
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
    networks:
      - shared_dev_net
networks:
  shared_dev_net:
    external: true