การสร้างอิมเมจ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดค่า Nginx และ PHP-FPM
- ตัวแปรสภาพแวดล้อมและไฟล์ .env
- การนำไปใช้งานด้วย GitHub Actions
- การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP