กลับไปหน้าสูตร
#docker#compose#devops#cheatsheet

Docker Compose Patterns (Prod-like Local Stack)

รวมแพตเทิร์น Docker Compose แบบจัดเต็มสำหรับ local ที่ใกล้ production: app+db+cache+queue, healthcheck, profiles, secrets, observability

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

Core Commands

Commandใช้ทำอะไร
docker compose up -dstart stack
docker compose downstop stack
docker compose psดู service status
docker compose logs -flogs รวม
docker compose logs -f apilogs service เดียว
docker compose exec api shเข้า shell
docker compose down -vdown พร้อมลบ volume

Pattern 1: App + DB + Redis

services:
  api:
    build: .
    ports: ["3000:3000"]
    environment:
      DATABASE_URL: postgres://postgres:postgres@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: app
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 20

  redis:
    image: redis:7

volumes:
  db_data:

Pattern 2: Worker + Queue

Serviceหน้าที่
apiรับ request
workerประมวลผลงาน background
redis/rabbitmqqueue broker
dbpersistent store

Pattern 3: Profiles (dev/test/tools)

services:
  api:
    profiles: ["dev", "test"]
  mailhog:
    image: mailhog/mailhog
    ports: ["8025:8025"]
    profiles: ["dev-tools"]
Commandใช้ทำอะไร
docker compose --profile dev up -dเปิดเฉพาะ profile dev
docker compose --profile dev-tools up -dเปิด tool เพิ่ม

Pattern 4: Override per Environment

Fileบทบาท
compose.ymlbase config
compose.override.ymllocal dev overrides
compose.prod-like.ymlprod-like settings
Commandตัวอย่าง
รวมหลายไฟล์docker compose -f compose.yml -f compose.prod-like.yml up -d

Healthchecks & Dependencies

แนวทางเหตุผล
ใช้ healthcheck กับ DB/APIลด race condition ตอน startup
ใช้ depends_on.conditionคุมลำดับให้ชัด
app ต้อง retry connection เองกันกรณี healthcheck ผ่านช้ากว่า

Volumes Strategy

Patternเหมาะกับ
named volumesdata persistence
bind mountlive code reload
tmpfstemporary high-speed data

Secrets / Env

แนวทางรายละเอียด
.envconfig non-sensitive
secrets:เก็บค่า sensitive ในไฟล์แยก
ไม่ hardcode key ใน composesecurity baseline

Observability Local

Toolประโยชน์
docker compose logs -fรวม logs
prometheus + grafanametrics dashboard
jaegertrace debugging
lokilog aggregation

Build & Performance Tips

เทคนิคผลลัพธ์
multi-stage Dockerfileimage เล็กลง
caching dependenciesbuild เร็วขึ้น
pin image tagsลด surprise จาก latest
pull_policy ชัดเจนคุมเวอร์ชันง่ายขึ้น

Troubleshooting Playbook

ปัญหาวิธีแก้
service ขึ้นไม่ครบdocker compose ps + logs
app ต่อ DB ไม่ได้ตรวจ hostname ต้องเป็น service name
data หายเช็กว่าใช้ named volume จริง
port ชนเปลี่ยน mapping host port
build ช้าoptimize Dockerfile layers

Makefile Helpers (Optional)

up:
	docker compose up -d

logs:
	docker compose logs -f --tail=200

down:
	docker compose down

reset:
	docker compose down -v && docker compose up -d --build