กลับไปหน้าบทความ
#Docker#Docker Compose#DevOps#Backend#Cheatsheet

Docker Compose Cheatsheet ฉบับจำง่ายสำหรับวันทำงาน

รวมคำสั่งและแนวคิดสำคัญของ Docker Compose ที่ใช้บ่อยในการทำงานจริง ตั้งแต่การเริ่มสแต็ก ดูสถานะ รีสตาร์ท สร้างอิมเมจใหม่ ไปจนถึงการจัดการ environment และแก้ปัญหาที่มือใหม่มักเจอ

21 มีนาคม 2569อ่านประมาณ 2 นาที

แชร์บทความ

Docker Compose Cheatsheet ฉบับจำง่ายสำหรับวันทำงาน

Docker Compose Cheatsheet ฉบับจำง่ายสำหรับวันทำงาน

Docker Compose เป็นเครื่องมือที่ช่วยให้การจัดการหลายบริการพร้อมกัน เช่น web, api, db และ redis เป็นเรื่องง่ายขึ้นมาก โดยเราสามารถสั่งเพียงครั้งเดียวเพื่อให้ทั้งสแต็กเริ่มทำงานได้เหมือนกันในทุกเครื่อง ช่วยลดความสับสนในการตั้งค่าและทำให้การทำงานร่วมกันในทีมมีมาตรฐานมากขึ้น

ทำความเข้าใจกับไฟล์พื้นฐานของ Compose

ไฟล์มาตรฐานที่ใช้กับ Docker Compose มักมีชื่อว่า docker-compose.yml หรือ compose.yml โดยโครงสร้างหลักที่พบบ่อยจะประกอบด้วย:

  • services สำหรับกำหนดบริการต่าง ๆ
  • volumes สำหรับเก็บข้อมูลถาวร
  • networks สำหรับกำหนดการเชื่อมต่อระหว่างบริการ

การวางโครงสร้างให้ชัดตั้งแต่ต้นจะช่วยให้ขยายระบบได้ง่ายขึ้นในอนาคต

คำสั่งพื้นฐานที่ใช้บ่อยทุกวัน

คำสั่งหลักที่ควรจำให้ได้มีดังนี้

  • docker compose up -d สร้างและเริ่มทุก service แบบรันเบื้องหลัง

  • docker compose down หยุดและลบ container รวมถึง network ที่ Compose สร้างขึ้น แต่ volume จะยังไม่ถูกลบหากไม่ได้ระบุเพิ่ม

  • docker compose ps ใช้ดูสถานะของทุก service

  • docker compose logs -f ใช้ติดตาม log แบบเรียลไทม์ เหมาะมากเวลาตรวจสอบปัญหา

  • docker compose exec <service> <cmd> ใช้รันคำสั่งภายใน container ที่กำลังทำงานอยู่

คำสั่งกลุ่มนี้ถือเป็นชุดพื้นฐานที่แทบทุกคนต้องใช้เป็นประจำ

การรีสตาร์ทและการอัปเดตเมื่อมีการเปลี่ยนแปลง

เมื่อระบบเริ่มมีการแก้ไขระหว่างวัน คำสั่งต่อไปนี้จะช่วยให้จัดการได้สะดวกขึ้น

  • docker compose restart รีสตาร์ททุก service

  • docker compose restart <service> รีสตาร์ทเฉพาะ service ที่ต้องการ

  • docker compose build ใช้สร้าง image ใหม่เมื่อมีการแก้ไข Dockerfile

  • docker compose up -d --build สั่ง build และ start ในรอบเดียว เหมาะเมื่อเพิ่งแก้ image แล้วอยากอัปเดตทันที

ถ้ามีการแก้ค่าที่เกี่ยวข้องกับ environment เช่น .env หรือ config บางชนิด ควรระวังว่าระบบอาจไม่อัปเดตให้อัตโนมัติ

  • docker compose up -d ใช้ recreate container ในกรณีทั่วไป

  • docker compose up -d --force-recreate ใช้เมื่อต้องการความแน่ใจว่า container ถูกสร้างใหม่จริง

การล้างข้อมูลเก่าและจัดการสิ่งตกค้าง

บางครั้งปัญหาเกิดจากข้อมูลเก่าหรือ container ที่ค้างอยู่จากการปรับโครงสร้างไฟล์ Compose คำสั่งที่ควรรู้คือ

  • docker compose down --volumes ลบ volume ด้วย เหมาะเมื่ออยากเริ่มฐานข้อมูลใหม่ แต่ต้องระวังเพราะข้อมูลจะหาย

  • docker compose down --remove-orphans ลบ container ที่ไม่ได้อยู่ในไฟล์ Compose แล้ว แต่ยังค้างอยู่ใน project เดิม

การล้างอย่างมีสติจะช่วยลดปัญหาแปลก ๆ ที่หาสาเหตุได้ยาก

การแยก environment ด้วย profiles และหลายไฟล์

Docker Compose รองรับการทำงานหลายรูปแบบโดยไม่จำเป็นต้องแยกไฟล์ทั้งหมดออกจากกัน

ใช้ profiles

แนวคิดคือเปิดหรือปิด service ตามสภาพแวดล้อม เช่น

  • dev เปิด phpmyadmin
  • prod ปิด phpmyadmin

คำสั่งตัวอย่าง:

  • docker compose --profile dev up -d

วิธีนี้ช่วยให้ไฟล์เดียวรองรับได้หลายกรณี

ใช้หลายไฟล์ร่วมกัน

  • docker compose -f compose.yml -f compose.override.yml up -d

ไฟล์หลังจะ override ค่าในไฟล์แรก เหมาะกับกรณีที่:

  • ทีมมี compose.yml กลางร่วมกัน
  • แต่ละคนมี override ของตัวเองตามเครื่องหรือวิธีทำงาน

การตั้งชื่อ project เพื่อกันชนกัน

ถ้ารันหลายโปรเจกต์ในเครื่องเดียวกัน การตั้งชื่อ project จะช่วยให้ network และ volume ไม่ทับกัน

  • docker compose -p myapp up -d

นี่เป็นเทคนิคเล็ก ๆ ที่มีประโยชน์มากสำหรับคนที่ทำงานหลายระบบพร้อมกัน

ตรวจสอบ config และ environment ให้ชัดก่อนรัน

อีกคำสั่งที่มีประโยชน์มากแต่หลายคนมองข้ามคือ

  • docker compose config

คำสั่งนี้ช่วยแสดงผล config หลังจาก merge ทุกไฟล์ override เรียบร้อยแล้ว ทำให้ตรวจสอบได้ง่ายขึ้นในเรื่องต่อไปนี้

  • indentation ผิด
  • การ merge ค่าผิดพลาด
  • ค่า environment ไม่ตรงตามที่คิด

นอกจากนี้ Compose ยังอ่านไฟล์ .env ในโฟลเดอร์เดียวกันโดยอัตโนมัติ เหมาะสำหรับเก็บค่าที่ไม่อยาก hardcode เช่น

  • PORT
  • DB_PASSWORD

สิ่งที่มือใหม่พลาดบ่อย

ข้อผิดพลาดที่พบบ่อยคือการแก้ .env แล้วคาดหวังว่า container จะอัปเดตเองทันที แต่ในความเป็นจริงมักต้อง recreate container ใหม่

อีกเรื่องคือการเรียกชื่อ container โดยตรงซึ่งมักยาวและสับสน ควรใช้ชื่อ service จะง่ายกว่า

  • docker compose ps
  • docker compose ps --format json

การดูผ่าน service name ทำให้การใช้ exec หรือการตาม log ทำได้ชัดเจนขึ้นมาก

Healthcheck ช่วยลดปัญหา service เริ่มไม่ทัน

หลายคนเข้าใจว่า depends_on หมายถึง service พร้อมใช้งานแล้ว แต่จริง ๆ แล้วมันหมายถึงเพียงลำดับการเริ่มต้นเท่านั้น ไม่ได้การันตีว่า service ปลายทางพร้อมรับงาน

การใส่ healthcheck และออกแบบให้ app รอจน service เปลี่ยนสถานะเป็น healthy จะช่วยลดปัญหา error ตอนเริ่มระบบ โดยเฉพาะสแต็กที่มีหลายบริการและมีการเชื่อมต่อซับซ้อน

คำสั่ง one-off และการติดตามทรัพยากร

หากต้องการรันงานชั่วคราวโดยไม่อยากให้ระบบเลอะ สามารถใช้

  • docker compose run --rm <service> <cmd>

เหมาะกับงานประเภท:

  • migrate
  • seed
  • test

เมื่อจบงานแล้ว container จะถูกลบให้อัตโนมัติ

สำหรับการติดตามทรัพยากร สามารถใช้คู่กันได้ดังนี้

  • docker compose top ดู process ที่รันอยู่ในแต่ละ service

  • docker stats ดูการใช้ CPU และ RAM ของ container แบบรวม

ทริคเพิ่มเติม: Compose watch

ในบางเวอร์ชัน Docker Compose รองรับคำสั่ง

  • docker compose watch

คำสั่งนี้ช่วย rebuild หรือ restart อัตโนมัติเมื่อไฟล์มีการเปลี่ยนแปลง คล้ายกับ hot reload ในระดับสแต็ก เหมาะมากกับงานพัฒนาแบบหลาย service แต่ควรตรวจสอบเอกสารตามเวอร์ชันที่ใช้อยู่ก่อน

ตัวอย่างสถานการณ์จริงที่ใช้ในวันทำงาน

ลำดับการทำงานที่พบบ่อยอาจเป็นแบบนี้

วันแรกเริ่มระบบ

  • docker compose up -d

เมื่อแก้ Dockerfile

  • docker compose up -d --build

เมื่อแก้ config หรือ .env

  • docker compose up -d --force-recreate

เมื่ออยากล้างฐานข้อมูลและเริ่มใหม่

  • docker compose down --volumes

การจำลำดับพวกนี้ได้จะช่วยให้แก้ปัญหาเป็นขั้นตอนและลดการลองผิดลองถูก

8 คำสั่งที่ควรจำให้ขึ้นใจ

ถ้าจะเลือกจำเฉพาะคำสั่งสำคัญที่สุด แนะนำ 8 ตัวนี้

  • up -d
  • down
  • ps
  • logs -f
  • exec
  • build
  • config
  • run --rm

สรุป

Docker Compose เป็นตัวช่วยสำคัญสำหรับการจัดการหลายบริการให้เริ่ม ทำงาน และทดสอบได้อย่างเป็นระบบ คำสั่งพื้นฐานอย่าง up, down, ps, logs, exec และ build คือแกนหลักที่ควรใช้ให้คล่อง ขณะที่คำสั่งอย่าง config, run --rm, --profile, การใช้หลายไฟล์ และ healthcheck จะช่วยยกระดับการทำงานให้มั่นคงและยืดหยุ่นมากขึ้น

ถ้าจำแนวคิดและคำสั่งสำคัญเหล่านี้ได้ เวลาติดปัญหาจะสามารถไล่ตรวจ แก้ และจัดการสแต็กได้อย่างเป็นขั้นตอนโดยไม่มั่ว