Cách cài Docker trên VPS Ubuntu chi tiết từ A đến Z

Bạn vừa SSH vào một VPS Ubuntu mới, nhiệm vụ tiếp theo là chạy Docker để deploy ứng dụng. Chỉ cần chạy một câu lệnh đã có Docker, nhưng nếu không hiểu rõ cơ chế repo và quyền non-root, bạn sẽ gặp lỗi ngay bước đầu. Bài này hướng dẫn bạn cài Docker Engine trên Ubuntu 24.04 LTS (áp dụng được cho 22.04 và 20.04), cấu hình Docker Compose, và kiểm tra mọi thứ hoạt động trơn tru.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS (hoặc 22.04, 20.04) với quyền root hoặc sudo.
- User non-root có quyền sudo (hướng dẫn nếu chưa có, bạn tạo user mới:
adduser deployvàusermod -aG sudo deploy). - Port 80 và 443 mở trên firewall nếu bạn định chạy web container (dùng
ufwhoặciptables). - Ít nhất 1 GB RAM và 10 GB disk (NVMe SSD khuyến nghị), đây là cấu hình tối thiểu để Docker chạy ổn định với vài container.
Nếu bạn chưa có VPS, có thể tham khảo dịch vụ thuê VPS Linux tại thueVPS với ổ cứng NVMe và IPv4 riêng.
Vì sao cần cài Docker đúng cách?
Docker Engine là nền tảng container hóa cho phép bạn chạy ứng dụng trong môi trường cô lập. Việc dùng script cài tự động (ví dụ curl -fsSL get.docker.com | sh) nhanh nhưng thiếu kiểm soát phiên bản repo. Cài từ repo chính thức của Docker giúp bạn dễ dàng update, kiểm tra checksum, và tránh lỗi “repository is not signed”. Với các VPS chạy workload production, bạn cần biết chính xác Docker Engine và containerd đã được cài ra sao.
Bước 1, Cài Docker Engine từ repo chính thức
Bước này thực hiện với user có sudo. Đầu tiên, update package index và cài các dependency cần thiết:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
Tiếp theo, thêm GPG key của Docker:
sudo mkdir -p /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
Thêm repository Docker vào sources.list của Ubuntu:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Lưu ý: $(lsb_release -cs) tự động lấy tên codename (ví dụ noble cho Ubuntu 24.04). Nếu bạn dùng bản Ubuntu LTS khác, kiểm tra lại codename bằng lệnh lsb_release -cs.
Cuối cùng, cài Docker Engine, containerd, và Docker Compose plugin:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verify: Kiểm tra Docker Engine đã chạy chưa:
sudo systemctl status docker
Output mong đợi: active (running) và dòng Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled). Nếu chưa chạy, bật và kích hoạt tự động:
sudo systemctl enable --now docker
Bước 2, Cấu hình Docker cho user non-root
Mặc định, Docker yêu cầu quyền root để chạy. Để tránh dùng sudo mỗi lần, thêm user của bạn vào group docker:
sudo usermod -aG docker $USER
Sau đó, đăng xuất và đăng nhập lại (hoặc chạy newgrp docker) để áp dụng. Kiểm tra:
docker info | grep -i "server version"
Output hiển thị phiên bản Docker server (ví dụ Server Version: 27.1.1). Nếu không có lỗi “permission denied”, bạn đã config đúng.
Cảnh báo: Group docker tương đương quyền root. Chỉ thêm user tin cậy vào group này. Không thêm user guest hoặc user không rõ nguồn gốc.
Bước 3, Cài Docker Compose (plugin)
Với gói docker-compose-plugin đã cài ở trên, bạn đã có Docker Compose v2 dưới dạng plugin. Kiểm tra:
docker compose version
Output mong đợi: Docker Compose version v2.28.0 (hoặc tương tự). Lưu ý: lệnh là docker compose (không có dấu gạch ngang), không phải docker-compose (cái cũ). Nếu bạn cần standalone binary cũ, có thể cài riêng, nhưng plugin là khuyến nghị chính thức.
Thử nghiệm chạy một container đơn giản để verify toàn bộ stack hoạt động:
docker run hello-world
Nếu thành công, bạn sẽ thấy thông báo “Hello from Docker!” và giải thích rằng Docker Engine đã pull image từ Docker Hub và chạy container.
Bước 4, Cấu hình tùy chọn nâng cao (tối ưu production)
Sau khi cài Docker, bạn nên cấu hình một số tham số cho môi trường production:
- Log rotation: Mặc định Docker ghi log vô hạn, dễ đầy disk. Tạo file
/etc/docker/daemon.json:
Sau đó restart Docker:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }sudo systemctl restart docker. - Limit resource cho container mặc định: Bạn có thể set mặc định memory và CPU trong
daemon.json(ví dụ"default-ulimits": {"nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}}). - Enable live-restore: Cho phép container chạy tiếp khi Docker daemon khởi động lại (thêm
"live-restore": true).
Kiểm tra daemon.json hợp lệ:
docker info --format '{{json .}}' | jq .
Hoặc dùng docker info | grep -i "live restore" để xác nhận.
Xử lý lỗi thường gặp
Lỗi 1, "Cannot connect to the Docker daemon"
Nguyên nhân: Docker service chưa chạy hoặc user không có quyền. Kiểm tra:
sudo systemctl status docker
journalctl -xu docker.service
Nếu lỗi permission denied khi chạy với user non-root, hãy thêm user vào group docker như Bước 2. Nếu lỗi connection refused, Docker socket không hoạt động, hãy restart Docker: sudo systemctl restart docker.
Lỗi 2, "Error response from daemon: conflict: unable to delete ... (cannot be forced)"
Xảy ra khi xóa image mà có container đang dùng. Liệt kê container và stop chúng trước:
docker ps -a
docker rm <container_id>
docker rmi <image_id>
Lỗi 3, Disk đầy do Docker log
Kiểm tra dung lượng:
du -sh /var/lib/docker/containers/*/*-json.log
Xóa log tạm thời: sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log. Để phòng ngừa, cấu hình log rotation như Bước 4.
Câu hỏi thường gặp về Docker trên VPS Ubuntu
Tôi có cần Docker Desktop trên VPS không?
Không. Docker Desktop dành cho máy tính cá nhân (macOS, Windows). Trên VPS Linux, bạn chỉ cài Docker Engine và Docker Compose plugin. Docker Desktop không được hỗ trợ trên server headless.
Docker Compose v1 và v2 khác nhau thế nào?
Docker Compose v1 dùng lệnh docker-compose (có dấu gạch), là standalone binary viết bằng Python. Docker Compose v2 là plugin tích hợp vào Docker CLI, dùng lệnh docker compose. V2 nhanh hơn, tương thích hoàn toàn với file compose YAML, và được khuyến nghị sử dụng.
Làm sao để update Docker lên phiên bản mới?
Dùng lệnh: sudo apt update && sudo apt upgrade docker-ce docker-ce-cli containerd.io. Docker sẽ update lên phiên bản ổn định mới nhất. Luôn backup dữ liệu container (volumes) trước khi update.
Tôi có thể chạy Docker trên VPS 1 GB RAM không?
Có thể, nhưng giới hạn số container và memory. Nên dùng VPS có ít nhất 2 GB RAM để chạy Docker Compose với vài service (web, database). Nếu bạn cần nhiều container hơn, cân nhắc thuê VPS Linux với RAM 4 GB hoặc 8 GB.
Docker có an toàn cho production trên VPS không?
Có, nếu bạn cấu hình đúng: không chạy container với --privileged trừ khi thực sự cần, dùng user namespace remapping, giới hạn resource, và cập nhật Docker thường xuyên. Các VPS chạy Docker production thường cần thêm monitoring và log.
Tôi cần mở port nào cho Docker trên firewall?
Mặc định Docker không yêu cầu mở port nào để chạy. Khi bạn expose port của container (ví dụ -p 80:80), Docker tự động thêm rule vào iptables. Nếu bạn dùng ufw, bạn cần mở port 80 và 443 cho web container, hoặc port tương ứng với service của bạn.
Bài viết liên quan
- Hướng dẫn cấu hình UFW firewall trên VPS Ubuntu
- Cấu hình Nginx làm reverse proxy trên Ubuntu 24.04
- Tối ưu Linux và NVMe cho workload I/O cao trên VPS
- Hướng dẫn cài đặt Redis cache cho ứng dụng web trên VPS


