
Docker เป็นเครื่องมือที่ทรงพลังแต่การจัดการผ่าน command line อย่างเดียวอาจไม่เหมาะสำหรับทุกู้คืนในทีมโดยเฉพาะ developer ที่ต้องการ deploy application หรือ QA ที่ต้องการดู log ของ container การจำคำสั่ง docker compose, docker logs, docker exec ทุกครั้งเป็นอุปสรรคที่ไม่จำเป็น Portainer คือ solution ที่ให้ web-based management UI สำหรับ Docker ที่สวยงามใช้งานง่ายและฟรีครับ
วิดีโอประกอบการเรียนรู้ | YouTube @icafefx
Portainer Community Edition ให้คุณจัดการ Docker containers, images, volumes, networks ทั้งหมดผ่าน browser deploy application ด้วย Docker Compose stack, monitor resource usage, ดู container logs แบบ real-time และจัดการ multiple Docker hosts จากที่เดียวบทความนี้จะพาคุณติดตั้ง Portainer ตั้งแต่เริ่มต้นจนถึงการใช้งานในระดับ production
Portainer เป็น lightweight container management platform ที่ทำงานเป็น Docker container ตัวมันเองกิน resource น้อยมาก RAM แค่ 50-100MB เชื่อมต่อกับ Docker socket หรือ Docker API เพื่อจัดการ container ทั้งหมดรองรับ Docker standalone, Docker Swarm และ Kubernetes
จุดเด่นของ Portainer เมื่อเทียบกับ CLI คือทุกู้คืนในทีมเข้าถึงได้ผ่าน browser ไม่ต้อง SSH เข้า server มี visual interface ที่เข้าใจง่ายมี role-based access control ให้ developer จัดการได้เฉพาะ container ของตัวเองมี audit log ว่าใครทำอะไรเมื่อไหร่และมี template สำเร็จรูปสำหรับ deploy application ยอดนิยมได้ด้วยคลิกเดียว
เมื่อเทียบกับ Yacht ที่เป็น Docker UI อีกตัว Portainer มี feature ครบกว่ามากรองรับ Swarm และ K8s มี template และ stack management ส่วน Cockpit ที่เราเคยพูดถึงมี container module แต่ไม่ได้ออกแบบมาสำหรับ container management โดยเฉพาะสำหรับ Kubernetes scale ใหญ่ Rancher เป็นตัวเลือกที่ดีกว่าแต่สำหรับ Docker standalone Portainer ดีที่สุดครับ
# ติดตั้ง Docker (ถ้ายังไม่มี) curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER # สร้าง volume สำหรับ Portainer data docker volume create portainer_data # ติดตั้ง Portainer CE docker run -d \ --name portainer \ --restart=always \ -p 8000:8000 \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest # ตรวจสอบ docker ps | grep portainer # portainer/portainer-ce:latest ... Up 5 seconds
เปิด browser ไปที่ https://YOUR_SERVER_IP:9443 จะเห็นหน้า setup ให้สร้าง admin account ใส่ username และ password ที่ต้องการจากนั้นเลือก environment type เป็น Docker แล้วคลิก Connect Portainer จะเชื่อมต่อกับ Docker socket อัตโนมัติเข้า dashboard ได้เลยครับ
# docker-compose.yml version: "3.8" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always ports: - "8000:8000" - "9443:9443" volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data environment: - TZ=Asia/Bangkok security_opt: - no-new-privileges:true volumes: portainer_data: driver: local
docker compose up -d docker compose logs -f portainer
หลังจาก login เข้า Portainer จะเห็น Dashboard ที่แสดงภาพรวมของ Docker environment ทั้ง running containers, images, volumes, networks ครบทุกอย่างสามารถคลิกเข้าไปจัดการแต่ละส่วนได้ทันที
ไปที่เมนู Containers จะเห็นรายการ container ทั้งหมดพร้อมสถานะสามารถ start, stop, restart, kill, remove container ได้ด้วยคลิกเดียวคลิกที่ชื่อ container เพื่อดูรายละเอียด resource usage, environment variables, mounted volumes, network settings ทุกอย่างที่ docker inspect แสดงได้ Portainer แสดงให้ในรูปแบบที่อ่านง่ายกว่ามากครับ
# ผ่าน Portainer UI: # 1. คลิก "Add container" # 2. กรอก Name: my-nginx # 3. กรอก Image: nginx:alpine # 4. Port mapping: 8080 -> 80 # 5. Volume: /data/nginx -> /usr/share/nginx/html # 6. Restart policy: Always # 7. คลิก "Deploy the container" # เทียบเท่ากับ CLI: docker run -d \ --name my-nginx \ --restart=always \ -p 8080:80 \ -v /data/nginx:/usr/share/nginx/html \ nginx:alpine
คลิก Console ใน container detail เพื่อเปิด terminal ใน browser เลือก shell ที่ต้องการ (/bin/bash หรือ /bin/sh) แล้วใช้งานได้เลยไม่ต้อง SSH เข้า server แล้ว docker exec เองสะดวกมากสำหรับ debug production issues
Stacks เป็น feature ที่ทรงพลังที่สุดของ Portainer ให้คุณ deploy Docker Compose file ผ่าน web UI ไม่ต้อง SSH เข้า server ไม่ต้อง copy file ไปวางแค่ paste docker-compose.yml แล้วคลิก Deploy
# ตัวอย่าง Stack: WordPress + MariaDB # วาง YAML นี้ใน Portainer Stack editor version: "3.8" services: wordpress: image: wordpress:latest restart: always ports: - "8888:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: WpP@ss2026 WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html depends_on: - db db: image: mariadb:11 restart: always environment: MYSQL_DATABASE: wordpress MYSQL_USER: wp_user MYSQL_PASSWORD: WpP@ss2026 MYSQL_ROOT_PASSWORD: R00tP@ss2026 volumes: - db_data:/var/lib/mysql volumes: wp_data: db_data:
หลังจาก deploy stack คุณจะเห็นทุก container ของ stack นั้นจัดกลุ่มรวมกันสามารถ start/stop ทั้ง stack ได้ด้วยคลิกเดียว update stack ด้วยการแก้ YAML แล้วคลิก Update ง่ายมากครับยังรองรับ Git repository integration ดึง docker-compose.yml จาก Git repo แล้ว auto-deploy เมื่อมี push ใหม่ได้ด้วย
Portainer มี App Templates สำเร็จรูปให้ deploy application ยอดนิยมได้ด้วยคลิกเดียวเช่น WordPress, PostgreSQL, Redis, Nginx, MariaDB, MongoDB, Elasticsearch, GitLab CE, Grafana, Prometheus และอีกหลายสิบ application คลิกเลือก template กรอก parameters แล้ว Deploy ได้เลย
# สร้าง Custom App Template
# ไปที่ Settings > App Templates
# เพิ่ม URL ของ template file:
# https://raw.githubusercontent.com/your-org/templates/main/templates.json
# ตัวอย่าง template JSON
{
"version": "2"
"templates": [
{
"type": 3
"title": "SiamCafe Blog Stack"
"description": "Full blog stack with Nginx + PHP + SQLite"
"categories": ["webserver"]
"platform": "linux"
"repository": {
"url": "https://github.com/siamcafe/blog-stack"
"stackfile": "docker-compose.yml"
}
}
]
}
Custom templates เป็นวิธีที่ดีที่สุดในการ standardize deployment ในองค์กรสร้าง template สำหรับ application stack ที่ใช้บ่อย developer คลิก deploy ได้เลยโดยไม่ต้องเขียน docker-compose.yml เองลดความผิดพลาดและ ensure consistency
Portainer สามารถจัดการ Docker หลาย host จากที่เดียวต่อ development server, staging server และ production server ทั้งหมดใน Portainer เดียวสลับ environment ได้ด้วยคลิกเดียว
# วิธีที่ 1: Portainer Agent (แนะนำ) # ติดตั้ง Agent บน remote host docker run -d \ --name portainer_agent \ --restart=always \ -p 9001:9001 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/lib/docker/volumes:/var/lib/docker/volumes \ portainer/agent:latest # จากนั้นใน Portainer UI: # Settings > Environments > Add environment # เลือก Agent แล้วใส่ IP:9001 ของ remote host
# วิธีที่ 2: Docker API (ต้องเปิด TCP)
# บน remote host แก้ /etc/docker/daemon.json
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
"tls": true
"tlscacert": "/etc/docker/tls/ca.pem"
"tlscert": "/etc/docker/tls/server-cert.pem"
"tlskey": "/etc/docker/tls/server-key.pem"
"tlsverify": true
}
sudo systemctl restart docker
# ใน Portainer: Add environment > Docker API
# ใส่ IP:2376 + upload TLS certificates
แนะนำใช้ Agent เพราะ setup ง่ายกว่าปลอดภัยกว่าไม่ต้องเปิด Docker API port และ Agent ให้ feature เพิ่มเช่น browse host filesystem, ดู container stats ที่ละเอียดกว่า API mode
# เพิ่ม private registry ใน Portainer # Settings > Registries > Add registry # Docker Hub (default) # Registry type: DockerHub # Username: your-dockerhub-user # Password: your-access-token # Private registry (Harbor, GitLab, etc.) # Registry type: Custom registry # Registry URL: https://registry.example.com # Authentication: username/password # AWS ECR # Registry type: AWS ECR # Region: ap-southeast-1 # Access key + Secret key
เมื่อเพิ่ม registry แล้วสามารถ pull image จาก private registry ได้ตรงใน Portainer UI ไม่ต้อง docker login บน server ทุกเครื่องทำให้ deploy private images ง่ายขึ้นมากโดยเฉพาะเมื่อมี multiple Docker hosts
Portainer CE มี basic RBAC ที่แบ่ง user เป็น Administrator กับ Standard user โดย admin จัดการได้ทุกอย่าง standard user จัดการได้เฉพาะ resource ที่ได้รับสิทธิ์
# สร้าง User # Settings > Users > Add user # Username: developer1 # Password: DevP@ss2026 # Role: Standard user # สร้าง Team # Settings > Teams > Add team # Team name: Frontend Team # Members: developer1, developer2 # กำหนดสิทธิ์ Environment # Settings > Environments > manage access # Frontend Team: Read/Write access to Development only # DevOps Team: Read/Write access to all environments
สำหรับองค์กรที่ต้องการ RBAC ละเอียดมากขึ้นเช่นกำหนดสิทธิ์ระดับ container, stack หรือ registry ต้องใช้ Portainer Business Edition แต่สำหรับทีมส่วนใหญ่ CE ก็เพียงพอครับ
Portainer แสดง resource usage ของทุก container แบบ real-time ทั้ง CPU, memory, network I/O และ disk I/O คลิกที่ container เลือก Stats จะเห็น graph ที่อัพเดทอัตโนมัติช่วยให้เห็นว่า container ไหนักิน resource มากผิดปกติได้ทันที
# Container Logs ผ่าน Portainer UI # คลิก container > Logs # - Auto-refresh: เปิด/ปิดได้ # - Timestamps: แสดงเวลาทุกบรรทัด # - Search/Filter: ค้นหา keyword ใน log # - Download: export log เป็นไฟล์ # เทียบกับ CLI: docker logs -f --tail 100 --timestamps my-container docker logs --since 1h my-container | grep ERROR
สิ่งที่ Portainer ทำได้ดีกว่า CLI คือ log viewer ที่ search ได้, highlight keyword ได้และ scroll ได้สะดวกไม่ต้อง pipe ผ่าน grep หลายชั้นสำหรับ developer ที่ต้อง debug production issue สามารถเปิด log ของหลาย container พร้อมกันใน tab ต่างๆดู log ข้ามกันได้ง่ายมากครับ
Dashboard ของ Portainer แสดง overview ของทั้ง environment จำนวน running containers, stopped containers, images ที่ใช้อยู่, total volume size และ network count ช่วยให้ admin เห็นภาพรวมได้ทันทีโดยไม่ต้องรัน docker stats หรือ docker system df สำหรับ monitoring ที่ละเอียดกว่านี้แนะนำใช้ร่วมกับ Prometheus และ Grafana
# Backup Portainer data docker stop portainer docker run --rm \ -v portainer_data:/data \ -v $(pwd):/backup \ alpine tar czf /backup/portainer-backup-$(date +%Y%m%d).tar.gz -C /data . docker start portainer # Restore docker stop portainer docker run --rm \ -v portainer_data:/data \ -v $(pwd):/backup \ alpine sh -c "rm -rf /data/* && tar xzf /backup/portainer-backup-20260222.tar.gz -C /data" docker start portainer
# Automatic backup script #!/bin/bash BACKUP_DIR="/opt/backups/portainer" KEEP_DAYS=30 mkdir -p $BACKUP_DIR docker run --rm \ -v portainer_data:/data \ -v $BACKUP_DIR:/backup \ alpine tar czf /backup/portainer-$(date +%Y%m%d-%H%M).tar.gz -C /data . find $BACKUP_DIR -name "portainer-*.tar.gz" -mtime +$KEEP_DAYS -delete echo "Backup done: $(ls -la $BACKUP_DIR/*.tar.gz | tail -1)" # เพิ่มใน crontab # 0 2 * * * /opt/scripts/backup-portainer.sh >> /var/log/portainer-backup.log 2>&1
Portainer เก็บ configuration ทั้งหมดใน volume เดียวทำให้ backup และ restore ง่ายมากข้อมูลที่อยู่ใน volume ได้แก่ user accounts, environment settings, stack configurations, custom templates และ edge configurations ทั้งหมด backup ทุกวันเพื่อป้องกัน data loss
ไม่ควรเปิด Portainer port 9443 ให้ public access โดยตรงใช้ reverse proxy ด้วย Nginx หรือ Traefik ใส่ SSL certificate และจำกัด IP ที่เข้าถึงได้
# Nginx reverse proxy สำหรับ Portainer
# /etc/nginx/sites-available/portainer.conf
server {
listen 443 ssl http2;
server_name portainer.example.com;
ssl_certificate /etc/letsencrypt/live/portainer.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/portainer.example.com/privkey.pem;
# จำกัด IP (optional)
# allow 10.0.0.0/8;
# deny all;
location / {
proxy_pass https://127.0.0.1:9443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}
# หรือใช้ Traefik กับ Docker labels services: portainer: image: portainer/portainer-ce:latest labels: - "traefik.enable=true" - "traefik.http.routers.portainer.rule=Host(`portainer.example.com`)" - "traefik.http.routers.portainer.tls.certresolver=letsencrypt" - "traefik.http.services.portainer.loadbalancer.server.port=9443" - "traefik.http.services.portainer.loadbalancer.server.scheme=https"
ตรวจสอบว่า Docker socket mount ถูกต้อง -v /var/run/docker.sock:/var/run/docker.sock ถ้าใช้ rootless Docker path จะต่างออกไปตรวจด้วย docker info ว่า socket อยู่ที่ไหนใช้ path นั้นแทนครับ
ตรวจ firewall ว่าเปิด port 9001 แล้วตรวจว่า agent container running อยู่ด้วย docker ps | grep agent และตรวจ network connectivity ด้วย telnet AGENT_IP 9001 ถ้า agent อยู่หลัง NAT ให้ใช้ Edge Agent แทนที่ใช้ outbound connection
ดู error message ใน Portainer UI ส่วนใหญ่เกิดจาก YAML syntax error, image pull failed หรือ port conflict ตรวจว่า image name ถูกต้อง registry accessible และ port ไม่ซ้ำกับ container อื่นลอง validate YAML ก่อน deploy
ปกติ Portainer ใช้ RAM แค่ 50-100MB ถ้าสูงกว่านั้นอาจเกิดจากมี environment จำนวนมากที่ poll status อยู่ตลอดลด polling interval ใน Settings หรือ remove environment ที่ไม่ใช้แล้วถ้ายังสูงลอง restart container
Portainer CE (Community Edition) เป็น open source ฟรีมี feature พื้นฐานครบจัดการ Docker, Swarm, Kubernetes ได้ส่วน Business Edition มี RBAC ละเอียดกว่า, registry management ที่ดีกว่า, GitOps deployment และ official support สำหรับทีมส่วนใหญ่ CE เพียงพอครับ
รองรับครับ Portainer จัดการ Kubernetes cluster ได้ทั้ง deploy applications, manage namespaces, view logs, exec into pods คล้าย Rancher แต่ lightweight กว่ามากเหมาะสำหรับทีมเล็กถึงกลางที่ไม่ต้องการ complexity ของ Rancher
Portainer เบามากใช้ RAM แค่ 50-100MB และ CPU น้อยมากเพราะเป็นแค่ web UI ที่เรียก Docker API ไม่ได้ run workload เองติดตั้งบน server ที่มี Docker อยู่แล้วได้เลยโดยไม่กระทบ performance ของ application containers
Portainer มี authentication, RBAC, HTTPS support และ audit log ในตัวแต่ต้องตั้งค่าให้ถูกต้องไม่ควรเปิด port 9443 ให้ public access ใช้ reverse proxy ด้วย Nginx หรือ Traefik ใส่ SSL certificate จำกัด IP ที่เข้าถึงได้และเปลี่ยน admin password เป็น strong password
Rancher เหมาะสำหรับ Kubernetes cluster ขนาดใหญ่มี feature ครบทั้ง cluster provisioning, fleet management ส่วน Portainer เหมาะสำหรับ Docker standalone และ small Kubernetes เบากว่า setup ง่ายกว่าถ้าใช้ Docker เป็นหลักเลือก Portainer ถ้า K8s เป็นหลักเลือก Rancher
อ่านเพิ่มเติมเกี่ยวกับ IT Infrastructure และ DevOps Tools รวมถึง Network Solutions และ Server Management
ใช้ Docker Compose ร่วมกับ Portainer สำหรับ stack deployment หรืออ่าน Traefik Reverse Proxy เพื่อ expose Portainer ด้วย SSL อัตโนมัติ
สนใจระบบ เทรด Forex อัตโนมัติ หรือ สัญญาณเทรด XMSignal ติดตามได้ที่เว็บไซต์ครับ
Portainer เป็น Docker management UI ที่ดีที่สุดในโลก open source ให้ทุกู้คืนในทีมจัดการ containers ได้ผ่าน browser ไม่ต้อง SSH ไม่ต้องจำ CLI commands ด้วย stack deployment, app templates, multi-environment management และ RBAC ทำให้ Docker operations เป็นเรื่องง่ายสำหรับทั้ง developer และ operations team
ติดตั้ง Portainer ใช้เวลาไม่ถึง 5 นาทีแค่ docker run คำสั่งเดียวได้ management UI ที่ครบทุก feature ทันทีลงทุนเวลาแค่เล็กน้อยแต่ได้ productivity ที่เพิ่มขึ้นมหาศาลโดยเฉพาะเมื่อทีมโตขึ้นและมี Docker hosts หลายเครื่อง Portainer จะเป็น single pane of glass ที่คุณขาดไม่ได้ครับ
อ่านเพิ่มเติม: สอนเทรด Forex | XM Signal | IT Hardware | อาชีพ IT