เมื่อเขียนไฟล์ docker-compose.yml เสร็จแล้ว สิ่งที่ต้องใช้ในชีวิตประจำวันคือคำสั่ง docker compose ต่างๆ บทความนี้รวบรวมคำสั่งที่ควรรู้พร้อมตัวอย่างการใช้งานจริงที่ครอบคลุมสถานการณ์ต่างๆ ตั้งแต่การสตาร์ทหยุด ดูสถานะ ลบ Volume ไปจนถึงการ Scale Service ขึ้นหลายตัว ซึ่งจะช่วยให้คุณจัดการ Multi-container Applications บน Cloud VPS ของคุณได้อย่างมีประสิทธิภาพ
Docker Compose คืออะไรและทำไมต้องใช้
Docker Compose เป็นเครื่องมือสำหรับนิยามและรัน Multi-container Docker Applications ผ่านไฟล์ YAML เพียงไฟล์เดียว แทนที่จะเรียก docker run หลายครั้งสำหรับแต่ละ Container ด้วย Docker Compose คุณสามารถกำหนด Service ทั้งหมดในไฟล์เดียว และเริ่ม/หยุดทั้งหมดพร้อมกันด้วยคำสั่งเดียว นี่คือเหตุผลว่าทำไม Docker Compose จึงเป็นทางเลือกที่นิยมสำหรับการพัฒนาและ Deployment โดยเฉพาะเมื่อคุณต้องการใช้ Cloud VPS หลายตัวเข้าด้วยกัน
เริ่มต้นและหยุด Service
คำสั่งพื้นฐานสำหรับการเริ่มหรือหยุด Service คือกลุ่มแรกที่คุณจะใช้บ่อยที่สุด
# เริ่มทุก Service ใน Background (-d = detach)
docker compose up -d
# เริ่มและดู Log ไปด้วยพร้อมกัน (foreground)
docker compose up
# เริ่มเฉพาะ Service ที่เลือก
docker compose up -d db redis
# Rebuild Image แล้วเริ่มใหม่ (ใช้เมื่อเปลี่ยน Dockerfile)
docker compose up -d --build
# หยุดทุก Service
docker compose down
# หยุดและลบ Volume ด้วย (ระวัง: ข้อมูลในส่วนจัดเก็บจะหายไป)
docker compose down -v
# หยุดสั่ง Service (pause) โดยไม่ลบ Container
docker compose stop
# เริ่ม Service ที่หยุดอยู่
docker compose start
# รีสตาร์ตทุก Service
docker compose restart
เคล็ดลับ: ความแตกต่างระหว่าง down vs stop vs kill
docker compose stop: หยุด Container อย่างปลอดภัย (SIGTERM) ข้อมูลยังอยู่docker compose down: หยุดและลบ Container แต่เก็บ Volumedocker compose down -v: หยุด ลบ Container และ Volume ทั้งหมด (เหมือนเวลาแรก)
ดูสถานะและ Log
การดูสถานะและ Log เป็นสิ่งสำคัญสำหรับการดีบั่กและตรวจสอบว่า Service ทำงานได้ถูกต้องหรือไม่
# ดูสถานะทุก Service (เหมือน ps -a ของ Container)
docker compose ps
# ดู Log ที่ผ่านมาทั้งหมด
docker compose logs
# ดู Log แบบ Real-time ตามข้อมูลที่เพิ่มเข้ามา
docker compose logs -f
# ดู Log เฉพาะ Service
docker compose logs -f api
docker compose logs -f db
# ดูแค่ Log ล่าสุด 50 บรรทัด
docker compose logs --tail=50 api
# ดู Log พร้อมเวลา Timestamp
docker compose logs -t
# ดู Log ของหลาย Service พร้อมกัน
docker compose logs -f api db redis
ตัวอย่างการใช้ Log ในการดีบั่ก
เมื่อ Service ไม่ทำงาน ให้ใช้ docker compose logs -f เพื่อดูข้อความผิดพลาดแบบ Real-time ซึ่งจะช่วยให้คุณระบุปัญหาได้เร็ว เช่น ถ้า API ไม่สามารถเชื่อมต่อกับฐานข้อมูล จะเห็นข้อผิดพลาด Connection Refused ในที่ทันที
รันคำสั่งใน Container
บางครั้งคุณต้องเรียกใช้คำสั่งภายใน Container เช่น Migration ฐานข้อมูล หรือการติดตั้งแพ็คเจจ Node.js เพิ่มเติม
# เข้า Shell แบบ Interactive (สำหรับการสำรวจทั่วไป)
docker compose exec api sh
docker compose exec api bash
docker compose exec db bash
# รันคำสั่ง MySQL บนฐานข้อมูล
docker compose exec db mysql -uroot -p
# รัน Migration ใน Node.js Application
docker compose exec api npm run migrate
# รัน Python Script
docker compose exec api python manage.py migrate
# รันคำสั่งบน Service ใหม่ชั่วคราว (ไม่ใช้ Container ที่รันอยู่)
docker compose run --rm api npm install
# รันคำสั่งแล้วลบ Container ทันที
docker compose run --rm api npm test
ความแตกต่างระหว่าง exec vs run
exec: รันคำสั่งใน Container ที่กำลังทำงานอยู่แล้ว (ต้องเริ่ม Service ก่อน)run: สร้าง Container ใหม่และรันคำสั่ง (มีประโยชน์สำหรับ One-off Tasks)
จัดการ Image และ Scale
การสร้าง Image ใหม่และการเพิ่ม Scale ของ Service เป็นส่วนสำคัญของการจัดการ Multi-instance Applications บน Cloud VPS ของคุณ
# Build Image ทั้งหมดตามที่กำหนดใน docker-compose.yml
docker compose build
# Build เฉพาะ Service
docker compose build api
# Build โดยไม่ใช้ Cache (บังคับให้สร้างใหม่ทั้งหมด)
docker compose build --no-cache
# Scale Service เป็น 3 Instance (ต้องกำหนด Port Mapping อย่างถูกต้อง)
docker compose up -d --scale api=3
# Build แล้วเริ่มใหม่พร้อมกัน
docker compose up -d --build
# Build และดู Output ของ Build Process
docker compose build --verbose
หมายเหตุ: การใช้ Scale ใน Production
เมื่อต้องการ Scale Service ในสภาพแวดล้อม Production ให้พิจารณาใช้ Load Balancer (เช่น Nginx) ด้านหน้า instances หลายตัว นอกจากนี้ ถ้าคุณใช้ Cloud VPS หลายตัว ให้พิจารณาใช้ Docker Swarm หรือ Kubernetes สำหรับการจัดการที่ดีขึ้น
วัฏจักรชีวิตของ Container และการลบข้อมูล
เป็นสิ่งสำคัญที่จะเข้าใจว่า Docker Compose จะทำอะไรเมื่อคุณเรียกใช้ down บ้าง Docker Compose จะลบ Container และ Network แต่จะเก็บ Volumes ไว้ โดยค่าเริ่มต้น ซึ่งหมายความว่าข้อมูลของคุณจะปลอดภัย อย่างไรก็ตาม หากต้องการลบ Volumes ด้วย ให้ใช้ -v flag
สรุป Cheatsheet คำสั่ง Docker Compose
ตารางด้านล่างแสดงคำสั่งที่ใช้บ่อยที่สุดสำหรับการจัดการ Docker Compose
| คำสั่ง | ความหมาย | ใช้เมื่อไร |
|---|---|---|
docker compose up -d | เริ่มทุก Service ใน Background | ทุกครั้งที่ต้องการเริ่มแอปพลิเคชัน |
docker compose down | หยุดและลบ Container | เมื่อเสร็จสิ้นการพัฒนาหรือก่อน Deploy |
docker compose down -v | หยุด + ลบ Volume ด้วย | เมื่อต้องการเริ่มต้นจาก Clean State |
docker compose ps | ดูสถานะ Service | ตรวจสอบว่า Service ทำงานอยู่หรือไม่ |
docker compose logs -f | ดู Log แบบ Real-time | การดีบั่กและตรวจสอบ Error |
docker compose exec svc sh | เข้า Shell ใน Container | ต้องการเรียกใช้คำสั่งภายใน Container |
docker compose build --no-cache | Rebuild Image ใหม่ทั้งหมด | เปลี่ยน Dockerfile หรือ Dependencies |
docker compose up -d --build | Build แล้วเริ่มใหม่ทันที | คำสั่งรวม Build + Start ในครั้งเดียว |
docker compose stop | หยุดชั่วคราว (ไม่ลบ Container) | ต้องการหยุด แต่จะเริ่มใหม่ในภายหลัง |
docker compose restart | รีสตาร์ตทุก Service | เมื่อต้องการปรับปรุง Configuration |
Best Practices สำหรับการใช้ Docker Compose
- ใช้
docker compose logs -fเมื่อดีบั่ก แล้วคุณจะเห็น Error ได้ทันที - ตั้งค่า Volumes อย่างถูกต้องเพื่อ Persist ข้อมูล แล้วใช้
down -vอย่างระมัดระวัง - ใช้ Health Check ใน Service เพื่อให้ Docker Compose รู้ว่า Service ทำงานได้ดีหรือไม่
- ควรใช้ Environment Variables แทน Hard-code ค่าในไฟล์ yml
- ถ้าใช้ Production ให้พิจารณาใช้ Docker Swarm หรือ Kubernetes สำหรับ Orchestration ที่มีประสิทธิภาพสูงขึ้น
บทสรุป
การเรียนรู้คำสั่ง Docker Compose ต่างๆ นี้จะทำให้คุณสามารถจัดการ Multi-container Applications ได้อย่างมีประสิทธิภาพ ไม่ว่าคุณจะทำงานในเครื่องพัฒนา หรือที่ Cloud VPS ของคุณก็ตาม ด้วยการรวม Container ต่างๆ ในไฟล์เดียว และการใช้คำสั่งพื้นฐานเหล่านี้ คุณจะสามารถเริ่มต้น หยุด สกัดแบบ Scale ตรวจสอบ และบำรุงรักษาแอปพลิเคชันของคุณได้อย่างเรียบง่ายและรวดเร็ว

