Docker Compose là gì? Cấu trúc file và các lệnh cơ bản
15/09/2026Khi một ứng dụng không còn chỉ chạy trên một container duy nhất mà cần nhiều thành phần phối hợp, ví dụ như một backend, một cơ sở dữ liệu, và một cache server thì việc khởi động thủ công từng container bằng lệnh docker run nhanh chóng trở nên rối rắm và dễ sai sót. Docker Compose ra đời để giải quyết đúng vấn đề này.
Bài viết dưới đây, Viettel IDC giải thích Docker Compose là gì, cấu trúc file cấu hình và những điều cần biết trước khi sử dụng.

Docker Compose là gì?
Docker Compose là một công cụ trong hệ sinh thái Docker, cho phép định nghĩa và quản lý các ứng dụng có kiến trúc nhiều container (multi-container) thông qua một file cấu hình duy nhất viết theo định dạng YAML. Thay vì phải gõ nhiều lệnh docker run với hàng loạt tham số cho từng container riêng lẻ, bạn chỉ cần khai báo toàn bộ cấu hình (container nào, dùng image gì, kết nối với nhau ra sao) vào một file gọi là docker-compose.yml, sau đó chạy một lệnh duy nhất để khởi động toàn bộ hệ thống cùng lúc.
Cấu trúc file docker-compose.yml
Một file docker-compose.yml tiêu chuẩn thường được tổ chức quanh bốn khối logic chính:
version
Dòng đầu tiên khai báo phiên bản cú pháp Compose đang sử dụng, giúp Docker biết cách diễn giải các phần cấu hình phía sau cho đúng.
services
Đây là phần quan trọng nhất, nơi định nghĩa từng container thành phần cấu thành ứng dụng, ví dụ một service cho ứng dụng backend, một service khác cho cơ sở dữ liệu. Mỗi service có thể khai báo image sử dụng, cổng (port) cần mở, biến môi trường, và các service khác mà nó phụ thuộc vào.
networks
Khối này cấu hình mạng nội bộ riêng để các container có thể giao tiếp với nhau bằng tên service thay vì địa chỉ IP cố định, giúp việc kết nối giữa các thành phần trở nên đơn giản và ổn định hơn.
volumes
Khối này chỉ định vùng lưu trữ dữ liệu bền vững (persistent storage), đảm bảo dữ liệu quan trọng (ví dụ dữ liệu database) không bị mất khi container bị xóa hoặc khởi động lại.
Dưới đây là một ví dụ minh họa đơn giản, định nghĩa một ứng dụng web kết nối với cơ sở dữ liệu:
yaml
version: "3.9"
services:
web:
image: node:18
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Trong ví dụ trên, service web sẽ tự động chờ service db khởi động trước (nhờ khai báo depends_on), còn dữ liệu của PostgreSQL được lưu bền vững trong volume db_data, không bị mất kể cả khi container db bị xóa và tạo lại.
Các lệnh Docker Compose cơ bản
Sau khi có file docker-compose.yml, bạn có thể quản lý toàn bộ ứng dụng bằng một số lệnh cơ bản sau (chạy trong thư mục chứa file cấu hình):
Nếu có thay đổi trong file docker-compose.yml (ví dụ đổi image, thêm biến môi trường), chỉ cần chỉnh sửa file rồi chạy lại docker compose up, Docker sẽ tự động áp dụng thay đổi tương ứng.
Docker Compose V1 và V2 khác nhau thế nào?
Một điểm dễ gây nhầm lẫn khi tra cứu tài liệu cũ là sự khác biệt giữa hai cách gọi lệnh:
- Docker Compose V1: Sử dụng lệnh có dấu gạch nối docker-compose (ví dụ docker-compose up), được cài đặt như một chương trình/binary riêng biệt, tách khỏi Docker CLI chính.
- Docker Compose V2: Được viết lại và tích hợp trực tiếp vào Docker CLI dưới dạng một plugin, sử dụng lệnh không có dấu gạch nối docker compose (ví dụ docker compose up). Đây là hướng phát triển hiện tại của Docker.
Nếu bạn thấy tài liệu hướng dẫn dùng docker-compose (có gạch nối) trong khi máy của bạn chỉ nhận docker compose (có khoảng trắng), đây là dấu hiệu bạn đang dùng phiên bản Compose V2 tích hợp sẵn, và ngược lại. Về cơ bản, cú pháp file docker-compose.yml giữa hai phiên bản không khác biệt quá nhiều, chủ yếu khác nhau ở cách gọi lệnh.

Cài đặt Docker Compose
Việc có cần cài đặt riêng Docker Compose hay không phụ thuộc vào hệ điều hành đang sử dụng:
- Windows và macOS: Khi cài đặt ứng dụng Docker Desktop, Docker Compose (phiên bản plugin V2) đã được tích hợp sẵn, không cần cài đặt thêm bất kỳ thành phần nào khác.
- Linux thuần túy (không dùng Docker Desktop): Thường cần cài đặt thêm gói Docker Compose riêng, vì các bản phân phối Docker Engine cho Linux không phải lúc nào cũng đi kèm sẵn plugin này.
Docker Compose có phù hợp cho production không?
Docker Compose có thể được sử dụng ở nhiều môi trường khác nhau, bao gồm cả phát triển (development), kiểm thử (testing), tích hợp liên tục (CI) và production ở một mức độ nhất định.
Tuy nhiên, với các ứng dụng lớn, phức tạp đặc biệt là hệ thống cần chạy trên nhiều máy chủ vật lý, cần khả năng tự động mở rộng (auto-scaling) hoặc tự phục hồi khi container gặp sự cố (self-healing) thì Docker Compose không phải là giải pháp tối ưu, vì nó được thiết kế chủ yếu để quản lý container trên một máy chủ duy nhất. Trong những trường hợp này, các nền tảng điều phối container như Kubernetes hoặc Docker Swarm thường là lựa chọn phù hợp hơn, nhờ khả năng quản lý container trên nhiều máy chủ và tự động xử lý các tình huống lỗi ở quy mô lớn.
Nói cách khác, Docker Compose là công cụ lý tưởng để bắt đầu, phát triển và thử nghiệm ứng dụng multi-container một cách nhanh chóng, còn việc có nên dùng tiếp cho production hay chuyển sang một nền tảng orchestration khác sẽ phụ thuộc vào quy mô và độ phức tạp thực tế của hệ thống khi đưa vào vận hành chính thức.
Câu hỏi thường gặp (FAQs)
Docker Compose có thay thế được Dockerfile không? Không. Hai công cụ này phục vụ hai mục đích khác nhau và thường được dùng cùng nhau: Dockerfile định nghĩa cách xây dựng một image cụ thể từ mã nguồn, trong khi Docker Compose định nghĩa cách chạy và kết nối nhiều container (có thể được build từ Dockerfile hoặc dùng image có sẵn) với nhau thành một ứng dụng hoàn chỉnh.
Có thể chạy nhiều file docker-compose.yml khác nhau cho từng môi trường (dev/staging/production) không? Có. Đây là cách làm phổ biến thường tạo một file cấu hình cơ bản dùng chung, sau đó dùng thêm các file override riêng cho từng môi trường (ví dụ docker-compose.dev.yml, docker-compose.prod.yml) và chỉ định file cần dùng bằng tham số -f khi chạy lệnh, ví dụ docker compose -f docker-compose.prod.yml up.
Docker Compose có cần kết nối Internet để chạy không? Chỉ cần kết nối Internet ở lần đầu tiên để tải các image chưa có sẵn trên máy. Sau khi image đã được tải về, các lần khởi động tiếp theo có thể chạy được mà không cần kết nối Internet, miễn là không có thay đổi nào yêu cầu tải thêm image mới.
Kết luận
Docker Compose giải quyết một vấn đề rất thực tế trong phát triển ứng dụng hiện đại: quản lý nhiều container phối hợp với nhau mà không phải xử lý thủ công từng lệnh riêng lẻ. Chỉ với một file YAML khai báo rõ ràng và một vài lệnh cơ bản, toàn bộ hệ thống ứng dụng có thể được khởi động, dừng và cấu hình lại một cách nhất quán trên bất kỳ máy nào cài Docker.
Với các dự án cá nhân, môi trường phát triển hoặc ứng dụng quy mô vừa và nhỏ, Docker Compose gần như là công cụ không thể thiếu. Còn khi hệ thống mở rộng đến quy mô lớn hơn, đây là thời điểm phù hợp để cân nhắc các giải pháp orchestration mạnh hơn như Kubernetes.
Để tìm hiểu thêm về dịch vụ, vui lòng liên hệ đến Viettel IDC:
- Hotline: 1800.8088 (miễn phí cước gọi)
- Fanpage: https://www.facebook.com/viettelidc
- Website: https://viettelidc.com.vn/
Viettel IDC - Nhà cung cấp dẫn đầu về giải pháp Trung tâm dữ liệu và Điện toán đám mây tại Việt Nam
Tin liên quan
Script là gì? Phân biệt với ngôn ngữ lập trình biên dịch
Script là gì, khác gì với ngôn ngữ lập trình biên dịch? Tìm hiểu các loại script phổ biến, ví dụ minh họa và ưu nhược điểm khi sử dụng.
Email hosting có hỗ trợ Outlook không? Cách cấu hình chi tiết
Email hosting có dùng được với Outlook không? Xem thông số IMAP/POP3/SMTP cần thiết, cách chọn giao thức phù hợp và trường hợp ngoại lệ cần lưu ý.
Chi phí sử dụng email hosting có đắt không? Phân tích và ước tính ngân sách
Khám phá mức giá email hosting hiện nay. Phân tích các yếu tố ảnh hưởng đến chi phí và các loại phí ẩn cần lưu ý trước khi đăng ký cho doanh nghiệp.
Những lưu ý khi chuyển đổi email doanh nghiệp an toàn, hạn chế mất dữ liệu
Hướng dẫn chi tiết các bước chuyển đổi email doanh nghiệp an toàn. Tìm hiểu cách sao lưu, cấu hình bản ghi mạng, thiết lập xác thực và các lỗi cần tránh.
Khi nào doanh nghiệp nên tự xây dựng Email Server?
Tự xây dựng Email Server tốn chi phí gì, và doanh nghiệp cần đáp ứng điều kiện nào để việc đầu tư này thực sự đáng giá? Có checklist tự đánh giá.
Email Migration là gì? Các hình thức di chuyển email phổ biến
Email Migration là gì, có những hình thức nào (Cutover, Staged, Hybrid, IMAP)? So sánh chi tiết và tiêu chí giúp chọn đúng hình thức cho doanh nghiệp.
Email Hosting vs Web Hosting: Phân biệt và có nên dùng chung không?
Khi đăng ký dịch vụ lưu trữ cho website, không ít người dùng nhận thấy nhà cung cấp chào bán kèm cả gói email theo tên miền, khiến ranh giới giữa Email Hosting và Web Hosting trở nên mơ hồ. Liệu email hosting vs web hosting là cùng một dịch vụ hay là hai hệ thống hoàn toàn khác nhau mà chỉ đang được bán chung cho tiện lợi?
Email Hosting vs Email Server: Nên chọn giải pháp nào cho doanh nghiệp?
So sánh chi tiết Email Hosting và Email Server: ưu nhược điểm, bảng so sánh trực quan và khung ra quyết định giúp doanh nghiệp chọn đúng giải pháp email.
Có nên sử dụng email hosting giá rẻ? Phân tích ưu nhược điểm và rủi ro
Email hosting giá rẻ có đáng dùng không? Phân tích ưu điểm, rủi ro dùng chung IP, bị đưa vào danh sách đen và tiêu chí giúp quyết định khi nào nên nâng cấp.
Bình luận ()