Trạm phóng đang hoạt động Giờ VN
HƯỚNG DẪN

Cài Docker và Docker Compose trên VPS Ubuntu

Các bước cài Docker Engine và Docker Compose từ kho chính thức trên Ubuntu 22.04, 24.04, chạy container đầu tiên, giới hạn log và lưu ý về RAM, cổng mạng.

Docker đóng gói ứng dụng cùng mọi thư viện nó cần thành container, chạy giống nhau trên mọi máy. Trên VPS KVM, Docker chạy đầy đủ như trên máy chủ thật. Hướng dẫn dưới đây cài Docker Engine từ kho chính thức của Docker, áp dụng cho Ubuntu 22.04 và 24.04.

Cần gì trước: một VPS Ubuntu và tài khoản có quyền sudo. Chưa biết cách vào VPS, xem kết nối VPS bằng SSH. Chạy vài container nên chọn VPS từ 2 GB RAM.

Bước 1: Thêm kho phần mềm của Docker

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
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
sudo apt update

Bước 2: Cài Docker Engine và Compose

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Nếu kho của Docker chưa hỗ trợ bản Ubuntu bạn dùng (thường xảy ra vài tuần đầu sau khi Ubuntu ra bản mới), lệnh apt update ở bước 1 sẽ báo lỗi. Khi đó xóa file /etc/apt/sources.list.d/docker.list và cài bản do Ubuntu đóng gói: sudo apt install -y docker.io docker-compose-v2.

Bước 3: Kiểm tra

sudo docker run --rm hello-world
docker compose version

Thấy dòng Hello from Docker! là Docker đã chạy.

Bước 4: Dùng Docker không cần gõ sudo

sudo usermod -aG docker $USER

Đăng xuất rồi đăng nhập lại để có hiệu lực. Lưu ý: thành viên nhóm docker có quyền tương đương root, chỉ thêm tài khoản bạn tin tưởng.

Bước 5: Giới hạn dung lượng log

Mặc định log của container lớn dần không giới hạn và có thể làm đầy ổ đĩa. Tạo file /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}
sudo systemctl restart docker

Thiết lập này áp dụng cho container tạo mới sau khi khởi động lại Docker.

Ví dụ: chạy website bằng Docker Compose

Tạo thư mục ~/web với file compose.yaml:

services:
  web:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
mkdir -p ~/web/html && echo '<h1>Xin chào từ Docker</h1>' > ~/web/html/index.html
cd ~/web && docker compose up -d
curl http://127.0.0.1:8080

127.0.0.1:8080:80 nghĩa là cổng chỉ mở trong VPS. Đây là cách nên dùng: bạn đưa website ra Internet qua Cloudflare Tunnel trỏ tới http://localhost:8080, không cần mở cổng ra ngoài.

Lệnh hay dùng

LệnhTác dụng
docker psLiệt kê container đang chạy
docker compose logs -fXem log trực tiếp
docker compose pull && docker compose up -dCập nhật image và chạy lại
docker statsXem RAM, CPU từng container dùng
docker system pruneXóa image, container, mạng không còn dùng

Lưu ý về RAM và bảo mật

  • Theo dõi docker stats. Database như MySQL, PostgreSQL thường cần 300 MB – 1 GB mỗi container.
  • Docker tự thêm luật tường lửa cho cổng bạn publish, bỏ qua UFW. Vì vậy hãy publish cổng vào 127.0.0.1 như ví dụ trên thay vì 0.0.0.0.
  • Chỉ dùng image chính thức hoặc từ nguồn tin cậy, và cập nhật image định kỳ.