คำตอบสั้น ๆ: ติดตั้ง Portainer เพื่อดูและจัดการคอนเทนเนอร์ อิมเมจ และ Volume ผ่านเบราว์เซอร์ พร้อมกำหนดสิทธิ์ให้ทีมงานเข้าดูได้อย่างปลอดภัย
คู่มือนี้อธิบาย 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