
Portainer CE (Community Edition) คือ Web UI สำหรับจัดการ Docker ที่ได้รับความนิยมสูงสุด ช่วยให้คุณดู, สร้าง, หยุด, ลบ Container, Image, Volume และ Network ผ่านหน้าเว็บแทนการพิมพ์ command line เหมาะสำหรับทั้งมือใหม่ที่เริ่มเรียน Docker และทีมที่ต้องการ Dashboard จัดการ Production
Portainer คืออะไร และทำงานอย่างไร
Portainer CE ทำงานโดยการ Mount Docker Socket (/var/run/docker.sock) เข้ามาภายใน Container ของตัวเอง ซึ่งทำให้ Portainer มีสิทธิ์เรียก Docker API ได้เต็มรูปแบบ — สร้าง ลบ หรือแก้ไข Container ได้เหมือนกับการพิมพ์คำสั่งใน Terminal โดยตรง แต่ผ่าน Interface ที่ใช้งานง่ายกว่ามาก
สถาปัตยกรรมของ Portainer แบ่งเป็น 2 ส่วนหลัก ได้แก่ Portainer Server ซึ่งเป็น Web UI และ API Backend ที่เราติดตั้งลงไป และ Portainer Agent ที่ใช้เชื่อมต่อไปยัง Docker Host ระยะไกลหรือ Cluster เพิ่มเติม สำหรับ VPS เดี่ยวที่ไม่ได้ใช้ Swarm หรือ Kubernetes ติดตั้งเพียง Portainer Server ก็เพียงพอ
ทำไมต้องใช้ Portainer
- Visual Overview — เห็น Container ทั้งหมดพร้อมสถานะ CPU/Memory ใช้งานได้ทันที
- Log Viewer — ดู Container Log แบบ Real-time ผ่านเบราว์เซอร์
- Docker Compose — Deploy Stack จาก docker-compose.yml ผ่าน Web UI ได้
- Image Registry — Pull Image จาก Docker Hub หรือ Private Registry ได้ในคลิกเดียว
- ฟรีสำหรับ CE — Portainer Community Edition ใช้งานได้ฟรีตลอดไม่จำกัด Node
ข้อกำหนด: ต้องติดตั้ง Docker Engine ก่อน ถ้ายังไม่มีให้รัน curl -fsSL https://get.docker.com | sh ก่อนเริ่มขั้นตอนนี้
ติดตั้ง Portainer CE
ขั้นที่ 1: สร้าง Docker Volume สำหรับเก็บข้อมูล
docker volume create portainer_data
ขั้นที่ 2: Run 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:latest
คำสั่งนี้ทำงานในพื้นหลัง (-d) เปิด Port 9443 สำหรับ HTTPS Web UI และ Mount Docker Socket เพื่อให้ Portainer ควบคุม Docker ได้
ขั้นที่ 3: ตรวจสอบว่า Container ทำงาน
docker ps | grep portainer
ขั้นที่ 4: เข้าถึง Web UI
เปิดเบราว์เซอร์ไปที่ https://YOUR_VPS_IP:9443 ครั้งแรกจะขอสร้าง Admin Password ตั้งรหัสผ่านที่แข็งแรงอย่างน้อย 12 ตัวอักษร
ความปลอดภัย: ไม่ควร Expose Port 9443 สาธารณะโดยตรง ควรตั้ง Nginx Reverse Proxy + Let's Encrypt Certificate หรือใช้ร่วมกับ Cloudflare Tunnel เพื่อซ่อน Port จาก Public Internet
ตั้งค่า Nginx Reverse Proxy สำหรับ Portainer
sudo nano /etc/nginx/sites-available/portainer
server {
listen 80;
server_name portainer.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name portainer.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/portainer.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/portainer.yourdomain.com/privkey.pem;
location / {
proxy_pass https://localhost:9443;
proxy_ssl_verify off;
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;
}
}
sudo ln -s /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
คำถามที่พบบ่อยเกี่ยวกับ Portainer บน VPS
Portainer CE ใช้ฟรีตลอดไหม?
ใช่ Portainer Community Edition (CE) ใช้งานได้ฟรีตลอดไม่มีค่าใช้จ่าย รองรับ Docker Node ได้ไม่จำกัดจำนวน ถ้าต้องการฟีเจอร์เพิ่มเติมเช่น Role-Based Access Control ขั้นสูงหรือ Kubernetes Cluster Management เต็มรูปแบบ สามารถอัปเกรดเป็น Portainer Business Edition ได้
Portainer ต่างจาก Docker Desktop อย่างไร?
Docker Desktop ออกแบบมาสำหรับนักพัฒนาที่ใช้ macOS หรือ Windows บนเครื่องท้องถิ่น ส่วน Portainer CE ออกแบบมาสำหรับจัดการ Docker บน Server หรือ VPS ที่ไม่มี GUI โดยเฉพาะ ข้อดีของ Portainer คือทีมงานทุกคนสามารถเข้าถึงและจัดการ Container ผ่านเบราว์เซอร์จากที่ไหนก็ได้โดยไม่ต้อง SSH
ถ้า Portainer เกิดปัญหา Container อื่นจะพังด้วยไหม?
ไม่ Portainer เป็นแค่ Web UI ที่ต่อกับ Docker API การที่ Portainer หยุดทำงานหรือ Restart ไม่กระทบ Container อื่นบนเครื่องแต่อย่างใด Docker Engine ยังรันต่อไปตามปกติ เพียงแต่คุณจะไม่สามารถจัดการ Container ผ่าน Web UI ได้ชั่วคราวจนกว่า Portainer จะกลับมาทำงาน
Portainer รองรับ HTTPS แบบไม่ต้องตั้ง Reverse Proxy ได้ไหม?
รองรับ Port 9443 คือ HTTPS อยู่แล้วโดยใช้ Self-Signed Certificate ที่สร้างอัตโนมัติตอนติดตั้ง แต่ Browser จะแสดงคำเตือน "Connection Not Secure" เพราะไม่ใช่ Certificate จากองค์กรที่เชื่อถือได้ การตั้ง Nginx Reverse Proxy พร้อม Let's Encrypt Certificate แก้ปัญหานี้ได้และทำให้ทีมงานเข้าใช้ได้สะดวกขึ้น
ข้อกำหนดขั้นต่ำและ VPS ที่เหมาะสม
ก่อนติดตั้ง Portainer ควรตรวจสอบว่า VPS ของคุณมีทรัพยากรเพียงพอ รวมถึงระบบปฏิบัติการและ Kernel ที่รองรับ Docker:
| ข้อกำหนด | ขั้นต่ำ | แนะนำ |
|---|---|---|
| RAM | 512 MB (Docker + Portainer) | 1 GB ขึ้นไป (รวม Application) |
| CPU | 1 vCore | 2 vCore ขึ้นไป |
| Disk | 10 GB | 20 GB ขึ้นไป (เผื่อ Image และ Volume) |
| OS | Ubuntu 20.04 / Debian 11 | Ubuntu 22.04 LTS หรือใหม่กว่า |
| Kernel | Linux Kernel 3.10+ | Kernel 5.x+ (รองรับ cgroup v2) |
VPS ของ AsiaGB ทุกแผนใช้ Linux KVM Virtualization จึงรองรับ Docker ได้เต็มรูปแบบ ไม่มีข้อจำกัดด้าน Kernel Module เหมือน OpenVZ บางเจ้า
ฟีเจอร์หลักที่ใช้บ่อยใน Portainer
จัดการ Container
ไปที่ Containers → เห็น List ของทุก Container พร้อมสถานะ Running/Stopped สามารถ Start, Stop, Restart, Remove และดู Log หรือ Exec เข้าไปใน Shell ได้ในคลิกเดียว
Deploy Stack (docker-compose)
ไปที่ Stacks → Add Stack → วาง docker-compose.yml → คลิก Deploy ระบบจะ Pull Image และ Create Container ตามที่กำหนดไว้
version: '3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
ดู Resource Usage
คลิกที่ Container ใดก็ได้ → Stats → ดู CPU%, Memory Usage, Network I/O, Disk I/O แบบ Real-time เหมาะสำหรับ Debug Performance
เปรียบเทียบ Portainer CE กับการใช้ Docker Command Line
| งาน | Docker CLI | Portainer Web UI |
|---|---|---|
| ดูรายการ Container | docker ps -a | คลิก Containers ในเมนู |
| ดู Log | docker logs -f container | คลิก Container → Logs |
| หยุด Container | docker stop container | คลิกปุ่ม Stop สีแดง |
| Deploy Stack | docker compose up -d | Stacks → Add Stack → วาง YAML |
| ดู CPU/RAM | docker stats | คลิก Container → Stats (Graph) |
| Pull Image | docker pull image:tag | Images → Pull → พิมพ์ชื่อ Image |
สำหรับผู้ที่คุ้นเคยกับ Command Line อยู่แล้ว Portainer ไม่ได้แทนที่ทุกอย่าง แต่เพิ่ม Visibility และลด Error จาก Typo ได้มาก โดยเฉพาะเมื่อทำงานเป็นทีมหรือต้องมอบหมายงานให้คนที่ไม่คุ้นเคย Linux
การรักษาความปลอดภัย Portainer บน VPS
เนื่องจาก Portainer มีสิทธิ์ควบคุม Docker ทั้งหมดบนเซิร์ฟเวอร์ การรักษาความปลอดภัยจึงเป็นสิ่งสำคัญมาก ควรปฏิบัติตามแนวทางต่อไปนี้:
- ไม่เปิด Port 9443 โดยตรง — ใช้ Nginx Reverse Proxy พร้อม SSL Certificate ของจริง หรือ Cloudflare Tunnel แทน
- ตั้งรหัสผ่าน Admin ที่แข็งแรง — อย่างน้อย 16 ตัวอักษร ผสม ตัวพิมพ์ใหญ่ เล็ก ตัวเลข และสัญลักษณ์
- เปิดใช้ 2FA — Portainer รองรับ TOTP (Google Authenticator) สำหรับ Admin Account
- จำกัด IP ที่เข้าถึงได้ — ตั้ง Nginx หรือ Firewall ให้รับการเชื่อมต่อเฉพาะ IP ของทีมเท่านั้น
- สร้าง User แยก — ไม่ใช้ Admin Account สำหรับงานประจำวัน สร้าง User ที่มีสิทธิ์จำกัดแทน
ตรวจสอบ Docker Socket Permission
# ตรวจว่า Docker Socket มีสิทธิ์อ่าน/เขียนถูกต้อง
ls -la /var/run/docker.sock
# ผลที่ถูกต้อง
# srw-rw---- 1 root docker 0 ... /var/run/docker.sock
# เพิ่ม User เข้า docker group (ไม่ต้องใช้ sudo ทุกครั้ง)
sudo usermod -aG docker $USER
newgrp docker
การ Backup และ Restore ข้อมูล Portainer
ข้อมูลการตั้งค่า Portainer ทั้งหมด (User, Environment, Stack configuration) ถูกเก็บใน Docker Volume ชื่อ portainer_data การ Backup ทำได้ง่ายด้วยคำสั่งต่อไปนี้:
Backup portainer_data
# หยุด Portainer ก่อน Backup เพื่อความปลอดภัยของข้อมูล
docker stop portainer
# Export Volume เป็นไฟล์ tar.gz
docker run --rm \
-v portainer_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/portainer_backup_$(date +%Y%m%d).tar.gz -C /data .
# เปิด Portainer กลับมา
docker start portainer
Restore portainer_data
# สร้าง Volume ใหม่ (ถ้ายังไม่มี)
docker volume create portainer_data
# Restore จากไฟล์ Backup
docker run --rm \
-v portainer_data:/data \
-v $(pwd):/backup \
alpine sh -c "cd /data && tar xzf /backup/portainer_backup_YYYYMMDD.tar.gz"
แนะนำ: ตั้ง Cron Job ให้รัน Backup อัตโนมัติทุกสัปดาห์ และ Upload ไฟล์ Backup ไปเก็บไว้นอกเซิร์ฟเวอร์ เช่น Object Storage หรือ Google Drive เพื่อป้องกันข้อมูลสูญหาย
การใช้งาน Portainer ร่วมกับ Docker Compose และ Stack
หนึ่งในฟีเจอร์ที่ทรงพลังที่สุดของ Portainer คือ Stacks ซึ่งช่วยให้คุณนำไฟล์ docker-compose.yml มา Deploy ผ่าน Web UI ได้โดยไม่ต้องพิมพ์คำสั่งใน Terminal เลยสักบรรทัด เหมาะมากสำหรับสถานการณ์ที่ต้องการให้สมาชิกในทีมที่ไม่คุ้นเคย Linux สามารถ Deploy แอปพลิเคชันได้เอง
ขั้นตอน Deploy Stack ใน Portainer
- Login เข้า Portainer Web UI
- ในเมนูซ้าย คลิก Stacks
- คลิก Add stack ที่มุมบนขวา
- ตั้งชื่อ Stack เช่น
wordpress-stack - วาง Content ของ docker-compose.yml ในช่อง Web Editor
- ถ้ามี Environment Variable ที่ต้องใช้ ให้ใส่ใน Environment Variables section
- คลิก Deploy the stack
Portainer จะ Pull Image ที่จำเป็น สร้าง Network และ Volume อัตโนมัติ แล้วเปิด Container ขึ้นมาตามที่กำหนดในไฟล์ คุณสามารถดูสถานะ Stack, Redeploy เมื่อ Image มี Version ใหม่ หรือลบ Stack ทั้งหมดได้จากหน้าจอเดียว
ตัวอย่าง Stack สำหรับ WordPress
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: strongpassword
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: strongpassword
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- db_data:/var/lib/mysql
volumes:
wp_data:
db_data:
Monitoring และ Alert สำหรับ Container บน Portainer
Portainer CE มี Stats Dashboard ในตัวสำหรับดู Metrics แบบ Real-time แต่ถ้าต้องการ Alert เมื่อ Container หยุดทำงานหรือ Resource เกินขีดจำกัด แนะนำให้ใช้ร่วมกับเครื่องมือเพิ่มเติม:
- Uptime Kuma — ตรวจสอบว่าบริการที่อยู่ใน Container ยังตอบสนองอยู่หรือไม่ ส่ง Alert ผ่าน Line, Telegram หรือ Email
- cAdvisor + Prometheus + Grafana — Stack สำหรับเก็บ Metrics ของ Docker Container ระยะยาวและแสดงผล Dashboard แบบกราฟ
- Watchtower — อัปเดต Docker Image โดยอัตโนมัติเมื่อมี Version ใหม่ ช่วยให้ Container รัน Image ที่ Patch Security ล่าสุดเสมอ
ทั้งหมดนี้ Deploy ผ่าน Portainer Stacks ได้เลย ทำให้การจัดการระบบ Monitoring รวมอยู่ในที่เดียวโดยไม่ต้องออกไป SSH ทุกครั้ง
อัปเดต Portainer เป็น Version ใหม่
# หยุดและลบ Container เดิม
docker stop portainer
docker rm portainer
# Pull Image ใหม่
docker pull portainer/portainer-ce:latest
# Run ใหม่ (Volume ยังเก็บข้อมูลไว้)
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:latest
ต้องการ VPS รัน Docker และ Portainer?
VPS Linux Ubuntu เริ่มต้น 500 บาท/เดือน Full Root Access พร้อมรัน Docker, Portainer และทุก Container Stack ที่ต้องการ
ดูแพ็กเกจ VPS