VPS chạy Docker: Hướng dẫn từ chọn cấu hình đến vận hành ổn định

Hướng dẫn cài đặt VPS chạy Docker từ A đến Z: Chọn cấu hình, các bước cài đặt, quản lý container bằng Docker Compose.

VPS chạy Docker là việc cài đặt Docker Engine trên máy chủ ảo VPS để triển khai và quản lý các container ứng dụng. Mô hình này giúp doanh nghiệp và developer đóng gói ứng dụng cùng các thành phần cần thiết, triển khai nhanh và duy trì môi trường nhất quán hơn giữa các giai đoạn phát triển. Bài viết dưới đây hướng dẫn từ cách chọn VPS phù hợp, cài đặt Docker trên Ubuntu đến triển khai bằng Docker Compose, kiểm tra tài nguyên và xử lý các lỗi thường gặp khi vận hành.

Vì sao nên chạy Docker trên VPS?

Docker trên VPS phù hợp khi cần triển khai nhiều ứng dụng hoặc dịch vụ độc lập trên cùng một máy chủ mà không muốn tạo một máy ảo riêng cho từng ứng dụng. Container sử dụng chung kernel của hệ điều hành host nên thường có overhead thấp hơn việc chạy nhiều máy ảo riêng biệt, trong khi vẫn tạo được môi trường tách biệt ở cấp ứng dụng.

Một lợi ích khác của Docker là khả năng đóng gói ứng dụng cùng dependency và runtime vào image. Nhờ đó, môi trường triển khai giữa máy development, staging và production có tính nhất quán cao hơn, hạn chế lỗi phát sinh do khác biệt về thư viện hoặc phiên bản runtime.

Docker cũng giúp quá trình triển khai và mở rộng đơn giản hơn. Khi cần chạy thêm một instance của ứng dụng, có thể tạo container mới từ cùng image thay vì cài đặt thủ công toàn bộ môi trường. Với các hệ thống gồm nhiều service, Docker Compose tiếp tục đơn giản hóa việc định nghĩa, khởi động và quản lý các container.

Tuy nhiên, Docker không thay thế hoàn toàn máy ảo. Container chia sẻ kernel của hệ điều hành host, trong khi mỗi máy ảo có hệ điều hành và kernel riêng. Vì vậy, VPS chạy Docker phù hợp với workload cần triển khai ứng dụng linh hoạt; còn VM vẫn có lợi thế trong những trường hợp yêu cầu mức cô lập hệ điều hành cao hoặc cần chạy một hệ điều hành khác với hệ điều hành của host.

vi-sao-nen-chay-docker-tren-vps
Lý do nên chạy Docker trên VPS

Chuẩn bị VPS trước khi cài Docker

Trước khi cài Docker, VPS cần đáp ứng một số điều kiện cơ bản về hệ điều hành, tài nguyên và quyền truy cập. Việc lựa chọn cấu hình nên dựa trên workload thực tế thay vì chỉ dựa vào một mức cấu hình tối thiểu cố định.

1. Hệ điều hành phù hợp

Ubuntu LTS là lựa chọn phổ biến cho VPS chạy Docker nhờ hệ sinh thái lớn, tài liệu phong phú và quy trình cài đặt Docker rõ ràng. Debian cũng là một lựa chọn phù hợp cho các hệ thống cần môi trường Linux ổn định.

Khi triển khai mới, nên sử dụng phiên bản LTS hoặc bản phân phối vẫn còn trong thời gian hỗ trợ thay vì các phiên bản đã hết vòng đời. Điều này giúp hệ thống tiếp tục nhận được bản cập nhật bảo mật và giảm rủi ro phải nâng cấp hệ điều hành sớm.

Trong bài viết này, các bước cài đặt sử dụng Ubuntu vì đây là môi trường phổ biến và phù hợp với phần lớn nhu cầu chạy Docker trên VPS.

2. Chọn CPU, RAM và dung lượng lưu trữ

Docker không có một mức CPU hoặc RAM tối thiểu áp dụng cho mọi workload. Nhu cầu tài nguyên phụ thuộc vào số lượng container, loại ứng dụng, database, traffic và mức sử dụng tài nguyên của từng service.

Có thể tham khảo:

  • Container nhẹ, website hoặc API đơn giản: từ 1–2 vCPU và 2GB RAM.
  • Ứng dụng web kết hợp database: từ 2–4 vCPU và 4GB RAM.
  • Nhiều service, database lớn hoặc workload xử lý cao: từ 4 vCPU và 8GB RAM trở lên.

Các mức trên chỉ mang tính tham khảo. Sau khi triển khai, nên theo dõi CPU, RAM và dung lượng ổ đĩa để điều chỉnh cấu hình theo mức sử dụng thực tế.

Về lưu trữ, SSD hoặc NVMe giúp cải thiện tốc độ đọc ghi của image, container và đặc biệt là database. Ngoài dung lượng dành cho ứng dụng, cần dự phòng thêm không gian cho Docker image, volume, log và dữ liệu backup cục bộ nếu có.

3. Quyền truy cập

Cần có tài khoản root hoặc tài khoản có quyền sudo trên VPS để cài Docker và thay đổi cấu hình hệ thống. Đồng thời, VPS cần có kết nối SSH ổn định để thực hiện các thao tác quản trị từ xa.

4. Tiêu chí chọn VPS chạy Docker

Ngoài CPU, RAM và ổ đĩa, nên ưu tiên VPS có:

  • Quyền root hoặc sudo để chủ động cài đặt và cấu hình Docker.
  • SSD/NVMe với dung lượng phù hợp workload.
  • Network ổn định và băng thông đáp ứng nhu cầu ứng dụng.
  • Khả năng nâng cấp CPU, RAM và dung lượng khi workload tăng.
  • Hệ điều hành còn được hỗ trợ lâu dài.
  • Chính sách backup hoặc snapshot phù hợp nếu ứng dụng có dữ liệu quan trọng.

Nếu chưa xác định được cấu hình phù hợp với số lượng container dự kiến, nên ưu tiên nhà cung cấp cho phép nâng cấp tài nguyên linh hoạt thay vì lựa chọn cấu hình quá thấp ngay từ đầu.

Hướng dẫn cài đặt Docker trên VPS Ubuntu

Các bước dưới đây sử dụng Docker Engine từ repository chính thức của Docker. Cách này giúp chủ động sử dụng phiên bản Docker được Docker duy trì thay vì phụ thuộc vào phiên bản có sẵn trong repository mặc định của hệ điều hành.

Bước 1: Cập nhật hệ thống

Kết nối SSH vào VPS và cập nhật danh sách package:

sudo apt update

Có thể nâng cấp các package hiện có bằng:

sudo apt upgrade -y

Bước 2: Cài đặt các package cần thiết

Cài các công cụ cần thiết để thêm repository của Docker:

sudo apt install ca-certificates curl -y

Bước 3: Thêm repository chính thức của Docker

Tạo thư mục lưu trữ keyring:

sudo install -m 0755 -d /etc/apt/keyrings

Tải Docker GPG key:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc

Cấp quyền đọc cho key:

sudo chmod a+r /etc/apt/keyrings/docker.asc

Sau đó thêm repository Docker vào APT sources:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Cập nhật lại danh sách package:

sudo apt update

Bước 4: Cài đặt Docker Engine và Docker Compose

Cài Docker Engine cùng các 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

Sau bước này, VPS đã có Docker Engine, Docker CLI, Buildx và Docker Compose plugin.

Bước 5: Khởi động và kiểm tra Docker

Bật Docker cùng hệ thống:

sudo systemctl enable docker

Khởi động Docker:

sudo systemctl start docker

Kiểm tra trạng thái:

sudo systemctl status docker

Nếu dịch vụ hiển thị trạng thái active (running), Docker Engine đang hoạt động bình thường.

khoi-dong-va-kiem-tra-docker
Khởi đông và kiểm tra Docker có chạy ổn hay chưa

Bước 6: Cho phép user chạy Docker không cần sudo

Theo mặc định, user thông thường có thể cần sudo khi chạy lệnh Docker. Có thể thêm user hiện tại vào nhóm docker:

sudo usermod -aG docker $USER

Sau đó đăng xuất và đăng nhập lại để nhóm mới được áp dụng. Có thể kiểm tra bằng:

docker ps

Lưu ý, thành viên của nhóm docker có quyền tương tác rất mạnh với Docker daemon, vì vậy chỉ nên cấp quyền này cho những tài khoản được tin cậy.

Bước 7: Kiểm tra Docker hoạt động

Chạy container kiểm tra:

docker run hello-world

Nếu Docker tải image kiểm tra và trả về thông báo xác nhận, quá trình cài đặt đã hoàn tất.

Kiểm tra Docker Compose:

docker compose version

Nếu hệ thống trả về phiên bản Compose, plugin Docker Compose đã được cài đặt thành công.

Kiểm tra VPS có đủ tài nguyên để chạy Docker không?

Cấu hình VPS đủ dùng tại thời điểm triển khai chưa có nghĩa là hệ thống sẽ luôn đủ tài nguyên. Khi số lượng container, traffic hoặc dữ liệu tăng lên, CPU, RAM và ổ đĩa có thể trở thành điểm nghẽn.

Kiểm tra RAM

Dùng lệnh:

free -h

Lệnh này cho biết tổng RAM, lượng đang sử dụng, còn trống và phần swap nếu VPS đã cấu hình swap.

Nếu RAM thường xuyên gần mức tối đa và hệ thống bắt đầu sử dụng swap nhiều, cần xem xét container nào đang tiêu thụ nhiều tài nguyên hoặc nâng cấp RAM.

Kiểm tra CPU

Có thể sử dụng:

nproc

để xem số CPU logic mà VPS được cấp.

Để theo dõi mức sử dụng CPU theo thời gian thực, có thể dùng:

top

hoặc cài và sử dụng htop nếu cần giao diện dễ quan sát hơn.

Theo dõi tài nguyên từng container

Docker cung cấp lệnh:

docker stats

Lệnh này hiển thị mức sử dụng CPU, RAM, network và một số thông tin I/O của các container đang chạy.

Đây là công cụ hữu ích để xác định container nào đang tiêu thụ tài nguyên bất thường. Nếu một service liên tục sử dụng CPU hoặc RAM cao, nên kiểm tra log và cấu hình ứng dụng trước khi quyết định nâng cấp VPS.

Kiểm tra dung lượng ổ đĩa

Kiểm tra dung lượng filesystem:

df -h

Đồng thời có thể kiểm tra Docker đang sử dụng bao nhiêu dung lượng bằng:

docker system df

Docker image, container layer, volume và log có thể tăng dần theo thời gian. Vì vậy, ổ đĩa gần đầy là một trong những nguyên nhân cần được theo dõi thường xuyên khi vận hành Docker trên VPS.

Khi nào nên nâng cấp VPS?

Có thể xem xét nâng cấp khi:

RAM thường xuyên ở mức cao và swap tăng liên tục.
CPU liên tục tải cao trong thời gian dài.
Ổ đĩa gần đầy dù đã loại bỏ dữ liệu không cần thiết.
Container thường xuyên bị restart hoặc gặp lỗi do thiếu tài nguyên.
Workload hoặc traffic tăng vượt khả năng xử lý hiện tại.

Trước khi nâng cấp, nên xác định nguyên nhân từ container hoặc ứng dụng. Không phải mọi vấn đề hiệu năng đều xuất phát từ việc VPS thiếu CPU hoặc RAM.

Quản lý container với Docker Compose

Khi VPS chạy nhiều service phụ thuộc lẫn nhau, Docker Compose giúp định nghĩa toàn bộ hệ thống trong một file cấu hình thay vì phải chạy từng container bằng nhiều lệnh docker run.

Ví dụ, một ứng dụng Node.js sử dụng PostgreSQL có thể gồm hai service:

VPS
└── Docker
    ├── app — Node.js
    └── db  — PostgreSQL

Tạo file Compose

Ví dụ đơn giản:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:17
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: your_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres_data:

Trong ví dụ trên:

  • app là service chứa ứng dụng Node.js được build từ Dockerfile.
  • db sử dụng image PostgreSQL.
  • ports ánh xạ port của ứng dụng ra VPS.
  • depends_on xác định quan hệ phụ thuộc giữa các service.
  • volumes tạo vùng lưu trữ persistent cho PostgreSQL.
  • restart: unless-stopped giúp service tự khởi động lại trong các trường hợp phù hợp, chẳng hạn sau khi VPS reboot.

Mật khẩu database trong ví dụ chỉ mang tính minh họa. Khi triển khai production, không nên lưu credential nhạy cảm trực tiếp trong file Compose công khai.

Khởi chạy hệ thống

Đặt file Compose trong thư mục dự án, sau đó chạy:

docker compose up -d

Docker Compose sẽ tạo network cho các service và khởi động các container theo cấu hình.

Kiểm tra trạng thái:

docker compose ps

Xem log của toàn bộ service:

docker compose logs

Hoặc theo dõi log của một service cụ thể:

docker compose logs -f app

Khi cần dừng hệ thống:

docker compose down

Việc lưu cấu hình Compose giúp quá trình di chuyển ứng dụng sang VPS khác đơn giản hơn. Tuy nhiên, file Compose chỉ mô tả cách tạo lại service; dữ liệu persistent trong volume vẫn cần được backup riêng.

Khắc phục một số lỗi thường gặp khi chạy Docker trên VPS

Permission denied khi chạy Docker

Lỗi này thường xuất hiện khi user chưa thuộc nhóm docker hoặc phiên đăng nhập chưa được cập nhật sau khi thêm group.

Có thể kiểm tra và thêm user:

sudo usermod -aG docker $USER

Sau đó đăng xuất, đăng nhập lại hoặc sử dụng:

newgrp docker

Rồi thử:

docker ps

Docker daemon không chạy

Kiểm tra trạng thái Docker:

sudo systemctl status docker

Nếu Docker đang dừng, có thể khởi động lại:

sudo systemctl restart docker

Nếu lỗi tiếp tục xuất hiện, nên xem log của service để xác định nguyên nhân thay vì liên tục restart:

sudo journalctl -u docker --no-pager -n 100

Xung đột port

Lỗi port thường xảy ra khi port mà container muốn sử dụng đã được một service khác trên VPS chiếm giữ.

Có thể kiểm tra:

sudo lsof -i :3000

Thay 3000 bằng port thực tế đang bị xung đột.

Sau khi xác định service đang sử dụng port, có thể đổi port mapping trong file Compose hoặc xử lý service đang chiếm port nếu không còn cần thiết.

VPS hết dung lượng do Docker image và log

Trước tiên kiểm tra:

df -h

và:

docker system df

Có thể sử dụng:

docker system prune

để dọn các resource Docker không còn được sử dụng.

Tuy nhiên, cần kiểm tra kỹ những gì Docker đề xuất xóa trước khi xác nhận. Không nên sử dụng các tùy chọn cleanup mạnh một cách máy móc vì image hoặc resource không còn được container hiện tại sử dụng vẫn có thể cần cho việc triển khai lại.

Ngoài Docker resource, cũng nên kiểm tra log của ứng dụng và hệ điều hành nếu dung lượng ổ đĩa tăng bất thường.

Checklist trước khi đưa Docker vào vận hành

Trước khi đưa hệ thống Docker trên VPS vào production, nên rà soát:

  • Docker Engine và các package liên quan đang ở phiên bản được hỗ trợ.
  • VPS sử dụng hệ điều hành còn trong thời gian hỗ trợ.
  • SSH được bảo vệ bằng phương thức xác thực phù hợp.
  • Firewall chỉ mở những port thực sự cần thiết.
  • Quyền truy cập Docker daemon được cấp cho đúng tài khoản.
  • Container không chạy ứng dụng với quyền root nếu không cần thiết.
  • Database và dữ liệu persistent được lưu trong volume phù hợp.
  • Dữ liệu quan trọng được backup định kỳ.
  • Backup được lưu tách biệt khỏi VPS nếu yêu cầu an toàn dữ liệu cao.
  • Đã kiểm tra khả năng restore backup thay vì chỉ kiểm tra việc tạo backup.
  • Service quan trọng có restart policy phù hợp.
  • CPU, RAM và disk được theo dõi thường xuyên.
  • Có phương án xử lý khi VPS gần hết tài nguyên.
  • Có quy trình cập nhật Docker image và kiểm tra ứng dụng sau khi update.
  • Đã biết cách kiểm tra container status và log khi xảy ra sự cố.

Đặc biệt, Docker không phải là cơ chế backup. Việc container được tạo lại từ image không đồng nghĩa với việc dữ liệu trong database hoặc volume được bảo toàn. Với dữ liệu quan trọng, backup nên được thiết kế như một quy trình độc lập và định kỳ kiểm tra khả năng khôi phục.

Kết luận

VPS chạy Docker là lựa chọn phù hợp khi cần triển khai nhiều ứng dụng hoặc service độc lập trên một máy chủ với quy trình đóng gói và triển khai nhất quán. Docker giúp đơn giản hóa việc triển khai, trong khi Docker Compose hỗ trợ quản lý nhiều container có quan hệ với nhau.

Để hệ thống hoạt động ổn định, việc cài Docker chỉ là bước đầu. Cần chọn thuê VPS giá rẻ có tài nguyên phù hợp với workload, theo dõi CPU, RAM và dung lượng ổ đĩa, quản lý volume và backup dữ liệu, đồng thời có quy trình xử lý lỗi và cập nhật image rõ ràng.

Nếu chưa xác định được CPU, RAM và dung lượng lưu trữ phù hợp với số lượng container dự kiến, bạn có thể liên hệ LANIT để được tư vấn cấu hình VPS miễn phí trước khi triển khai.

Đánh giá bài viết
Với nhiều năm kinh nghiệm trong lĩnh vực công nghệ thông tin, đặc biệt là hạ tầng máy chủ, hệ thống mạng và bảo mật, Nguyễn Đức Hòa hiện đã đảm nhận vai trò Trưởng phòng Kỹ thuật tại công ty LANIT – đơn vị cung cấp giải pháp công nghệ tiên tiến cho doanh nghiệp. Anh không chỉ là người trực tiếp xây dựng, phát triển và vận hành các hệ thống kỹ thuật phức tạp mà còn là người truyền lửa và định hướng chiến lược kỹ thuật cho toàn bộ đội ngũ của LANIT. Tư vấn duy duy hệ thống Chắc chắn, khả năng xử lý sự cố nhanh nhạy cảm cùng tầm nhìn phát triển thời hạn đã giúp anh trở thành một trong những nhân sự chủ yếu trong quá trình mở rộng hành động theo mô hình dịch vụ công nghệ của LANIT.
Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!