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

การใส่ React/Next.js App ลงใน Docker

เขียน Dockerfile แบบหลายขั้นตอนสำหรับแอป Next.js และเรียกใช้ภายในเครื่องด้วย Docker Compose

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

ทำไมต้องใช้ Docker

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

ไฟล์ Docker สำหรับ React SPA แบบพื้นฐาน

การสร้างแบบสองขั้นตอน: ใช้ Node.js สำหรับการสร้าง และใช้ Nginx สำหรับให้บริการผลลัพธ์แบบสแตติก

# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Serve with Nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

การกำหนดค่า Nginx สำหรับการกำหนดเส้นทางของ SPA

กำหนดค่า Nginx ให้ส่งไฟล์ index.html สำหรับทุกเส้นทาง (รองรับการกำหนดเส้นทางฝั่งไคลเอนต์)

# nginx.conf
server {
  listen 80;
  root /usr/share/nginx/html;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html; # SPA routing
  }

  location ~* \.(js|css|png|jpg|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
  }
}

ไฟล์ Docker ของ Next.js ในโหมดสแตนด์อโลน

Next.js 12 ขึ้นไปรองรับ output: 'standalone' ซึ่งจะคัดลอกเฉพาะไฟล์ที่จำเป็นสำหรับอิมเมจใช้งานจริงที่มีขนาดเล็กที่สุด

// next.config.js
module.exports = { output: 'standalone' };

# Dockerfile (Next.js standalone)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

.dockerignore

แยกไฟล์ที่ไม่จำเป็นออกจากบริบทการสร้างของ Docker เพื่อเร่งการสร้างและลดขนาดอิมเมจ

node_modules
.next
dist
.env*
.git
README.md
*.test.ts

การสร้างและการเรียกใช้

สร้างอิมเมจและเรียกใช้ในเครื่องของคุณ

# Build:
docker build -t my-next-app .

# Run:
docker run -p 3000:3000 -e DATABASE_URL=postgres://... my-next-app

# Check size:
docker images my-next-app

Docker Compose สำหรับการพัฒนาในเครื่อง

ใช้ Docker Compose เพื่อเรียกใช้แอปพร้อมกับสิ่งที่แอปต้องพึ่งพา เช่น ฐานข้อมูลและ Redis ด้วยคำสั่งเดียว

# docker-compose.yml
services:
  web:
    build: .
    ports: ['3000:3000']
    environment:
      DATABASE_URL: postgresql://postgres:password@db:5432/myapp
    depends_on: [db]
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

การตรวจสอบสุขภาพ

เพิ่มการตรวจสอบสุขภาพลงในไฟล์ Docker เพื่อให้ตัวจัดการระบบทราบว่าคอนเทนเนอร์พร้อมใช้งานเมื่อใด

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/api/health || exit 1

ตัวแปรสภาพแวดล้อมขณะเรียกใช้

ส่งตัวแปรสภาพแวดล้อมในเวลาที่เรียกใช้ด้วย docker run หรือผ่าน --env-file อย่าฝังข้อมูลลับไว้ในอิมเมจโดยเด็ดขาด

docker run -p 3000:3000 \
  --env-file .env.production \
  my-next-app

การสร้างสำหรับหลายแพลตฟอร์ม

สร้างอิมเมจสำหรับสถาปัตยกรรม CPU หลายแบบ เช่น ARM64 สำหรับ Mac ที่ใช้ชิป M1 และเครื่องเสมือนบนคลาวด์ และ AMD64 สำหรับเซิร์ฟเวอร์ส่วนใหญ่ ด้วย Docker Buildx

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myregistry/my-next-app:latest \
  --push .

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

ข้อดีของการใช้การสร้าง Docker แบบหลายขั้นตอนสำหรับแอป React/Next.js คืออะไร

สรุป

ใช้ไฟล์ Docker แบบหลายขั้นตอน โดยใช้ Node.js สำหรับการสร้าง และใช้ Nginx หรือ node:alpine สำหรับให้บริการ เพิ่ม output: 'standalone' ในการกำหนดค่า Next.js เพื่อสร้างอิมเมจขนาดเล็ก ใช้ Docker Compose สำหรับการพัฒนาในเครื่อง ส่งข้อมูลลับขณะเรียกใช้ผ่านตัวแปรสภาพแวดล้อม และสร้างอิมเมจสำหรับหลายแพลตฟอร์มด้วย Buildx เพื่อให้รองรับ ARM และ AMD64

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

บทเรียน “การใส่ React/Next.js App ลงใน Docker” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใส่ React/Next.js App ลงใน Docker”

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

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

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

บทเรียน “การใส่ React/Next.js App ลงใน Docker” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การนำไปใช้งานบน Vercel: ไม่ต้องกำหนดค่าและ URL สำหรับพรีวิว
  2. การโฮสต์ React SPA บน AWS S3 และ CloudFront
  3. การใส่ React/Next.js App ลงใน Docker
  4. CI/CD ด้วย GitHub Actions สำหรับ React
← กลับไปที่ React Academy