Thứ Năm, 09/07/2026, 17:00 (GMT+0)

Docker Compose là gì? Điều bạn cần biết về Docker Compose

Quay lại Trang chủ Blog
Trên trang này

Khi triển khai một ứng dụng gồm nhiều thành phần như web server, cơ sở dữ liệu, cache hay reverse proxy, việc khởi chạy từng container bằng các lệnh docker run riêng lẻ có thể nhanh chóng trở nên phức tạp. Người dùng phải tự cấu hình network, volume, biến môi trường và quản lý vòng đời của từng container, khiến quá trình triển khai dễ phát sinh lỗi. 

Docker Compose ra đời để loại bỏ những bất tiện đó. Vậy cụ thể Docker Compose là gì? Cùng tìm hiểu trong bài viết này.

Docker Compose là gì?

Docker Compose là công cụ giúp định nghĩa và chạy các ứng dụng Docker gồm nhiều container theo mô hình khai báo. Thay vì phải viết nhiều lệnh docker run hoặc shell script để khởi tạo từng container riêng lẻ, người dùng có thể mô tả toàn bộ kiến trúc ứng dụng trong một file compose.yaml.

Dựa trên file cấu hình này, Docker Compose có thể thực hiện các tác vụ cần thiết như build hoặc sử dụng image, thiết lập network, chuẩn bị volume và khởi chạy các container của ứng dụng.

Cấu hình Docker Compose chủ yếu xoay quanh ba thành phần:

  • Services: Đại diện cho các container tạo nên ứng dụng, chẳng hạn API Node.js, cơ sở dữ liệu PostgreSQL hoặc Redis cache.
  • Networks: Xác định cách các container giao tiếp với nhau và hỗ trợ cơ chế phát hiện service dựa trên DNS.
  • Volumes: Được sử dụng để lưu trữ dữ liệu lâu dài, giúp dữ liệu vẫn được duy trì khi container khởi động lại hoặc được tạo lại.

Docker Compose trước đây tồn tại dưới dạng chương trình độc lập viết bằng Python và sử dụng lệnh docker-compose. Phiên bản hiện tại là plugin của Docker CLI được viết bằng Go và sử dụng cú pháp docker compose. Vì vậy, docker-compose thường xuất hiện trong các tài liệu cũ và được xem là cú pháp legacy.

docker-compose-2.jpg

Khác nhau giữa Docker Compose và Docker Run

Sự khác biệt chủ yếu nằm ở cách tiếp cận mệnh lệnh và khai báo:

Tiêu chí

docker run

Docker Compose

Mô hìnhMệnh lệnh: thực hiện từng lệnh theo từng bướcKhai báo: mô tả trạng thái mong muốn trong YAML
Phạm viMột container cho mỗi lệnhỨng dụng gồm nhiều container
MạngThủ công: tự tạo và kết nốiTự động: phân giải DNS theo tên service
Khả năng tái tạoPhụ thuộc vào shell script hoặc kiến thức nội bộ của nhómCấu hình YAML được lưu trong hệ thống quản lý phiên bản
Dừng và gỡ bỏDừng và xóa từng container riêng lẻdocker compose down xử lý toàn bộ

Nên sử dụng docker run khi bạn cần nhanh chóng chạy một container dùng một lần, kiểm thử image theo cách tương tác hoặc chạy một tiện ích độc lập. Khi ứng dụng bắt đầu phụ thuộc vào nhiều hơn một service, bạn nên chuyển sang Compose. Cách này thường giúp đồng đội dễ dàng clone repository và chạy docker compose up thay vì phải đọc và tìm hiểu một shell script dài.

Các phiên bản Docker Compose

Docker Compose đã trải qua nhiều giai đoạn phát triển, từ Compose v1 đến Compose v2 và Compose v5. Hiện nay, Docker hỗ trợ Compose v2 và Compose v5, cả hai đều sử dụng Compose Specification để định nghĩa cấu hình và cách Docker Compose xử lý file compose.yaml.

Docker Compose v1

Docker Compose v1 được phát hành lần đầu vào năm 2014, viết bằng Python và sử dụng lệnh:

docker-compose

Các dự án sử dụng Compose v1 thường khai báo trường version ở cấp cao nhất trong file compose.yaml, với các giá trị từ 2.0 đến 3.8. Những giá trị này tương ứng với từng phiên bản của định dạng file Compose.

Docker Compose v2

Docker Compose v2 được công bố vào năm 2020 và được viết lại bằng Go. Phiên bản này sử dụng cú pháp:

docker compose

Khác với Compose v1, Compose v2 không dựa vào trường version để xác định cách diễn giải file compose.yaml. Thay vào đó, Docker Compose sử dụng Compose Specification làm đặc tả chung để xử lý cấu hình.

docker-compose-4.jpg

Docker Compose v5

Docker Compose v5 được phát hành vào năm 2025 và có chức năng tương đương Compose v2. Điểm khác biệt chính là v5 giới thiệu Go SDK chính thức, cung cấp API để tích hợp các chức năng của Docker Compose trực tiếp vào ứng dụng.

Thông qua SDK này, ứng dụng có thể tải, xác thực và quản lý các môi trường multi-container mà không cần phụ thuộc hoàn toàn vào Compose CLI. Docker chuyển cách đánh số trực tiếp lên v5 nhằm tránh nhầm lẫn với các định dạng file Compose cũ từng được gọi là v2 và v3.

Trước đây, Docker Compose cũng sử dụng nhiều phiên bản định dạng file như Compose file format 1, 2.x và 3.x. Trong đó, format 3.x bổ sung nhiều tùy chọn hướng đến Docker Swarm. Sau này, format 2.x và 3.x được hợp nhất vào Compose Specification nhằm giảm sự nhầm lẫn giữa phiên bản Compose CLI và phiên bản file cấu hình.

Hiện nay, Compose v2 và v5 đều sử dụng Compose Specification để định nghĩa project. Đặc tả này được cập nhật liên tục, vì vậy trường version ở cấp cao nhất không còn bắt buộc. Docker Compose cũng duy trì khả năng tương thích ngược với một số thành phần từ các định dạng file 2.x và 3.x trước đây.

Các lệnh Docker Compose thường dùng

Lệnh

Chức năng

docker compose upTạo và khởi chạy các container/service được định nghĩa trong Compose file.
docker compose downDừng và xóa container cùng network do Compose quản lý.
docker compose buildBuild hoặc rebuild image cho các service.
docker compose pullTải image của các service từ registry.
docker compose psLiệt kê các container/service và trạng thái hiện tại.
docker compose logsXem log/output của các container đang chạy.
docker compose execThực thi một lệnh bên trong container đang chạy.
docker compose restartKhởi động lại container của một hoặc nhiều service.
docker compose stopDừng các service mà không xóa container.
docker compose startKhởi động lại các service đã được tạo trước đó.
docker compose configPhân tích, xử lý và hiển thị Compose file ở dạng cấu hình chuẩn hóa.
docker compose runChạy một lệnh hoặc tác vụ one-off trên một service.
docker compose rmXóa các container của service đã dừng.
docker compose imagesLiệt kê các image được sử dụng bởi container của project.
docker compose statsTheo dõi mức sử dụng tài nguyên của container theo thời gian thực.

Lợi ích của Docker Compose

Docker Compose giúp đơn giản hóa quá trình phát triển, triển khai và quản lý các ứng dụng container, đặc biệt khi hệ thống gồm nhiều service. Một số lợi ích chính của Docker Compose gồm:

  • Quản lý đơn giản hơn: Toàn bộ ứng dụng multi-container có thể được định nghĩa và quản lý trong một file YAML duy nhất. Điều này giúp việc điều phối và tái tạo môi trường trở nên thuận tiện hơn.
  • Hỗ trợ cộng tác hiệu quả: File Compose có thể được chia sẻ giữa đội ngũ phát triển và vận hành. Nhờ sử dụng chung một cấu hình, các bên có thể phối hợp tốt hơn trong quá trình triển khai và xử lý vấn đề.
  • Đẩy nhanh quá trình phát triển: Docker Compose lưu lại cấu hình được sử dụng để tạo container. Khi khởi động lại một service không có thay đổi, Compose có thể tái sử dụng container hiện có thay vì tạo lại từ đầu, giúp việc thay đổi môi trường diễn ra nhanh hơn.
  • Linh hoạt giữa nhiều môi trường: Compose hỗ trợ sử dụng biến trong file cấu hình. Người dùng có thể tận dụng các biến này để tùy chỉnh cùng một cấu hình Compose cho những môi trường hoặc người dùng khác nhau.
docker-compose-3.jpg

Cách hoạt động của Docker Compose

Docker Compose hoạt động dựa trên hai thành phần chính là Compose file và Compose CLI. Người dùng khai báo cấu hình ứng dụng trong file compose.yaml, sau đó sử dụng lệnh docker compose để tạo, khởi chạy và quản lý các service.

Quy trình hoạt động cơ bản gồm:

  1. Khai báo cấu hình ứng dụng: Trong file compose.yaml, người dùng định nghĩa các service cùng những thành phần liên quan như image, network, volume, port, biến môi trường, config và secret.
  2. Docker Compose đọc cấu hình: Compose xử lý file YAML theo Compose Specification để xác định mô hình của ứng dụng multi-container.
  3. Khởi chạy các service: Khi chạy docker compose up, Compose tạo và khởi động các service đã khai báo, đồng thời thiết lập những network, volume và tài nguyên cần thiết theo cấu hình.
  4. Theo dõi và quản lý ứng dụng: Người dùng có thể sử dụng docker compose ps để kiểm tra trạng thái service hoặc docker compose logs để xem log và hỗ trợ xử lý sự cố.
  5. Dừng ứng dụng: Khi không còn cần chạy các service, lệnh docker compose down được sử dụng để dừng và gỡ bỏ các thành phần do Compose quản lý.

Nhờ mô hình này, toàn bộ cấu hình và vòng đời của ứng dụng multi-container có thể được quản lý tập trung từ một file compose.yaml thay vì phải thao tác riêng lẻ với từng container.

docker-compse-6.jpg

Các trường hợp sử dụng Docker Compose phổ biến

Docker Compose có thể được sử dụng trong nhiều giai đoạn của quá trình phát triển và triển khai ứng dụng. Một số trường hợp phổ biến gồm môi trường phát triển, kiểm thử tự động và triển khai production trên một máy chủ.

Môi trường phát triển

Trong quá trình phát triển phần mềm, Docker Compose giúp tạo một môi trường cô lập để chạy và tương tác với ứng dụng. Compose file có thể mô tả toàn bộ các service phụ thuộc như cơ sở dữ liệu, queue, cache hoặc API dịch vụ web.

Thông qua lệnh docker compose up, người dùng có thể tạo và khởi động một hoặc nhiều container cho các thành phần phụ thuộc chỉ trong một lần thực thi. Nhờ đó, thay vì phải sử dụng tài liệu thiết lập môi trường dài nhiều trang, dự án có thể cung cấp một Compose file cùng một vài lệnh cần thiết để bắt đầu.

Môi trường kiểm thử tự động

Docker Compose cũng phù hợp với các quy trình Continuous Integration và Continuous Deployment cần thực hiện kiểm thử tự động. Đối với kiểm thử end-to-end, Compose có thể tạo một môi trường kiểm thử cô lập dựa trên cấu hình đã được định nghĩa trong Compose file.

Sau khi kiểm thử hoàn tất, môi trường có thể được gỡ bỏ bằng một vài lệnh:

docker compose up -d
./run_tests
docker compose down

Cách này giúp quá trình tạo và xóa môi trường kiểm thử được thực hiện dựa trên cùng một cấu hình xác định trước.

Triển khai trên một máy chủ (Single Host)

Docker Compose hỗ trợ triển khai ứng dụng production trên một máy chủ duy nhất. Người dùng có thể sử dụng Compose để triển khai ứng dụng đến Docker host từ xa, đồng thời quản lý các cấu hình dành riêng cho môi trường production.

Vì vậy, bên cạnh môi trường phát triển và kiểm thử, Docker Compose còn có thể được sử dụng cho những mô hình triển khai ứng dụng trên một Docker host.

docker-compose-7.jpg

Câu hỏi thường gặp về Docker Compose

Docker Compose có Free không? 

Có, Docker Compose hoàn toàn miễn phí. Tuy nhiên, chi tiết về bản quyền cần lưu ý theo môi trường sử dụng:

  • Mã nguồn mở & Miễn phí 100%: Docker Compose là dự án mã nguồn mở (Open Source). Nếu bạn sử dụng Docker Compose dưới dạng dòng lệnh (Docker Compose CLI plugin) trên hệ điều hành Linux hoặc cài riêng lẻ, nó hoàn toàn miễn phí 100% cho mọi mục đích (cá nhân lẫn doanh nghiệp).
  • Trường hợp đi kèm Docker Desktop (Windows / macOS):
    • Docker Desktop miễn phí cho cá nhân, doanh nghiệp nhỏ (dưới 250 nhân viên và doanh thu dưới 10 triệu USD/năm), cơ sở giáo dục và dự án phi lợi nhuận.
    • Nếu là doanh nghiệp lớn (vượt ngưỡng trên) sử dụng Docker Desktop trên Windows/Mac, bạn cần mua gói bản quyền trả phí (Docker Subscription).

Docker Compose có thể chạy nhiều container cùng lúc không?

Có. Docker Compose được thiết kế để định nghĩa và chạy ứng dụng multi-container. Các service, network, volume và cấu hình liên quan có thể được khai báo tập trung trong một file YAML, sau đó khởi chạy bằng docker compose up.

Docker Compose có cần Dockerfile không?

Không bắt buộc. Dockerfile chứa các chỉ dẫn để build Docker image, còn Compose file định nghĩa cách các container được chạy và kết nối với nhau. Trong thực tế, Compose file có thể tham chiếu đến Dockerfile để build image cho một service, hoặc sử dụng trực tiếp image có sẵn.

docker compose và docker-compose khác nhau như thế nào?

docker compose là cú pháp hiện tại của Docker Compose CLI. Trong khi đó, docker-compose là cú pháp được sử dụng bởi phiên bản standalone cũ và hiện chủ yếu được duy trì để tương thích ngược. Vì vậy, với các triển khai mới, nên sử dụng cú pháp docker compose.

compose.yaml và docker-compose.yml có khác nhau không?

Cả hai đều có thể được Docker Compose nhận diện. Tuy nhiên, tên file được ưu tiên hiện nay là compose.yaml hoặc compose.yml. Docker vẫn hỗ trợ docker-compose.yaml và docker-compose.yml để tương thích với các phiên bản trước; nếu cùng tồn tại, Compose ưu tiên compose.yaml.

Qua bài viết, bạn đã hiểu Docker Compose là gì và cách công cụ này giúp đơn giản hóa việc triển khai, cấu hình và quản lý ứng dụng gồm nhiều container. Với khả năng khai báo tập trung service, network và volume trong một file compose.yaml, Docker Compose giúp môi trường ứng dụng dễ quản lý và tái tạo hơn.

#Cloud Native
#Cloud Native
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc