Docker Compose: Hướng Dẫn Triển Khai Ứng Dụng Đa Container

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ằng docker 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
Tệp docker-compose.yml cấu hình multi-service application hiển thị trong code editor
Terminal chạy docker compose up hiển thị log khởi động nhiều container service

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ế độ background
  • docker 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ực
  • docker compose ps: Liệt kê trạng thái tất cả container
  • docker compose exec service_name bash: Vào shell container đang chạy
  • docker 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_PASSWORD trong 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 up chỉ 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 healthcheck cho 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 DocsGitHub Compose.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Tự Động Sao Lưu Dữ Liệu Hàng Đầu Với Công Cụ Rsync Và Cron

Tự Động Sao Lưu Dữ Liệu Hàng Đầu Với Công Cụ Rsync Và Cron Sao lưu dữ liệu là một trong những công việc quan trọng nhất mà bất kỳ…

Xem thêm

Chế Độ Nhà Phát Triển Trên Android: Hướng Dẫn Bật Và Sử Dụng

Chế Độ Nhà Phát Triển Trên Android: Hướng Dẫn Bật Và Sử Dụng Chế độ nhà phát triển (Developer Options) là tính năng ẩn trên Android, cung cấp quyền truy…

Xem thêm

Tự Động Hóa Nhà Thông Minh Với Home Assistant

Home Assistant là phần mềm tự động hóa nhà thông minh mã nguồn mở, miễn phí, hoạt động như hub điều khiển tập trung cho mọi thiết bị trong nhà….

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất