Hướng Dẫn Cài Đặt Và Sử Dụng Docker Compose Trên Ubuntu Chi Tiết

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.

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.

Docker Compose

Đ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.

Thuê VPS InterData

Toàn quyền root, cài Docker Compose ngay sau khi nhận VPS

Cần VPS Hiệu Năng Cao Toàn Quyền Quản Trị?

Các bước cài đặt phía dưới đều cần chạy lệnh sudo và cấu hình repo hệ thống – việc chỉ thực hiện được trên VPS hoặc Cloud Server, không thể làm trên Shared Hosting. VPS InterData cấp quyền root đầy đủ, CPU thế hệ mới và SSD NVMe để bạn cài và chạy thử ngay.

Xem Các Gói VPS Giá Rẻ ⟶

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.

Kiểm tra docker compose version

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.

Chạy thử container

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.

Xem Ưu Đãi Tại Canh Me ⟶

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 dockersudo 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.

Cloud Server InterData

Nâng/hạ tài nguyên nhanh khi chạy nhiều container

Docker Compose đang chạy nhiều service, tải tăng dần theo thời gian?

Khi một VPS cố định không còn đủ CPU/RAM cho toàn bộ container, Cloud Server InterData cho phép nâng cấu hình theo nhu cầu thực tế mà không phải dựng lại môi trường Docker từ đầu, vẫn giữ quyền root và hỗ trợ kỹ thuật 24/7.

Xem các gói Cloud Server ⟶

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.