10 tháng 3, 2026 · 10 phút đọc
Docker Compose production-ready: từ dev đến staging
Cấu hình Docker Compose cho môi trường gần production: health checks, secrets management, resource limits và networking.
Docker Compose thường được xem là công cụ chỉ dùng cho development — nhưng với cấu hình đúng, nó rất phù hợp cho staging và thậm chí small production deployments. Bài viết này đi vào các chi tiết mà nhiều tutorial bỏ qua.
Multi-stage builds để giảm image size
Dockerfile nên dùng multi-stage build: stage đầu install dependencies và build, stage cuối chỉ copy artifacts. Một Node.js app thường giảm từ 800MB xuống 100-150MB với approach này. Dùng image base distroless hoặc alpine ở production stage.
Layer caching là key để CI/CD nhanh: đặt COPY package.json trước COPY . để layer install dependencies được cache khi code thay đổi nhưng dependencies không đổi.
Health Checks
Định nghĩa healthcheck trong compose file: test, interval, timeout, retries, start_period. Services phụ thuộc (depends_on) có thể chờ healthy state thay vì chỉ chờ container start. Điều này tránh race condition khi app start nhanh hơn database.
Cho web services: dùng curl -f http://localhost/health hoặc wget -q --spider. Cho database: dùng pg_isready (PostgreSQL) hoặc mysqladmin ping. Tránh dùng sleep — đó là workaround không reliable.
Secrets Management
Không bao giờ đặt secrets trực tiếp trong docker-compose.yml hoặc Dockerfile. Dùng Docker Secrets (cho Swarm) hoặc environment files (.env) được gitignore. Với staging/production, tích hợp vault như HashiCorp Vault hoặc biến môi trường từ CI/CD platform.
Resource Limits
Định nghĩa resources.limits và resources.reservations cho mỗi service. Thiếu limits, một service có thể consume toàn bộ memory của host và kill các services khác. Bắt đầu với limits rộng rồi tune xuống dựa trên monitoring thực tế.
Logging và Observability
Cấu hình logging driver: json-file với max-size và max-file rotation, hoặc gửi thẳng đến centralized logging (Loki, CloudWatch). Structured logs (JSON) dễ parse hơn plain text. Đảm bảo timezone nhất quán giữa host và containers.