Docker Compose
Docker Compose คืออะไร?
หัวข้อที่มีชื่อว่า “Docker Compose คืออะไร?”การรัน application จริงแทบทุกครั้งต้องใช้มากกว่าหนึ่ง container — เว็บ server ฐานข้อมูล อาจจะมี cache ด้วย หากไม่มี Compose คุณต้องเปิดหลาย terminal พิมพ์คำสั่ง docker run ยาวๆ สำหรับแต่ละ service และจำทุกอย่างที่ต้องเชื่อมต่อกัน เวิร์กโฟลว์แบบนั้นพังง่ายและแชร์กับทีมได้ยาก
Docker Compose ให้คุณอธิบาย application หลาย container ทั้งหมดในไฟล์เดียวชื่อ compose.yaml คำสั่งเดียวก็สตาร์ทได้ทุกอย่าง:
docker compose upคำสั่งเดียวก็หยุดทุกอย่าง:
docker compose downcompose.yaml เทียบกับคำสั่ง docker run ยาวๆ
หัวข้อที่มีชื่อว่า “compose.yaml เทียบกับคำสั่ง docker run ยาวๆ”เปรียบเทียบการรันเว็บแอปง่ายๆ สองแบบ
แบบไม่มี Compose:
docker network create myapp-netdocker 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 |
| 4 | Environment variables, volumes และ networks |
| 5 | Lifecycle commands และการ scale |
แอป Compose แรกแบบเรียบง่าย
หัวข้อที่มีชื่อว่า “แอป Compose แรกแบบเรียบง่าย”นี่คือ 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