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 nổi bật
Tin liên quan
Cổng SATA là gì? Cách nhận biết và kết nối ổ HDD, SSD
Cổng SATA là gì? Cách nhận biết cổng SATA trên mainboard, phân biệt các phiên bản và kiểm tra ổ HDD, SSD có tương thích trước khi nâng cấp.
Microsoft Publisher là gì? Tổng quan về phần mềm thiết kế dàn trang
Microsoft Publisher là gì? Đây là phần mềm dàn trang của Microsoft, hỗ trợ thiết kế ấn phẩm bằng các mẫu có sẵn và công cụ sắp xếp văn bản, hình ảnh linh hoạt.
Có nên sử dụng các công cụ Text to speech miễn phí? Ưu điểm và hạn chế
Có nên sử dụng các công cụ Text to Speech miễn phí? Cân nhắc chất lượng giọng đọc, hạn mức và quyền sử dụng để biết khi nào bản miễn phí đủ dùng hoặc cần nâng cấp.
Kiến trúc Client Server là gì? Cách mô hình máy chủ - máy khách hoạt động
Kiến trúc Client Server là gì? Đây là mô hình máy khách - máy chủ, tổ chức việc gửi yêu cầu, xử lý và trao đổi dữ liệu trong các ứng dụng và dịch vụ mạng.
Cấu trúc silo là gì trong SEO? Cách xây dựng cấu trúc silo cho website
Cấu trúc silo là gì? Nắm rõ cách phân nhóm nội dung, phân biệt silo vật lý và silo ảo để xây dựng website dễ điều hướng, thuận tiện quản lý và hỗ trợ SEO.
Top 15 các phần mềm quay lại màn hình miễn phí cho máy tính và điện thoại
Các phần mềm quay lại màn hình miễn phí giúp bạn ghi hình rõ nét, lưu lại thao tác và tạo video hướng dẫn trực quan cho nhu cầu học tập, làm việc hằng ngày.
Postfix là gì? Hướng dẫn cài đặt và cấu hình trên Ubuntu
Postfix là gì được giải đáp qua vai trò của phần mềm chuyển thư mã nguồn mở, giúp doanh nghiệp chủ động quản lý luồng email và cấu hình hệ thống trên Linux.
Cách quét mã độc cho website WordPress và lưu ý bảo mật cần biết
Cách quét mã độc cho website WordPress giúp phát hiện tệp đáng ngờ, xác định dấu vết xâm nhập và hỗ trợ xử lý sớm nguy cơ ảnh hưởng đến dữ liệu, người truy cập.
Top 20 các plugin hữu ích cho WordPress tốt nhất nên cài đặt
Các plugin hữu ích cho WordPress giúp mở rộng chức năng sẵn có của website, cải thiện trải nghiệm người dùng và đơn giản hóa công việc quản trị hằng ngày.
Hướng dẫn cài đặt các ứng dụng trên Ubuntu cho người mới
Hướng dẫn cài đặt các ứng dụng trên Ubuntu chi tiết từng bước, giúp người mới dễ dàng thao tác từ tải phần mềm, thiết lập gói cài đến khởi chạy ứng dụng.
Bình luận ()