

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à 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:
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.

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ình | Mệnh lệnh: thực hiện từng lệnh theo từng bước | Khai báo: mô tả trạng thái mong muốn trong YAML |
| Phạm vi | Một container cho mỗi lệnh | Ứng dụng gồm nhiều container |
| Mạng | Thủ công: tự tạo và kết nối | Tự động: phân giải DNS theo tên service |
| Khả năng tái tạo | Phụ thuộc vào shell script hoặc kiến thức nội bộ của nhóm | Cấ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.
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 đượ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-composeCá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 đượ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 composeKhá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 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.
Lệnh | Chức năng |
| docker compose up | Tạo và khởi chạy các container/service được định nghĩa trong Compose file. |
| docker compose down | Dừng và xóa container cùng network do Compose quản lý. |
| docker compose build | Build hoặc rebuild image cho các service. |
| docker compose pull | Tải image của các service từ registry. |
| docker compose ps | Liệt kê các container/service và trạng thái hiện tại. |
| docker compose logs | Xem log/output của các container đang chạy. |
| docker compose exec | Thực thi một lệnh bên trong container đang chạy. |
| docker compose restart | Khởi động lại container của một hoặc nhiều service. |
| docker compose stop | Dừng các service mà không xóa container. |
| docker compose start | Khởi động lại các service đã được tạo trước đó. |
| docker compose config | Phân tích, xử lý và hiển thị Compose file ở dạng cấu hình chuẩn hóa. |
| docker compose run | Chạy một lệnh hoặc tác vụ one-off trên một service. |
| docker compose rm | Xóa các container của service đã dừng. |
| docker compose images | Liệt kê các image được sử dụng bởi container của project. |
| docker compose stats | Theo dõi mức sử dụng tài nguyên của container theo thời gian thực. |
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:

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:
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 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ủ.
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.
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 downCá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.
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.

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:
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.
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 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.
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.
