CHƯƠNG 06 · Docker Compose thực chiến•BÀI 21 / 80

Compose services, dependencies và profiles

Đưa hệ thống nhiều containers vào một cấu hình version-controlled.

Ứng dụng◷ 4 phút đọc1/4 trong chương

Nắm bản chất

Docker Compose mô tả một application stack gồm services, networks, volumes, secrets và cấu hình runtime. Service name là DNS name trong network Compose. depends_on hỗ trợ điều phối startup; với condition: service_healthy, Compose đợi healthcheck trước khi khởi động dependent service.

Healthcheck không đo đầy đủ SLO. service_healthy giúp tránh một số lỗi race lúc start, không bảo đảm dependency luôn healthy về sau. profiles tách thành phần tùy chọn như Prometheus và Grafana khỏi core stack.

Luồng hoạt động

compose.yaml→services→networks/volumes

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

services:
  api:
    build: ./app
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:18
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
      retries: 10
  grafana:
    image: grafana/grafana
    profiles: [monitoring]

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Mở lab Buổi 6, chạy docker compose config --quiet rồi docker compose up -d --build. Bật monitoring bằng docker compose --profile monitoring up -d.

Lỗi dễ mắc

!

Không để password production trong YAML plaintext. Các biến environment có thể bị hiển thị qua inspect/diagnostics; dùng secrets mechanism phù hợp.

Tự kiểm tra

`depends_on` có tự restart API nếu DB chết một lúc rồi hồi phục không?Xem đáp án ↗

Không tự bảo đảm recovery kiểu đó. Ứng dụng phải có reconnect/retry và runtime có restart policy phù hợp.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.

↓ Tải mã nguồn thực hành chương 06
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗