Cài đặt và sử dụng Docker Compose trên Ubuntu là việc cần làm đúng thứ tự ngay từ đầu, vì chỉ cần bỏ sót một bước là dính lỗi “command not found” hoặc “permission denied” ngay lần chạy thử đầu tiên. Bài này đi thẳng vào từng bước cài đặt trên Ubuntu 20.04, 22.04, 24.04, phân biệt rõ Compose V1 và V2, kèm ví dụ file thực chạy được để bạn triển khai ngay trên VPS của InterData.
NỘI DUNG BÀI VIẾT
- Docker Compose là gì? Phân biệt docker-compose (V1) và docker compose (V2)
- Điều kiện cần trước khi cài Docker Compose trên Ubuntu
- Hướng dẫn cài đặt Docker Compose trên Ubuntu 20.04/22.04/24.04 từng bước
- Xử lý lỗi thường gặp khi cài và dùng Docker Compose
- Cách sử dụng Docker Compose sau khi cài đặt: viết file docker-compose.yml
- Các lệnh Docker Compose cơ bản cần nhớ
- Khi nào Docker Compose chưa đủ, cần Swarm hoặc Kubernetes?
- Nên chọn VPS hay Cloud Server để chạy Docker Compose lâu dài trên Ubuntu?
- Câu hỏi thường gặp về Docker Compose trên Ubuntu
Docker Compose Là Gì? Phân Biệt docker-compose (V1) Và docker compose (V2)
Docker Compose là công cụ định nghĩa và chạy nhiều container cùng lúc bằng một file YAML duy nhất, thay vì gõ từng lệnh docker run riêng lẻ. Nó dựa trên cách Docker đóng gói ứng dụng thành container, chỉ khác là quản lý theo nhóm dịch vụ liên kết với nhau như web app và database.
Có hai phiên bản, và nhầm lẫn giữa hai thứ này là nguyên nhân phổ biến nhất gây lỗi khi làm theo hướng dẫn cũ:
- Compose V1 là công cụ standalone viết bằng Python, gọi bằng lệnh có gạch ngang
docker-compose. Docker đã ngừng phát triển V1 từ tháng 7/2023, không còn nhận bản vá. - Compose V2 là plugin viết bằng Go, tích hợp thẳng vào Docker CLI, gọi bằng lệnh không gạch ngang
docker compose. Đây là bản được Docker khuyến nghị chính thức và là bản bài này hướng dẫn cài.
Nếu máy bạn cài Docker Engine bản mới theo repo chính thức mà vẫn gõ docker-compose theo thói quen từ tài liệu cũ, bạn sẽ gặp ngay lỗi command not found – vì V1 không tự có sẵn, phải cài tách riêng và không còn được khuyến khích dùng cho máy mới.

Điều Kiện Cần Trước Khi Cài Docker Compose Trên Ubuntu
Trước khi chạy bất kỳ lệnh cài đặt nào, cần chắc chắn bốn điều sau, vì thiếu một trong số đó là nguồn gốc phần lớn lỗi cài đặt về sau:
- Một máy chủ chạy Ubuntu LTS được hỗ trợ: 20.04 (Focal), 22.04 (Jammy) hoặc 24.04 (Noble). Ba bản này dùng chung một quy trình cài, khác nhau ở tên codename mà script tự nhận diện.
- Quyền root hoặc tài khoản có
sudo. Đây là lý do VPS phù hợp để tự triển khai container hơn Shared Hosting – Shared Hosting không cấp quyền root nên không thể cài Docker Engine hay Docker Compose. - Đã kết nối được vào máy chủ, thường qua SSH vào VPS Linux bằng terminal hoặc PuTTY.
- Docker Engine đã được cài. Docker Compose Plugin phụ thuộc vào Docker Engine, không chạy độc lập. Nếu chưa có, làm theo hướng dẫn cài Docker Engine trên VPS Ubuntu/Debian trước, sau đó quay lại phần dưới.
docker --version
lsb_release -a
Lệnh đầu kiểm tra Docker Engine đã cài chưa, lệnh sau xác nhận đúng bản Ubuntu LTS đang dùng.
Hướng Dẫn Cài Đặt Docker Compose Trên Ubuntu 20.04/22.04/24.04 Từng Bước
Quy trình dưới đây cài Compose V2 qua repo APT chính thức của Docker – cách được khuyến nghị vì tự nhận bản vá cùng Docker Engine, không phải tải binary thủ công. Áp dụng như nhau cho cả ba bản Ubuntu LTS.
1/ Gỡ các bản Docker/Compose cũ nếu từng cài qua kênh không chính thức, tránh xung đột gói.
sudo apt remove docker docker-engine docker.io containerd runc docker-compose
2/ Cập nhật danh sách gói và cài các gói cần thiết để thêm repo qua HTTPS.
sudo apt update
sudo apt install ca-certificates curl gnupg
3/ Thêm GPG key chính thức của Docker, dùng để xác thực gói khi cài qua APT.
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4/ Thêm repository Docker vào nguồn cài đặt của Ubuntu. Lệnh tự nhận đúng codename (focal/jammy/noble) theo bản Ubuntu đang chạy.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5/ Cài Docker Engine cùng Compose Plugin trong một lệnh.
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6/ Kiểm tra Compose Plugin đã nhận diện đúng chưa. Đây là bước kiểm tra bắt buộc trước khi đi tiếp – nếu lệnh này báo lỗi, quay lại bước 5.
docker compose version
Kết quả đúng dạng “Docker Compose version vX.X.X” như ảnh minh họa. Nếu báo “docker: ‘compose’ is not a docker command”, gói docker-compose-plugin chưa cài thành công.

7/ Thêm user hiện tại vào group docker để không phải gõ sudo trước mọi lệnh docker.
sudo usermod -aG docker $USER
newgrp docker
Nếu newgrp không có tác dụng ngay, logout rồi SSH lại vào VPS để nhận quyền group mới.
8/ Chạy thử container đầu tiên để xác nhận toàn bộ chuỗi cài đặt hoạt động.
docker run hello-world
Thấy dòng “Hello from Docker!” nghĩa là Docker Engine và Compose Plugin đã sẵn sàng dùng thật.

Muốn gỡ chỉ riêng Compose Plugin mà giữ Docker Engine, dùng sudo apt remove docker-compose-plugin. Trường hợp máy không truy cập được repo APT của Docker (mạng nội bộ hạn chế), có thể tải trực tiếp binary Compose V2 từ GitHub Releases của Docker và đặt vào ~/.docker/cli-plugins/docker-compose, sau đó chmod +x – cách này ít gặp hơn và nên ưu tiên cách qua APT ở trên.
Săn Hot Deals VPS & Cloud Server Tiết Kiệm
Canh Me tổng hợp khuyến mãi, hot deals VPS & Cloud Server mới nhất của InterData – xem trước khi chọn gói để tiết kiệm chi phí triển khai.
Xử Lý Lỗi Thường Gặp Khi Cài Và Dùng Docker Compose
Phần lớn lỗi khi mới cài Docker Compose rơi vào năm dạng sau. Tra đúng thông báo lỗi để xử lý nhanh thay vì cài lại từ đầu.
| Thông báo lỗi | Nguyên nhân | Cách xử lý |
|---|---|---|
| docker-compose: command not found | Máy chỉ có Compose V2 nhưng gõ lệnh V1 có gạch ngang | Đổi sang docker compose (không gạch ngang), hoặc cài docker-compose-plugin nếu chưa có |
| permission denied while trying to connect to the Docker daemon socket | User hiện tại chưa thuộc group docker | Chạy sudo usermod -aG docker $USER rồi newgrp docker hoặc logout/login lại |
| Cannot connect to the Docker daemon at unix:///var/run/docker.sock | Dịch vụ Docker chưa chạy hoặc bị dừng | Chạy sudo systemctl start docker và sudo systemctl enable docker để tự khởi động cùng hệ thống |
| docker: ‘compose’ is not a docker command | Chưa cài docker-compose-plugin, hoặc cài Docker qua kênh không chính thức thiếu plugin này | Cài lại theo repo APT chính thức ở mục cài đặt, xác nhận bằng docker compose version |
| Bind for 0.0.0.0:xxxx failed: port is already allocated | Cổng khai báo trong docker-compose.yml đang bị service khác hoặc container khác chiếm | Đổi cổng map ở phần ports, hoặc chạy sudo lsof -i :xxxx để tìm và dừng tiến trình đang chiếm |
Khi chạy Docker Compose lâu dài trên máy chủ mở port ra ngoài internet, nên kết hợp thêm các cách bảo mật VPS khi chạy container – đóng port không cần thiết, giới hạn quyền container – thay vì chỉ xử lý lỗi phát sinh.
Cách Sử Dụng Docker Compose Sau Khi Cài Đặt: Viết File docker-compose.yml
File docker-compose.yml là nơi khai báo toàn bộ service, image, biến môi trường và volume của ứng dụng bằng cú pháp YAML. Ví dụ dưới đây dựng một WordPress kết nối MySQL – mô hình web app + database phổ biến nhất khi mới học Compose.
services:
web:
image: wordpress:latest
restart: unless-stopped
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
volumes:
wp_data:
db_data:
Từ Compose V2, trường version: ở đầu file không còn bắt buộc và có thể bỏ qua – nếu copy file cũ còn dòng này, Compose vẫn chạy nhưng có thể hiện cảnh báo obsolete, không phải lỗi nghiêm trọng.
Đặt file này vào một thư mục riêng trên VPS, chạy docker compose up -d trong đúng thư mục đó, WordPress sẽ chạy ở cổng 8080 và tự kết nối MySQL qua tên service db – Compose tự tạo network nội bộ giữa các service cùng file. Muốn expose ra domain thật, đặt thêm Nginx trên Ubuntu làm reverse proxy phía trước container web. Một ví dụ khác dùng đúng mô hình này là triển khai n8n bằng Docker trên VPS, cũng chỉ một file YAML và một lệnh up.
Các Lệnh Docker Compose Cơ Bản Cần Nhớ
Toàn bộ lệnh dưới đây chạy trong thư mục chứa file docker-compose.yml, dùng cú pháp V2 docker compose.
| Lệnh | Chức năng |
|---|---|
docker compose up -d |
Khởi tạo và chạy toàn bộ service ở chế độ nền (detached) |
docker compose down |
Dừng và xóa container, network do file này tạo ra (giữ nguyên volume) |
docker compose ps |
Xem trạng thái các container đang chạy trong project |
docker compose logs -f |
Theo dõi log realtime của tất cả service, thêm tên service để xem riêng |
docker compose restart |
Khởi động lại service sau khi sửa cấu hình ứng dụng |
docker compose build |
Build lại image từ Dockerfile khi dùng build: thay vì image: |
docker compose exec web bash |
Mở shell bên trong container đang chạy để debug trực tiếp |
docker compose pull |
Kéo bản image mới nhất của các service về trước khi up lại |
Khi Nào Docker Compose Chưa Đủ, Cần Swarm Hoặc Kubernetes?
Docker Compose chạy tốt trên một máy chủ duy nhất, nhưng không tự động chuyển container sang máy khác khi máy hiện tại quá tải hoặc gặp sự cố – đó là giới hạn cần biết trước khi dồn hết production vào một file YAML.
Khi ứng dụng cần chạy trên nhiều máy chủ, tự phục hồi khi container chết, hoặc scale số lượng instance theo lưu lượng thực tế, đây là lúc cần công cụ điều phối multi-container ở tầng cluster như Docker Swarm hoặc Kubernetes.
Trước khi chuyển hẳn sang hướng đó, tham khảo thêm so sánh Kubernetes và Docker khi cần scale lớn hơn Compose để chọn đúng công cụ theo quy mô thật của hệ thống, tránh đầu tư hạ tầng phức tạp hơn mức cần thiết.
Nên Chọn VPS Hay Cloud Server Để Cài Đặt Và Sử Dụng Docker Compose Lâu Dài Trên Ubuntu?
Cả hai đều cấp quyền root để cài Docker Compose bình thường, khác nhau ở khả năng đổi tài nguyên khi số container tăng lên theo thời gian.
| Tiêu chí | VPS | Cloud Server |
|---|---|---|
| Phù hợp cho | Học và thực hành Compose, dev/test, 1-2 container nhỏ (web app + database, n8n, tool cá nhân) | Chạy nhiều service cùng lúc ở production, workload biến động theo thời gian thực |
| Nâng/hạ tài nguyên | Thường cần đổi gói hoặc khởi động lại để nâng cấu hình | Điều chỉnh CPU/RAM nhanh mà không cần đổi máy chủ vật lý |
| Chi phí khởi điểm | Thấp, phù hợp bắt đầu và thử nghiệm | Cao hơn tương ứng với tài nguyên linh hoạt hơn |
| Use case với Docker Compose | Một file docker-compose.yml, vài service cố định | Nhiều project Compose chạy song song, cần tách tài nguyên theo từng workload |
Bắt đầu bằng VPS để làm quen thao tác cài đặt và viết file Compose là hợp lý về chi phí. Khi số container tăng lên hoặc ứng dụng bắt đầu có traffic thật cần tài nguyên co giãn, chuyển sang Cloud Server tránh phải build lại toàn bộ môi trường từ đầu.
Câu Hỏi Thường Gặp Về Docker Compose Trên Ubuntu
Docker Compose có cần cài Docker trước không?
Có. Docker Compose Plugin (V2) chạy dựa trên Docker Engine, không hoạt động độc lập. Nếu chưa có Docker Engine, lệnh cài Compose Plugin qua APT vẫn chạy được nhưng docker compose sẽ báo lỗi kết nối daemon khi thực thi.
Ubuntu 24.04 có dùng được Docker Compose V1 không?
Kỹ thuật vẫn cài thủ công được bằng cách tải binary standalone, nhưng V1 đã ngừng cập nhật từ 2023 nên không nên dùng cho máy mới. Ubuntu 24.04 nên cài thẳng Compose V2 qua repo APT chính thức của Docker.
Làm sao kiểm tra đã cài Docker Compose chưa?
Chạy docker compose version. Nếu hiện số phiên bản dạng “Docker Compose version v2.x.x” là đã cài đúng plugin V2. Nếu báo lỗi “not a docker command”, plugin chưa được cài hoặc cài không thành công.
Docker Compose và Docker Swarm khác nhau thế nào?
Compose quản lý nhiều container trên một máy chủ duy nhất bằng một file YAML. Swarm điều phối container trên nhiều máy chủ thành một cluster, tự phân phối tải và khởi động lại container khi một node gặp sự cố – thứ Compose không làm được.
Chạy Docker Compose trên Shared Hosting được không?
Không. Docker Compose cần quyền root để cài Docker Engine và quản lý daemon hệ thống, trong khi Shared Hosting không cấp quyền này cho từng khách hàng. Cần VPS hoặc Cloud Server mới cài và chạy được.
Lời kết
Cài đặt và sử dụng Docker Compose trên Ubuntu không khó nếu đi đúng thứ tự: xác nhận Docker Engine đã sẵn sàng, cài Compose Plugin qua repo chính thức, thêm user vào group docker, rồi mới viết file YAML thật. Phần lớn lỗi người mới gặp đến từ việc gõ nhầm docker-compose khi máy chỉ có V2, hoặc quên cấp quyền group docker. Nắm chắc hai điểm này, phần còn lại chỉ là lặp lại vài lệnh quen thuộc mỗi lần deploy thêm service mới.
Nội dung mang tính tham khảo. Lệnh, cú pháp và cách cài đặt có thể thay đổi theo phiên bản Docker, Docker Compose và Ubuntu tại thời điểm bạn thực hiện. Nên đối chiếu tài liệu chính thức tại docs.docker.com/compose, sao lưu dữ liệu và kiểm thử trước khi áp dụng cho production.
