ข้ามไปยังเนื้อหา

Docker Compose

การรัน application จริงแทบทุกครั้งต้องใช้มากกว่าหนึ่ง container — เว็บ server ฐานข้อมูล อาจจะมี cache ด้วย หากไม่มี Compose คุณต้องเปิดหลาย terminal พิมพ์คำสั่ง docker run ยาวๆ สำหรับแต่ละ service และจำทุกอย่างที่ต้องเชื่อมต่อกัน เวิร์กโฟลว์แบบนั้นพังง่ายและแชร์กับทีมได้ยาก

Docker Compose ให้คุณอธิบาย application หลาย container ทั้งหมดในไฟล์เดียวชื่อ compose.yaml คำสั่งเดียวก็สตาร์ทได้ทุกอย่าง:

Terminal window
docker compose up

คำสั่งเดียวก็หยุดทุกอย่าง:

Terminal window
docker compose down

เปรียบเทียบการรันเว็บแอปง่ายๆ สองแบบ

แบบไม่มี Compose:

Terminal window
docker network create myapp-net
docker run -d \
--name web \
--network myapp-net \
-p 8080:8080 \
-e APP_ENV=production \
myapp:latest

แบบมี Compose:

services:
web:
image: myapp:latest
ports:
- "8080:8080"
environment:
- APP_ENV=production

เวอร์ชัน Compose อ่านง่าย เก็บใน version control ได้ และทีมทุกคนสามารถรันได้เหมือนกันทุกครั้ง

โมดูลนี้จะพาคุณผ่านทุกชั้นของ Docker Compose:

บทเรียนหัวข้อ
1 (หน้านี้)ทำไมต้อง Compose — แอปแบบ declarative ไฟล์เดียว
2โครงสร้าง compose.yaml เชิงลึก
3แอปหลาย service พร้อม networking
4Environment variables, volumes และ networks
5Lifecycle commands และการ scale

นี่คือ compose.yaml ที่เล็กที่สุดที่ใช้งานได้จริง — service Nginx หนึ่งตัว:

services:
web:
image: nginx:alpine
ports:
- "8080:80"

สตาร์ทด้วย docker compose up (เพิ่ม -d เพื่อรันในพื้นหลัง) เข้า http://localhost:8080 แล้วจะเห็นหน้า Nginx welcome หยุดด้วย Ctrl-C หรือ docker compose down ถ้าใช้ -d

snippet ด้านล่างเขียน compose.yaml สตาร์ท และตรวจสอบ service ที่กำลังรัน — ทั้งหมดภายใน Play with Docker

# Write a minimal compose.yaml
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
EOF

# Start in detached mode
docker compose up -d

# Check running services
docker compose ps

# Fetch the Nginx welcome page
curl -s http://localhost:8080 | head -5

# Tear it down
docker compose down
ประโยชน์หลักของการใช้ Docker Compose แทนคำสั่ง docker run ธรรมดาคืออะไร?
คำสั่งใดสตาร์ท service ทั้งหมดใน compose.yaml แบบ foreground?
คำสั่งใดถูกต้องสำหรับ Compose v2?
ชื่อไฟล์มาตรฐานสำหรับการกำหนดค่า Compose คืออะไร?