Docker Compose Commands คำสั่งที่ใช้บ่อยที่ต้องรู้

เมื่อเขียนไฟล์ 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 แต่เก็บ Volume
  • docker 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-cacheRebuild Image ใหม่ทั้งหมดเปลี่ยน Dockerfile หรือ Dependencies
docker compose up -d --buildBuild แล้วเริ่มใหม่ทันทีคำสั่งรวม 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 ตรวจสอบ และบำรุงรักษาแอปพลิเคชันของคุณได้อย่างเรียบง่ายและรวดเร็ว