Setup Docker + Portainer để quản lý app dễ dàng trên VPS

Docker đã trở thành công cụ không thể thiếu trong việc triển khai và quản lý ứng dụng hiện đại. Tuy nhiên, việc sử dụng Docker command line có thể phức tạp đối với nhiều người. Đó là lý do tại sao Portainer ra đời – một công cụ quản lý Docker thông qua giao diện web trực quan, giúp bạn dễ dàng triển khai và quản lý các container mà không cần nhớ nhiều lệnh phức tạp.

Tổng quan về Docker và Portainer

 Docker container technology overview

Docker là một nền tảng mã nguồn mở cho phép đóng gói, triển khai và chạy các ứng dụng trong các container. Container là những đơn vị phần mềm nhỏ gọn chứa đầy đủ mọi thành phần cần thiết để ứng dụng hoạt động, bao gồm mã nguồn, thư viện, công cụ hệ thống và các cài đặt cấu hình.

Portainer là một công cụ quản lý container mã nguồn mở, cung cấp giao diện web thân thiện để quản lý Docker, Docker Swarm và Kubernetes. Với Portainer, bạn có thể dễ dàng tạo, khởi động, dừng, xóa container, quản lý images, networks và volumes mà không cần sử dụng command line.

Ưu điểm của việc kết hợp Docker và Portainer trên VPS bao gồm khả năng triển khai ứng dụng nhanh chóng, quản lý tài nguyên hiệu quả, và có thể mở rộng hệ thống dễ dàng khi cần thiết. Đặc biệt quan trọng, Portainer giúp người dùng không chuyên về DevOps vẫn có thể quản lý container một cách trực quan.

Chuẩn bị VPS và cài đặt Docker

 VPS Ubuntu server setup Docker installation

Trước khi bắt đầu, bạn cần một VPS chạy Ubuntu 20.04 hoặc 22.04 với quyền sudo. Đảm bảo VPS có ít nhất 1GB RAM và 10GB dung lượng trống để vận hành ổn định.

Bước đầu tiên là cập nhật hệ thống và cài đặt các gói cần thiết:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Tiếp theo, thêm GPG key và repository chính thức của Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb <img src="https://i.ytimg.com/vi/ByW_yobA2aM/hq720.jpg?sqp=-oaymwE7CK4FEIIDSFryq4qpAy0IARUAAAAAGAElAADIQj0AgKJD8AEB-AH-CYAC0AWKAgwIABABGEwgVyhlMA8=&rs=AOn4CLBmS9uw1rmoymP2gPamfIR_E6srFg" alt="arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg" /> https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Cài đặt Docker Engine:

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

Để sử dụng Docker mà không cần sudo, thêm user vào group docker:

sudo usermod -aG docker $USER
newgrp docker

Kiểm tra Docker đã hoạt động:

docker --version
docker run hello-world

Cài đặt và cấu hình Portainer

 Portainer web interface dashboard screenshot

Sau khi Docker hoạt động ổn định, bước tiếp theo là cài đặt Portainer. Có hai phiên bản Portainer: Community Edition (miễn phí) và Business Edition (trả phí). Trong hướng dẫn này, chúng ta sử dụng Community Edition.

Đầu tiên, tạo volume để lưu trữ dữ liệu Portainer:

docker volume create portainer_data

Chạy Portainer container:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts

Lệnh trên sẽ:

  • Chạy Portainer trong chế độ daemon (-d)
  • Mở port 9443 cho HTTPS và port 8000 cho tunnel agent
  • Tự động khởi động lại khi VPS reboot (–restart=always)
  • Mount Docker socket để Portainer có thể quản lý Docker
  • Sử dụng volume để lưu trữ dữ liệu bền vững

Sau khi container chạy thành công, truy cập Portainer qua trình duyệt tại địa chỉ https://your-vps-ip:9443. Lưu ý rằng Portainer sử dụng self-signed SSL certificate, nên trình duyệt sẽ hiển thị cảnh báo bảo mật – bạn có thể bỏ qua và tiếp tục.

Lần đầu truy cập, bạn cần tạo tài khoản admin với username và password mạnh. Có 5 phút để hoàn thành việc này, nếu không Portainer sẽ khóa truy cập vì lý do bảo mật.

Thiết lập bảo mật và tối ưu hóa

 Server security firewall configuration

Bảo mật là yếu tố quan trọng khi vận hành Docker và Portainer trên VPS. Cấu hình firewall để chỉ cho phép truy cập các port cần thiết:

sudo ufw allow 22/tcp
sudo ufw allow 9443/tcp
sudo ufw enable

Để tăng cường bảo mật, nên sử dụng SSL certificate chính thức thay vì self-signed certificate. Bạn có thể sử dụng Let’s Encrypt với Nginx làm reverse proxy:

sudo apt install -y nginx certbot python3-certbot-nginx

Tạo file cấu hình Nginx cho Portainer:

sudo nano /etc/nginx/sites-available/portainer

Thêm cấu hình:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    location / {
        proxy_pass https://localhost:9443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Enable site và cài đặt SSL:

sudo ln -s /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/
sudo certbot --nginx -d your-domain.com
sudo systemctl reload nginx

Để tối ưu hóa hiệu suất, cấu hình Docker để sử dụng logging driver phù hợp và giới hạn log size:

sudo nano /etc/docker/daemon.json

Thêm cấu hình:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}

Restart Docker để áp dụng cấu hình:

sudo systemctl restart docker

Quản lý ứng dụng qua Portainer

 Portainer application management interface

Sau khi setup hoàn tất, bạn có thể bắt đầu sử dụng Portainer để quản lý các ứng dụng. Giao diện chính của Portainer chia thành các phần:

Dashboard: Hiển thị tổng quan về containers, images, volumes, networks đang hoạt động. Bạn có thể nhanh chóng xem tình trạng hệ thống và tài nguyên sử dụng.

Containers: Quản lý toàn bộ containers. Bạn có thể start, stop, restart, pause containers, xem logs, truy cập terminal, và cập nhật cấu hình.

Images: Quản lý Docker images. Pull images từ registry, build images từ Dockerfile, tag và delete images không cần thiết.

Networks: Tạo và quản lý Docker networks. Portainer hỗ trợ tạo bridge, overlay, và custom networks với cấu hình chi tiết.

Volumes: Quản lý data volumes để lưu trữ dữ liệu bền vững. Tạo, backup, và restore volumes dễ dàng qua giao diện.

Stacks: Deploy ứng dụng multi-container sử dụng Docker Compose. Upload file docker-compose.yml hoặc paste nội dung trực tiếp để deploy stack.

Để deploy một ứng dụng đơn giản như Nginx, click vào “Containers” > “Add container”:

  • Name: nginx-web
  • Image: nginx:latest
  • Port mapping: 80:80
  • Restart policy: Always

Click “Deploy container” và ứng dụng sẽ chạy ngay lập tức.

Backup và monitoring

 Server monitoring dashboard analytics

Việc backup và monitoring là không thể thiếu trong quản lý hệ thống production. Portainer cung cấp các công cụ để monitoring containers:

Container Stats: Xem real-time CPU, RAM, network và disk usage của từng container.

Logs Management: Xem logs của containers với khả năng filter theo thời gian và level.

Event Logging: Theo dõi các events của Docker daemon như container start/stop, image pull/push.

Để backup, bạn cần backup cả Portainer data và Docker volumes:

# Backup Portainer data
docker run --rm -v portainer_data:/data -v $(pwd):/backup alpine tar czf /backup/portainer-backup-$(date +%Y%m%d).tar.gz -C /data .

# Backup Docker volumes
docker run --rm -v your-volume-name:/data -v $(pwd):/backup alpine tar czf /backup/volume-backup-$(date +%Y%m%d).tar.gz -C /data .

Tạo cron job để tự động backup:

crontab -e
# Thêm dòng backup hàng ngày lúc 2:00 AM
0 2 * * * /path/to/backup-script.sh

Kết hợp Docker và Portainer trên VPS mang lại giải pháp quản lý container mạnh mẽ, trực quan và dễ sử dụng. Với hướng dẫn chi tiết này, bạn có thể triển khai hệ thống container management chuyên nghiệp, từ cài đặt cơ bản đến cấu hình bảo mật và monitoring nâng cao. Portainer không chỉ giúp đơn giản hóa việc quản lý Docker mà còn cung cấp nhiều tính năng enterprise như user management, role-based access control, và template marketplace để deploy ứng dụng nhanh chóng.