เมื่อคุณรัน Application ที่ประกอบด้วยหลาย Service เช่น Web App + Database + Cache การพิมพ์คำสั่ง docker run ทีละตัวเริ่มน่าเบื่อหน่าย Docker Compose คือเครื่องมือที่ช่วยจัดการทั้งหมดด้วยไฟล์ YAML เดียว
Docker Compose คืออะไร?
Docker Compose คือเครื่องมือสำหรับสร้างและจัดการ Multi-Container Application คุณเพียงเขียนนิยาม Container ทั้งหมดในไฟล์ docker-compose.yml แล้วเรียกคำสั่งเดียวก็รันได้ทั้งหมด
ปัญหาที่ Compose แก้
สมมติว่าคุณต้องรัน WordPress + MySQL โดยไม่ใช้ Compose:
# ต้องรันคำสั่งเหล่านี้ทั้งหมด และจำ Network/Volume
docker network create wp-network
docker volume create mysql-data
docker run -d \
--name mysql \
--network wp-network \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=wordpress \
mysql:8.0
docker run -d \
--name wordpress \
--network wp-network \
-p 80:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_PASSWORD=secret \
wordpress
ด้วย Compose เหลือแค่เขียนไฟล์ YAML และคำสั่งเดียว:
docker compose up -d
โครงสร้างของ Docker Compose
Docker Compose ทำงานผ่านไฟล์ docker-compose.yml (Compose v2 ใช้ได้ทั้งชื่อ docker-compose.yml หรือ compose.yml) โดยไฟล์นี้ประกอบด้วย 4 ส่วนหลัก:
- services — นิยาม Container แต่ละตัว
- networks — กำหนด Network สำหรับ Service
- volumes — สร้าง Volume สำหรับเก็บข้อมูล
- configs/secrets — จัดการ Config และข้อมูลลับบับ
ตัวอย่างไฟล์ docker-compose.yml
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- app
app:
build: .
environment:
- DB_HOST=db
- DB_PASSWORD=secret
depends_on:
- db
db:
image: mysql:8.0
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
db-data:
คำสั่งหลักของ Compose
# รันทุก Service ใน Background
docker compose up -d
# หยุดทุก Service
docker compose down
# ดู Log
docker compose logs -f
# ดูสถานะ Service
docker compose ps
ข้อดีของ Docker Compose
- เรียบง่าย — ทุกอย่างอยู่ในไฟล์เดียว ไม่ต้องจำคำสั่งยาวๆ
- Reproducible — ใครก็รันได้ในเครื่องใดก็ได้ผลลัพธ์เหมือนกัน
- Version Control — ไฟล์ YAML เก็บใน Git ได้
- Dependencies — กำหนด
depends_onเพื่อให้ Service เริ่มตามลำดับ
Docker Compose v1 vs v2
| Compose v1 | Compose v2 (ปัจจุบัน) | |
|---|---|---|
| คำสั่ง | docker-compose up |
docker compose up |
| การติดตั้ง | ติดตั้งแยก | Built-in ใน Docker ใหม่ |
| Status | Deprecated | แนะนำ |
ปัจจุบันใช้ docker compose (v2, ไม่มี dash) ซึ่งติดตั้งพร้อมกับ Docker Engine เลย
สรุป
Docker Compose ทำให้การจัดการ Multi-Container App ง่ายขึ้นมาก ทำให้ Environment เหมือนกันทุกเครื่อง และเก็บ Config ไว้ใน Git ได้ บทความถัดไปจะอธิบายวิธีเขียนไฟล์ docker-compose.yml อย่างละเอียด

