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

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เปิดphpmyadminprodปิด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 เช่น
PORTDB_PASSWORD
สิ่งที่มือใหม่พลาดบ่อย
ข้อผิดพลาดที่พบบ่อยคือการแก้ .env แล้วคาดหวังว่า container จะอัปเดตเองทันที แต่ในความเป็นจริงมักต้อง recreate container ใหม่
อีกเรื่องคือการเรียกชื่อ container โดยตรงซึ่งมักยาวและสับสน ควรใช้ชื่อ service จะง่ายกว่า
docker compose psdocker 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 -ddownpslogs -fexecbuildconfigrun --rm
สรุป
Docker Compose เป็นตัวช่วยสำคัญสำหรับการจัดการหลายบริการให้เริ่ม ทำงาน และทดสอบได้อย่างเป็นระบบ คำสั่งพื้นฐานอย่าง up, down, ps, logs, exec และ build คือแกนหลักที่ควรใช้ให้คล่อง ขณะที่คำสั่งอย่าง config, run --rm, --profile, การใช้หลายไฟล์ และ healthcheck จะช่วยยกระดับการทำงานให้มั่นคงและยืดหยุ่นมากขึ้น
ถ้าจำแนวคิดและคำสั่งสำคัญเหล่านี้ได้ เวลาติดปัญหาจะสามารถไล่ตรวจ แก้ และจัดการสแต็กได้อย่างเป็นขั้นตอนโดยไม่มั่ว