Tuyển dụng
Viettel IDC

Docker Compose là gì? Cấu trúc file và các lệnh cơ bản

15/09/2026

Khi 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ì? Cấu trúc file và các lệnh cơ bản

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

Lệnh

Chức năng

docker compose up

Khởi động toàn bộ các service được định nghĩa trong file; tự động tải image nếu chưa có sẵn

docker compose down

Dừng và xóa các container, network đã được tạo bởi Compose

docker compose stop

Dừng các container đang chạy, không xóa chúng

docker compose start

Khởi động lại các container đã dừng trước đó

docker compose restart

Khởi động lại các container đang chạy

docker compose ps

Hiển thị trạng thái hiện tại của các container thuộc dự án

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.

Docker Compose V1 và V2 khác nhau thế nào?

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

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

05/10/2026

BitLocker là gì? Cách hoạt động, cách bật và những lưu ý quan trọng

BitLocker là gì và hoạt động như thế nào? Tìm hiểu vai trò của TPM, Recovery Password, các tùy chọn mã hóa và cách bật BitLocker trên Windows.

05/10/2026

Cloud Hosting có an toàn không? Những điều cần biết về bảo mật

Cloud Hosting có an toàn không? Khám phá mức độ bảo mật và những yếu tố cần lưu ý để website, dữ liệu được bảo vệ hiệu quả trên môi trường Cloud.

05/10/2026

VPS vs Physical Server: Nên chọn máy chủ ảo hay máy chủ vật lý?

VPS vs Physical Server khác nhau thế nào? Tìm hiểu đặc điểm, hiệu năng và cách lựa chọn máy chủ phù hợp với nhu cầu vận hành hệ thống.

05/10/2026

So sánh Shared Hosting vs WordPress Hosting: Đâu là lựa chọn phù hợp?

Shared Hosting vs WordPress Hosting khác nhau thế nào? Tìm hiểu đặc điểm từng loại và cách lựa chọn hosting phù hợp với nhu cầu website.

29/09/2026

"SOVEREIGN CLOUD" VÀ NGHỊCH LÝ CHUYỂN ĐỔI SỐ: GIẢI MÃ BÀI TOÁN TUÂN THỦ CHO NGÀNH TÀI CHÍNH & CHÍNH PHỦ

Các tổ chức thuộc nhóm ngành trọng yếu như tài chính, ngân hàng (BFSI) và cơ quan nhà nước đang khao khát hiện đại hóa hệ thống IT (chuyển đổi sang kiến trúc Microservices, sử dụng Container/Kubernetes) để tăng tốc độ triển khai dịch vụ và nâng cao trải nghiệm người dùng. Tuy nhiên, họ lại đang vấp phải một "nghịch lý" lớn: Càng muốn áp dụng công nghệ Cloud hiện đại, rào cản về tuân thủ pháp lý và an toàn thông tin càng trở nên khắt khe.

29/09/2026

BÀI TOÁN "NOISY NEIGHBOR" TRÊN CLOUD VÀ CHIẾN LƯỢC TỐI ƯU HIỆU NĂNG CHO HỆ THỐNG CỐT LÕI

Trong kỷ nguyên mà dữ liệu là "dầu mỏ mới", việc vận hành các hệ thống xương sống (Core ERP, Core Banking) hay các workload tính toán chuyên sâu (AI, Machine Learning, Datalake) đòi hỏi năng lực phần cứng vô cùng mạnh mẽ.

27/09/2026

"BÃO GIÁ" HẠ TẦNG CNTT VÀ BÀI TOÁN SỐNG CÒN CỦA DOANH NGHIỆP: VÌ SAO PRIVATE CLOUD DẠNG DỊCH VỤ LÊN NGÔI?

Làn sóng bùng nổ hạ tầng AI toàn cầu đang tạo ra một "cơn địa chấn" về giá phần cứng máy chủ, chip nhớ DRAM, ổ cứng doanh nghiệp và chi phí năng lượng. Đứng trước áp lực phải chuyển đổi số nhưng lại vấp phải bài toán chi phí đầu tư (CapEx) đắt đỏ cùng thời gian giao hàng kéo dài hàng tháng, các nhà quản trị công nghệ (CIO) và tài chính (CFO) đang tìm kiếm một hướng đi mới: Không cần bỏ hàng tỷ đồng mua sắm hạ tầng mà vẫn sở hữu riêng một hệ thống Private Cloud hoàn chỉnh, an toàn và sẵn sàng vận hành ngay lập tức.

29/09/2026

Digital Workplace là gì? Xu hướng môi trường làm việc số cho doanh nghiệp

Digital Workplace là gì? Khám phá mô hình vận hành, thành phần, lợi ích, ứng dụng, thách thức và xu hướng môi trường làm việc số cho doanh nghiệp.

29/09/2026

Lỗ hổng Shellshock là gì? Cơ chế, tác động và cách khắc phục

Lỗ hổng Shellshock (CVE-2014-6271) trong Bash là gì, vì sao nghiêm trọng? Tìm hiểu nguyên nhân, hệ thống bị ảnh hưởng và cách kiểm tra, vá lỗi.

29/09/2026

Scratch là gì? Cách hoạt động, ứng dụng và đối tượng phù hợp

Scratch là gì? Tìm hiểu cách lập trình bằng khối lệnh, các khái niệm có thể học, ứng dụng thực tế và sự khác nhau giữa Scratch với ScratchJr.