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

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.

09/11/2026

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.