0Pricing
PHP Academy · บทเรียน

การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP

สร้างอิมเมจ Docker สำหรับ PHP + Nginx และจัดการด้วย Docker Compose

การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ Docker กับ PHP

Docker บรรจุแอปพลิเคชันพร้อมส่วนพึ่งพาไว้ในอิมเมจคอนเทนเนอร์แบบพกพา อิมเมจเดียวกันจะทำงานเหมือนกันในสภาพแวดล้อมการพัฒนา CI และระบบจริง จึงขจัดปัญหา “ทำงานได้บนเครื่องของฉัน”

Dockerfile พื้นฐานสำหรับ PHP

Dockerfile ขั้นต่ำสำหรับแอปพลิเคชัน PHP + Nginx

# Dockerfile
FROM php:8.3-fpm-alpine

# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache

# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

COPY . .

RUN chown -R www-data:www-data /app/storage /app/bootstrap/cache

การสร้างหลายระยะ

ใช้การสร้างหลายระยะเพื่อให้อิมเมจสุดท้ายมีขนาดเล็ก ติดตั้งเครื่องมือสำหรับสร้างในระยะหนึ่ง แล้วคัดลอกเฉพาะผลลัพธ์ไปยังอิมเมจสุดท้าย

# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .

docker-compose.yml

จัดการบริการหลายรายการ (PHP-FPM, Nginx, MySQL และ Redis) ด้วย Docker Compose

# docker-compose.yml
services:
  app:
    build: .
    volumes:
      - .:/app
  nginx:
    image: nginx:alpine
    ports: ["80:80"]
    volumes:
      - .:/app
      - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
  mysql:
    image: mysql:8
    environment:
      MYSQL_DATABASE: myapp
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
  redis:
    image: redis:alpine
volumes:
  db_data:

การกำหนดค่าคอนเทนเนอร์ Nginx

เมานต์การกำหนดค่า Nginx แบบกำหนดเองเพื่อพร็อกซีคำขอ PHP-FPM

# docker/nginx.conf
server {
    listen 80;
    root /app/public;
    index index.php;
    location / { try_files $uri /index.php?$query_string; }
    location ~ \.php$ {
        fastcgi_pass app:9000;  # service name from docker-compose
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

ตัวแปรสภาพแวดล้อม

ส่งตัวแปรสภาพแวดล้อมไปยังคอนเทนเนอร์ — ห้ามฝังข้อมูลลับไว้ในอิมเมจ

# docker-compose.yml:
services:
  app:
    env_file: .env
    # or explicit:
    environment:
      - APP_ENV=production
      - DB_HOST=mysql

คำสั่ง Laravel Artisan

เรียกใช้คำสั่ง Artisan ภายในคอนเทนเนอร์

$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:work

การตรวจสอบสถานะ

เพิ่มการตรวจสอบสถานะ เพื่อให้ตัวจัดการระบบ (Kubernetes, ECS) ทราบว่าคอนเทนเนอร์พร้อมทำงานเมื่อใด

# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
  CMD curl -f http://localhost/health || exit 1

การสร้างและส่งอิมเมจ

สร้างและส่งอิมเมจไปยังคลังอิมเมจ (Docker Hub, ECR, GHCR)

$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0

การนำระบบไปใช้งานบน Kubernetes

ใน Kubernetes ให้กำหนดทรัพยากร Deployment และ Service โดยใช้อิมเมจของคุณ เปิดตัวเวอร์ชันใหม่ด้วย kubectl set image หรืออัปเดต YAML แล้วนำไปใช้

การเสริมความปลอดภัยสำหรับระบบจริง

แนวปฏิบัติด้าน Docker สำหรับระบบจริง ได้แก่ ใช้ผู้ใช้ที่ไม่ใช่ root ใช้ระบบไฟล์ root แบบอ่านอย่างเดียว ใช้อิมเมจพื้นฐานขนาดเล็ก (Alpine) ไม่รวมส่วนพึ่งพาสำหรับการพัฒนา ระบุแท็กอิมเมจแบบเจาะจง และสแกนหา CVE ด้วย docker scout

สรุป

สร้าง Dockerfile สำหรับ PHP-FPM + Composer ใช้ docker-compose สำหรับการพัฒนาในเครื่องร่วมกับบริการ Nginx, MySQL และ Redis ในระบบจริง ให้ใช้การสร้างหลายระยะ ฉีดตัวแปรสภาพแวดล้อม และเรียกใช้ผ่าน Kubernetes หรือ ECS

ตรวจสอบความเข้าใจ

ประโยชน์หลักของการสร้าง Docker แบบหลายระยะคืออะไร

คำถามที่พบบ่อย

บทเรียน “การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP”

สร้างอิมเมจ Docker สำหรับ PHP + Nginx และจัดการด้วย Docker Compose คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดค่า Nginx และ PHP-FPM
  2. ตัวแปรสภาพแวดล้อมและไฟล์ .env
  3. การนำไปใช้งานด้วย GitHub Actions
  4. การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP
← กลับไปที่ PHP Academy