จัดการ Docker ผ่านหน้าเว็บด้วย Portainer
เมื่อเซิร์ฟเวอร์รันคอนเทนเนอร์หลายสิบตัว การไล่ดูด้วยคำสั่ง docker ps และ docker logs เริ่มไม่สะดวก โดยเฉพาะเมื่อมีทีมงานที่ไม่ถนัดบรรทัดคำสั่งต้องเข้ามาดูสถานะด้วย
Portainer ให้หน้าจอเว็บที่ดูสถานะ อ่าน Log รีสตาร์ตคอนเทนเนอร์ และปรับใช้ Stack ใหม่ได้ แต่มีข้อควรระวังด้านความปลอดภัยที่ต้องเข้าใจก่อน เพราะโปรแกรมนี้เข้าถึง Docker ได้เต็มที่ ซึ่งเทียบเท่าสิทธิ์ root บนเครื่อง
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ที่ติดตั้ง Docker แล้ว
- โดเมนย่อยสำหรับเข้าหน้าจอ
- เข้าใจว่าใครควรมีสิทธิ์เข้าถึงบ้าง
ขั้นตอนที่ 1: ติดตั้ง
sudo docker volume create portainer_data
sudo docker run -d \
--name portainer \
--restart=always \
-p 127.0.0.1:9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
sudo docker ps | grep portainer
ผูกพอร์ตกับ 127.0.0.1 เสมอ แล้วเข้าผ่าน Nginx ที่มี SSL และการยืนยันตัวตนอีกชั้น อย่าเปิดพอร์ต 9000 ออกสู่อินเทอร์เน็ตโดยตรง
ข้อควรรู้เรื่องความปลอดภัย การเมานต์ /var/run/docker.sock ทำให้คอนเทนเนอร์นี้สั่ง Docker ได้ทุกอย่าง รวมถึงการสร้างคอนเทนเนอร์ที่เมานต์ระบบไฟล์ของเครื่องแม่ ผู้ที่เข้าถึง Portainer ได้จึงมีอำนาจเทียบเท่า root ต้องปฏิบัติกับรหัสผ่านของมันเหมือนรหัส root
ขั้นตอนที่ 2: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/portainer
server {
listen 80;
server_name docker.example.com;
# จำกัดให้เข้าได้เฉพาะจากออฟฟิศหรือ VPN
allow 203.0.113.0/24;
allow 10.0.0.0/24;
deny all;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
sudo ln -s /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d docker.example.com --agree-tos -m [email protected] --redirect
การจำกัดด้วย IP เป็นชั้นป้องกันที่สำคัญที่สุด เพราะแม้รหัสผ่านจะหลุด ผู้โจมตีจากภายนอกก็ยังเข้าไม่ได้
ขั้นตอนที่ 3: ตั้งค่าครั้งแรก
เปิด https://docker.example.com ภายใน 5 นาทีหลังเริ่มคอนเทนเนอร์ เพื่อสร้างบัญชีผู้ดูแล หากช้ากว่านั้น Portainer จะล็อกตัวเองเพื่อความปลอดภัย ต้องรีสตาร์ตคอนเทนเนอร์แล้วเข้าใหม่
sudo docker restart portainer
ตั้งรหัสผ่านที่ยาวอย่างน้อย 16 ตัวอักษร แล้วเลือก Get Started เพื่อจัดการ Docker บนเครื่องนี้
ขั้นตอนที่ 4: สิ่งที่ทำได้จากหน้าจอ
- Containers ดูสถานะ เริ่ม หยุด รีสตาร์ต ดู Log แบบเรียลไทม์ และเปิดคอนโซลเข้าไปในคอนเทนเนอร์
- Stacks วาง Docker Compose ลงไปแล้วปรับใช้ได้ทันที รวมถึงดึงจาก Git Repository
- Images ดึงอิมเมจใหม่ ลบอิมเมจที่ไม่ได้ใช้เพื่อคืนพื้นที่
- Volumes ดูว่า Volume ไหนถูกใช้อยู่ และ Volume ไหนค้างอยู่โดยไม่มีคอนเทนเนอร์ใช้
- Networks ดูโครงสร้างเครือข่ายระหว่างคอนเทนเนอร์
ฟีเจอร์ที่มีประโยชน์ที่สุดในงานประจำวันคือการดู Log พร้อมค้นหาข้อความ และการเปิดคอนโซลเข้าไปในคอนเทนเนอร์โดยไม่ต้อง SSH
ขั้นตอนที่ 5: สร้าง Stack จากหน้าเว็บ
ไปที่ Stacks แล้ว Add stack ตั้งชื่อแล้ววางเนื้อหา Compose ลงไป
services:
whoami:
image: traefik/whoami
restart: unless-stopped
ports:
- "127.0.0.1:8081:80"
Portainer จะสร้างและรันให้ทันที และจัดการเป็นกลุ่มเดียวกัน ทำให้หยุดหรือลบทั้งชุดได้ในคลิกเดียว
สำหรับระบบงานจริง แนะนำให้ใช้ตัวเลือก Repository ที่ดึง Compose จาก Git แทนการวางข้อความ เพราะได้ประวัติการเปลี่ยนแปลงและย้อนกลับได้
ขั้นตอนที่ 6: กำหนดสิทธิ์ทีมงาน
ไปที่ Users แล้วสร้างผู้ใช้เพิ่ม จากนั้นสร้าง Team แล้วกำหนดสิทธิ์ต่อทรัพยากร
- ให้ทีมพัฒนาเห็นเฉพาะคอนเทนเนอร์ของตัวเอง โดยตั้ง Access control ที่ระดับ Stack
- ให้สิทธิ์อ่านอย่างเดียวกับทีมที่ต้องการดูสถานะเท่านั้น
- สงวนบทบาท Administrator ไว้กับผู้ดูแลระบบจริงเท่านั้น
เปิดการยืนยันตัวตนสองขั้นตอนให้ทุกบัญชีที่เป็นผู้ดูแล ในเมนู My account แล้ว Two-factor authentication
ขั้นตอนที่ 7: สำรองการตั้งค่า
# ส่งออกการตั้งค่าจากหน้าเว็บที่ Settings แล้ว Backup Portainer
# หรือสำรอง Volume โดยตรง
sudo docker run --rm \
-v portainer_data:/data \
-v /var/backups:/backup \
alpine tar czf /backup/portainer-$(date +%F).tar.gz -C /data .
ขั้นตอนที่ 8: อัปเดต
sudo docker stop portainer
sudo docker rm portainer
sudo docker pull portainer/portainer-ce:latest
sudo docker run -d \
--name portainer --restart=always \
-p 127.0.0.1:9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
ข้อมูลทั้งหมดอยู่ใน Volume จึงไม่หายเมื่อสร้างคอนเทนเนอร์ใหม่
ปัญหาที่พบบ่อย
เข้าหน้าแรกแล้วขึ้นว่าหมดเวลาตั้งค่า
Portainer ล็อกตัวเองหลังเริ่มทำงานเกิน 5 นาทีโดยไม่มีการสร้างบัญชี รีสตาร์ตคอนเทนเนอร์แล้วรีบเข้าไปตั้งค่า
เห็นคอนเทนเนอร์แต่ดู Log ไม่ได้
ตรวจว่า Nginx ส่งต่อ WebSocket ตามคอนฟิกในขั้นตอนที่ 2 และเวลาที่ Proxy รอตอบไม่สั้นเกินไป
กังวลเรื่องความปลอดภัยของ docker.sock
ทางเลือกที่ปลอดภัยกว่าคือใช้ Portainer Agent ร่วมกับ socket proxy ที่จำกัดคำสั่งที่เรียกได้ แต่สำหรับเซิร์ฟเวอร์เดียวที่มีผู้ดูแลไม่กี่คน การจำกัดด้วย IP และ 2FA ตามคู่มือนี้เพียงพอในทางปฏิบัติ
ลบคอนเทนเนอร์ผิดตัว
ตั้งสิทธิ์ให้ทีมที่ไม่จำเป็นต้องแก้ไขเป็นแบบอ่านอย่างเดียว และใช้ Stack เพื่อจัดกลุ่มให้ชัดเจนว่าอะไรเป็นของระบบไหน
ต้องการ Cloud VPS ที่พร้อมใช้งาน Docker ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








