Docker là nền tảng giúp đóng gói và vận hành website, API, database, Bot Discord cùng nhiều ứng dụng khác trong các container độc lập. Thay vì cài trực tiếp toàn bộ thư viện lên hệ điều hành, bạn có thể sử dụng Docker để tạo môi trường triển khai nhất quán, dễ sao lưu, cập nhật và di chuyển giữa các máy chủ.
Bài viết này hướng dẫn cách cài Docker trên VPS Ubuntu bằng kho phần mềm chính thức của Docker. Đây là phương pháp phù hợp hơn cho máy chủ sử dụng lâu dài vì có thể cập nhật Docker thông qua trình quản lý gói apt.
Yêu cầu trước khi cài Docker
Bạn cần chuẩn bị:
- VPS đang chạy Ubuntu 64-bit.
-
Tài khoản
roothoặc người dùng có quyềnsudo. - VPS có kết nối Internet.
- Có quyền truy cập VPS bằng SSH.
- Nên sao lưu dữ liệu nếu máy chủ đang vận hành dịch vụ.
Theo tài liệu Docker hiện hành, Docker Engine hỗ trợ các phiên bản Ubuntu 64-bit gồm Ubuntu 26.04 LTS, Ubuntu 25.10, Ubuntu 24.04 LTS và Ubuntu 22.04 LTS. Docker cũng hỗ trợ nhiều kiến trúc như amd64, arm64, armhf, s390x và ppc64le.
Kết nối đến VPS bằng lệnh:
ssh root@IP_VPS
Thay IP_VPS bằng địa chỉ IP thực tế của máy chủ.
Bước 1: Kiểm tra phiên bản Ubuntu
Trước khi cài đặt, hãy kiểm tra phiên bản hệ điều hành:
lsb_release -a
Hoặc:
cat /etc/os-release
Kiểm tra kiến trúc CPU:
dpkg --print-architecture
Kết quả phổ biến trên VPS là:
amd64
Bước 2: Cập nhật hệ thống
Cập nhật danh sách gói và nâng cấp các thành phần hiện có:
sudo apt update sudo apt upgrade -y
Sau khi quá trình nâng cấp hoàn tất, bạn có thể khởi động lại VPS nếu kernel hoặc các gói hệ thống quan trọng vừa được cập nhật:
sudo reboot
Sau đó, kết nối SSH trở lại VPS.
Bước 3: Gỡ các gói Docker có thể gây xung đột
Ubuntu có thể đã cài một số gói Docker từ kho mặc định hoặc các công cụ có tên tương tự. Những gói như docker.io, docker-compose, docker-compose-v2, docker-buildx, podman-docker, containerd và runc có thể xung đột với phiên bản Docker Engine chính thức. Docker khuyến nghị gỡ các gói này trước khi tiếp tục cài đặt.
Chạy lệnh:
sudo apt remove $(dpkg --get-selections \ docker.io docker-compose docker-compose-v2 docker-doc \ docker-buildx podman-docker containerd runc | cut -f1)
Nếu hệ thống thông báo không có gói nào cần gỡ, bạn có thể tiếp tục bước tiếp theo.
Lệnh trên không tự động xóa image, container, network hoặc volume cũ nằm trong thư mục /var/lib/docker.
Bước 4: Cài các gói cần thiết
Cài đặt ca-certificates và curl để VPS có thể xác minh chứng chỉ và tải khóa xác thực của Docker:
sudo apt update sudo apt install ca-certificates curl -y
Tạo thư mục chứa khóa:
sudo install -m 0755 -d /etc/apt/keyrings
Tải khóa GPG chính thức của Docker:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc
Cho phép hệ thống đọc khóa:
sudo chmod a+r /etc/apt/keyrings/docker.asc
Bước 5: Thêm kho phần mềm chính thức của Docker
Chạy nguyên khối lệnh sau:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF
Sau đó cập nhật lại danh sách gói:
sudo apt update
Phương pháp thiết lập kho apt chính thức giúp Docker Engine, Docker CLI, Buildx và Docker Compose có thể được cài đặt và cập nhật thông qua hệ thống quản lý gói của Ubuntu.
Bước 6: Cài Docker Engine và Docker Compose
Cài toàn bộ thành phần cần thiết:
sudo apt install docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin -y
Các gói trên bao gồm:
-
docker-ce: Docker Engine. -
docker-ce-cli: công cụ dòng lệnh Docker. -
containerd.io: container runtime. -
docker-buildx-plugin: công cụ build image nâng cao. -
docker-compose-plugin: Docker Compose phiên bản plugin.
Docker Compose hiện đại sử dụng cú pháp:
docker compose
Thay vì cú pháp cũ:
docker-compose
Docker khuyến nghị cài Compose dưới dạng CLI plugin từ kho chính thức; bản standalone cũ chỉ còn được duy trì chủ yếu để tương thích ngược.
Bước 7: Kiểm tra trạng thái Docker
Kiểm tra Docker service:
sudo systemctl status docker
Nếu Docker chưa chạy, khởi động bằng lệnh:
sudo systemctl start docker
Bật Docker tự khởi động cùng VPS:
sudo systemctl enable docker sudo systemctl enable containerd
Trên Ubuntu và Debian, Docker thường được cấu hình tự khởi động sau khi cài đặt. Hai lệnh trên giúp bạn xác nhận rõ Docker và containerd sẽ hoạt động sau mỗi lần VPS khởi động lại.
Kiểm tra phiên bản:
docker --version docker compose version
Bước 8: Chạy container kiểm tra
Docker cung cấp image hello-world để xác nhận quá trình cài đặt:
sudo docker run hello-world
Lệnh này sẽ:
-
Kiểm tra image
hello-worldtrên VPS. - Tải image từ registry nếu chưa có.
- Tạo một container.
- Chạy container và hiển thị thông báo xác nhận.
- Dừng container sau khi hoàn tất.
Nếu thấy thông báo:
Hello from Docker!
Docker đã được cài đặt thành công. Đây cũng là phương pháp xác minh chính thức được Docker hướng dẫn sau khi cài Docker Engine trên Ubuntu.
Bước 9: Chạy Docker không cần sudo
Theo mặc định, người dùng thông thường phải thêm sudo trước lệnh Docker vì Docker daemon sử dụng Unix socket thuộc quyền quản lý của root.
Thêm người dùng hiện tại vào nhóm docker:
sudo usermod -aG docker $USER
Áp dụng nhóm mới ngay trong phiên hiện tại:
newgrp docker
Kiểm tra:
docker run hello-world
Bạn cũng có thể đăng xuất rồi đăng nhập lại SSH để quyền nhóm được cập nhật.
Cần lưu ý rằng thành viên của nhóm docker có quyền ở mức tương đương root đối với hệ thống Docker. Vì vậy, không nên thêm tài khoản không đáng tin cậy vào nhóm này. Docker cũng cung cấp chế độ rootless dành cho những môi trường có yêu cầu giới hạn quyền chặt chẽ hơn.
Bước 10: Thử chạy máy chủ Nginx bằng Docker
Tạo một container Nginx và mở cổng 8080:
docker run -d \ --name nginx-test \ --restart unless-stopped \ -p 8080:80 \ nginx:latest
Kiểm tra container:
docker ps
Sau đó truy cập:
http://IP_VPS:8080
Nếu giao diện chào mừng của Nginx xuất hiện, container đã hoạt động chính xác.
Xem log:
docker logs nginx-test
Dừng container:
docker stop nginx-test
Khởi động lại:
docker start nginx-test
Xóa container:
docker rm -f nginx-test
Lưu ý về firewall khi sử dụng Docker
Docker tự tạo các quy tắc firewall để xử lý bridge network, NAT, chuyển tiếp cổng và cách ly mạng. Khi bạn publish một cổng bằng tùy chọn như -p 8080:80, cổng container có thể được định tuyến trước khi lưu lượng đi qua một số quy tắc thông thường của UFW. Vì vậy, không nên cho rằng chỉ cần chặn cổng bằng UFW là container chắc chắn không thể được truy cập từ Internet.
Docker khuyến nghị sử dụng chuỗi DOCKER-USER để bổ sung các quy tắc lọc lưu lượng trước những quy tắc chuyển tiếp của Docker. Bạn cũng không nên đặt cấu hình "iptables": false trong Docker daemon nếu chưa hiểu rõ kiến trúc mạng, vì việc này có thể làm hỏng kết nối Internet và bridge network của container.
Khi không cần công khai cổng ra Internet, chỉ nên bind vào localhost:
docker run -d -p 127.0.0.1:8080:80 nginx
Khi đó, dịch vụ chỉ có thể được truy cập trực tiếp từ VPS hoặc thông qua reverse proxy được cấu hình riêng.
Cách cập nhật Docker trên Ubuntu
Cập nhật danh sách gói:
sudo apt update
Nâng cấp Docker:
sudo apt install --only-upgrade \ docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin
Kiểm tra lại:
docker --version docker compose version
Trong hệ thống production, nên sao lưu dữ liệu và kiểm tra phiên bản mới trên môi trường thử nghiệm trước khi thực hiện nâng cấp lớn.
Một số lỗi thường gặp
Không kết nối được Docker daemon
Lỗi:
Cannot connect to the Docker daemon
Kiểm tra và khởi động Docker:
sudo systemctl restart docker sudo systemctl status docker
Permission denied khi chạy Docker
Thêm người dùng vào nhóm Docker:
sudo usermod -aG docker $USER newgrp docker
Container chạy nhưng không truy cập được
Kiểm tra container và port:
docker ps docker port TEN_CONTAINER
Kiểm tra cổng đang lắng nghe:
sudo ss -lntp
Kiểm tra log:
docker logs TEN_CONTAINER
Docker chiếm nhiều dung lượng
Kiểm tra dung lượng:
docker system df
Dọn image, network và container không còn sử dụng:
docker system prune
Không nên thêm -a hoặc xóa volume khi chưa kiểm tra kỹ, vì có thể xóa image cần thiết hoặc dữ liệu ứng dụng.
Kết luận
Cài Docker trên VPS Ubuntu bằng kho apt chính thức là phương pháp dễ quản lý và phù hợp cho hệ thống sử dụng lâu dài. Sau khi hoàn tất, bạn có thể triển khai website, API, Nginx, MySQL, MongoDB, Redis, Bot Discord hoặc các hệ thống sử dụng Docker Compose.
Bên cạnh việc cài đặt thành công, người quản trị cần chú ý đến firewall, phân quyền nhóm Docker, sao lưu volume, giới hạn tài nguyên và theo dõi dung lượng log. Một cấu hình Docker đúng không chỉ giúp ứng dụng khởi động được mà còn phải bảo đảm dữ liệu an toàn và hệ thống có thể phục hồi khi xảy ra sự cố.
ObeGames cung cấp VPS Hosting và VPS NVMe phù hợp để cài đặt Docker, Docker Compose, website, database, Bot Discord và nhiều ứng dụng trực tuyến cần vận hành liên tục.