
Giới thiệu Docker Compose
Docker Compose là công cụ dòng lệnh mạnh mẽ cho phép định nghĩa và vận hành các ứng dụng đa container Docker thông qua một tệp cấu hình YAML duy nhất. Thay vì phải chạy từng container riêng lẻ với hàng loạt tham số dòng lệnh, nhà phát triển và DevOps có thể quản lý toàn bộ hạ tầng ứng dụng chỉ bằng vài lệnh đơn giản.
Trong kiến trúc microservices hiện đại, một ứng dụng thường bao gồm nhiều dịch vụ: web server, API backend, cơ sở dữ liệu, cache, message queue. Docker Compose giúp tổ chức và điều phối tất cả các thành phần này một cách có hệ thống và tái tạo được.
Cài đặt Docker Compose
Cài đặt Docker Compose trên các hệ điều hành phổ biến:
- Linux: Tải binary từ trang chủ Docker, cấp quyền execute bằng
chmod +x, di chuyển vào/usr/local/bin/. Kiểm tra bằngdocker compose version - macOS: Tự động cài đặt khi cài Docker Desktop — không cần thao tác riêng
- Windows: Tích hợp sẵn trong Docker Desktop, hoạt động với backend WSL2. Cài WSL2 trước nếu chưa có
Cần lưu ý Docker Compose V2 hiện là plugin tích hợp trong Docker Engine, không còn là standalone binary như phiên bản V1 cũ.
Cấu trúc tệp docker-compose.yml
Tệp cấu hình gồm 3 phần chính, mỗi phần phục vụ một mục đích:
- services: Định nghĩa các container cần chạy — tương đương Dockerfile kết hợp tham số chạy. Mỗi service có thể build từ Dockerfile hoặc dùng image có sẵn
- networks: Cấu hình mạng giao tiếp giữa các container — mặc định tất cả service trong cùng một network, nhưng có thể phân tách để kiểm soát truy cập
- volumes: Quản lý lưu trữ dữ liệu bền vững — đảm bảo dữ liệu không bị mất khi container restart hoặc xóa


Ví dụ triển khai ứng dụng web hoàn chỉnh
Cấu hình ứng dụng gồm 3 dịch vụ cơ bản:
- web: Ứng dụng Node.js hoặc Python, map cổng 3000 ra host, kết nối đến database service bằng tên service trong Docker network
- api: REST API backend, kết nối Redis cache, giao tiếp với web qua internal network
- db: PostgreSQL với volume mount để lưu dữ liệu qua các lần restart
Chạy toàn bộ bằng lệnh docker compose up -d và tất cả service khởi động cùng nhau.
Các lệnh cơ bản cần nhớ
Docker Compose cung cấp hệ thống lệnh quản lý trực quan:
docker compose up -d: Khởi chạy toàn bộ dịch vụ ở chế độ backgrounddocker compose down: Dừng và xóa tất cả container, network (giữ lại volumes)docker compose down -v: Dừng, xóa cả volumes — mất dữ liệu!docker compose logs -f service_name: Xem log service theo thời gian thựcdocker compose ps: Liệt kê trạng thái tất cả containerdocker compose exec service_name bash: Vào shell container đang chạydocker compose build: Xây dựng lại ảnh Docker từ Dockerfile
Quản lý biến môi trường và secrets
Docker Compose hỗ trợ nhiều cách truyền cấu hình nhạy cảm:
- File .env: Đặt file .env cùng thư mục docker-compose.yml, Docker tự động đọc tất cả key=value. Cú pháp
$DB_PASSWORDtrong YAML sẽ tự động thay thế từ file - Biến môi trường hệ thống: Overrides giá trị trong .env, hữu ích khi deploy trên CI/CD
- Docker secrets: Quản lý dữ liệu nhạy cảm trong production qua Docker Swarm — secrets được mã hóa, chỉ gắn với service cần thiết
Mở rộng với profiles và override
Các tính năng nâng cao giúp quản lý đa môi trường:
- Profiles: Nhóm service theo mục đích (dev, test, prod). Chạy
docker compose --profile prod upchỉ khởi động service thuộc profile prod - docker-compose.override.yml: Ghi đè cấu hình riêng cho từng môi trường phát triển — file này tự động được load khi chạy
docker compose up - depends_on: Kiểm soát thứ tự khởi động, đảm bảo database sẵn sàng trước khi ứng dụng kết nối. Kết hợp healthcheck để kiểm tra readiness thực sự
Mẹo tối ưu hiệu suất
Để tận dụng tối đa Docker Compose trong production, một số thực hành tốt:
- Sử dụng
healthcheckcho mỗi service để Docker biết khi nào service thực sự sẵn sàng - Giới hạn tài nguyên (CPU, memory) cho mỗi container tránh một service chiếm hết tài nguyên
- Sử dụng
.dockerignoređể loại trừ file không cần thiết khi build image, giảm kích thước image - Cache layer Docker thông minh bằng cách sắp xếp Dockerfile từ ít thay đổi đến thường thay đổi
Kết luận
Docker Compose là công cụ không thể thiếu cho mọi dự án có nhiều dịch vụ. Từ startup ban đầu đến hệ thống enterprise phức tạp, công cụ này giúp chuẩn hóa quy trình triển khai, tái tạo môi trường giống nhau trên mọi máy tính, và giảm thiểu đáng kể lỗi “chạy trên máy tôi được nhưng không chạy trên server”. Dễ học, dễ dùng, mạnh mẽ — xứng đáng là công cụ đầu tiên trong bộ công cụ DevOps hiện đại.
Tài liệu tham khảo: Docker Compose Docs và GitHub Compose.
