ใช้ Portainer จัดการ Container กัน

สวัสดีครับ วันนี้เราจะมาใช้ Portainer จัดการ Container กัน จะเป็นอย่างไรนั้นเรามาดูกัน
สำหรับใครที่ยังไม่รู้จักว่า Docker คืออะไร สามารถดูรายละเอียดตามด้านล่างนี้เลย
- เริ่มต้นใช้งาน Docker กัน Part 1
- เริ่มต้นใช้งาน Docker กัน Part 2
- Youtube เริ่มต้นใช้งาน Docker กัน
- รู้จักกับ Volume บน Docker กัน
- Youtube รู้จักกับ Volume บน Docker กัน
- เอา Docker Image ขึ้น Docker Hub
- Youtube เอา Docker Image ขึ้น Docker Hub
เอาล่ะ เรามาเริ่มเนื้อหากันเลย เราจะมาพูดถึงก่อนว่า Portainer คืออะไร
Portainer ก็คือ Web UI ตัวหนึ่งที่ใช้จัดการ Container ไม่ว่าจะเป็น Docker, Docker Swarm, Kubernetes แล้วมันจัดการอะไรได้บ้าง ต้องบอกว่าจัดการได้ทุกอย่างเลย อะไรที่ Docker Desktop ทำได้ ตัวนี้ทำได้มากกว่าอีกนะ เช่น
- การสร้าง Container บน Portainer ได้เลย
- การ Remote ควบคุม Docker บนเครื่องเซิฟเวอร์
- การเพิ่ม Registry ไว้สำหรับควบคุม
- ดู Network Container บน Portainer ได้
ซึ่งเจ้าตัว Portainer นั้นมีด้วยกัน 2 Version ด้วยกัน คือ Community Edition (CE) กับ Business Edition (BE) จริง ๆ คิดว่าน่าจะเป็นเรื่องของฟีเจอร์กับ Support ที่ทาง Business Edition มีมากกว่า สามารถดูข้อแตกต่างกันได้ที่นี่
โดยในบทความนี้เราจะพูดถึง 3 หัวข้อด้วยกัน คือ
- การติดตั้งโดยใช้ Portainer Community Edition (CE)
- การ Remote ควบคุม Container บนเครื่องเราเอง
- จัดการ Docker Hub บน Portainer
การติดตั้งโดยใช้ Portainer Community Edition (CE)
การติดตั้ง Portainer CE นั้นทำได้หลายวิธีมาก ขึ้นอยู่กับว่าเราใช้งานอะไร โดยจะแยกออกจากกัน เช่น ถ้าเป็น Docker ก็ให้ติดตั้งอีกแบบหนึ่ง, Docker Swarm ก็อีกแบบหนึ่ง, Kubernetes ก็อีกแบบหนึ่ง สามารถไปดูรายละเอียดได้ที่นี่
โดยผู้เขียนจะทำการติดตั้งแบบ Docker Standalone ถ้าใครใช้ Mac ก็เลือกเป็น Linux ส่วนใครใช้ OS อื่น ก็สามารถไปดูได้ที่นี่
ขั้นแรก รัน Docker กัน ใช้คำสั่ง
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
ถ้าใครใช้ Docker Compose ก็ใส่ตามนี้เลย
version: "3.8"
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:latest
ports:
- '8000:8000'
- '9443:9443'
volumes:
- 'portainer_data:/data'
- '/var/run/docker.sock:/var/run/docker.sock'
restart: always
volumes:
portainer_data:
เสร็จแล้ว ก็ตามด้วย
docker compose -f docker-compose.yml up -d
เสร็จแล้ว เราจะไปเช็คก่อนว่า Container รันปกติมั้ย ไปที่ Docker Desktop เลย

ไปดู Volume กันเลย

ต่อไป ดู Data ใน Volume กันเลย

จะเห็นว่าข้อมูลมาเต็มเลย บอกก่อนว่า ถ้าใครจะเปลี่ยน Volume มายังโฟลเดอร์ที่กำหนดก็ได้นะ แล้วแต่เราเลย ส่วนที่เราเห็นนั้น เป็นข้อมูลเกี่ยวกับการทำ SSL หรือ HTTPS เรื่องของฐานข้อมูลที่ Portainer ใช้ ประมาณนี้
เอาล่ะ ตรวจสอบเรียบร้อยแล้ว เราจะเริ่มใช้งานกัน ไปที่ https://localhost:9443 ต้องเป็น https เท่านั้นนะ

บางคนอาจจะขึ้นหน้าตาแบบด้านบนนะ น่าจะเพราะว่าในหน้าลงทะเบียนของ Portainer มีระยะเวลาในการลงทะเบียน เพื่อความปลอดของเราเองด้วย วิธีแก้ก็คือไป Restart Container แล้วลองใหม่

ทำการลงทะเบียนให้เรียบร้อย Username, Password อยู่ที่เครื่องเราอยู่แล้ว ถ้าเราลืม ไม่ได้ใช้นาน เราก็ลบลงใหม่ก็ได้
เอาล่ะ พอลงทะเบียนเสร็จแล้ว จะเข้ามาที่หน้า Dashboard ตามรูปเลย

เสร็จแล้วกับการติดตั้ง แค่นี้ก็ใช้งานได้แล้ว ต่อไปเราจะมาดูการ Remote ควบคุม Container บนเครื่องเราเอง จะเป็นอย่างไร เรามาดูกัน
การ Remote ควบคุม Container บนเครื่องเราเอง
การ Remote ควบคุม Container นั้น จริง ๆ แล้วสามารถควบคุมเครื่องเซิฟเวอร์หรือปลายทางที่เป็นเครื่องเราได้นะ แต่วันนี้เราจะมาควบคุม Container บนเครื่องเรา จะเป็นอย่างไรนั้น มาดูกันเลย
ขั้นแรกเลย ให้คลิก Get Started ตามรูปด้านบนเลย จะได้หน้าตาดังรูปเลย

ถ้าใครไม่ขึ้น ไม่ต้องแปลกใจ อาจต้องรอสักครู่ หรือถ้าไม่ขึ้นเลยอาจจะเป็นเรื่อง docker.sock ที่เราใส่ตอน Mount Volume ด้านบน
-v /var/run/docker.sock:/var/run/docker.sock
ทำต่อกันเลย ให้คลิกไปที่ Environment ทางด้านซ้าย

เราจะเห็น Environment ที่เครื่องเรา ใครไม่เห็นไม่เป็นไร ให้คลิกที่ Add environment

เลือก Docker Standalone แล้วคลิก Start Wizard

เมื่อเข้ามา จะมีให้เลือกทั้งหมด 4 แบบ ส่วนนี้ขอยังไม่อธิบายนะ เดี๋ยวจะยาว ในที่นี้จะขอเลือกเป็น Socket เป็นการต่อบนเครื่องเรา จะเห็นว่าเค้าให้เราใส่ Volume เพิ่มไป
-v "/var/run/docker.sock:/var/run/docker.sock"

ใส่ข้อมูลให้เรียบร้อย Name ผู้เขียนจะขอใส่เป็น Test ละกัน แล้วคลิก Connect เลย

เสร็จแล้ว คลิก Home ดู จะเห็นว่าขึ้นมาแล้ว เรามาลองเช็คข้างในกัน ก็คลิกอันที่เราสร้างเลย

เราจะเห็นรายละเอียดเต็มเลย ว่าข้างในมีอะไรบ้าง

ในหน้านี้จะมีคำว่า Stack คำว่า Stack นั้น ในความหมายภาษาอังกฤษก็คือ ซ้อนกัน แต่ถ้าแปลให้เข้าใจง่าย ๆ ก็คือ 1 Image ที่มีหลาย Service หรือหลาย Container เราจะนับว่ามี 1 Stack เผื่อใครไม่เห็นภาพ ตอนนี้เรามี 1 Stack ตามรูปเลย จากนั้นเราจะทำการรัน Docker Compose เข้าไป จะเอาตัวอย่างจากโปรเจคเก่ามา
version: "3.8"
services:
web:
container_name: some-nginx
image: nginx:latest
ports:
- '8085:80'
restart: always
phpmyadmin:
container_name: some-phpmyadmin
image: phpmyadmin
ports:
- 8086:80
environment:
- PMA_ARBITRARY=1
restart: always
รันเลย
docker compose -f docker-compose_nginx_phpmyadmin.yml up -d
ทีนี้เข้าไปดูอีกรอบ

จะเห็นว่า Stack เพิ่มเป็น 2 ส่วน Container เป็น 3 แล้ว ซึ่งตัว Portainer เค้าจะบอกและนับจำนวนให้ ซึ่งถือว่าดีมาก
ดูต่อไปจะเห็นคำว่า Networks อีกคำหนึ่ง ความหมายตรงตัวเลย ก็คือ เครือข่าย ซึ่ง Docker นั้น แต่ละ Container จะเชื่อมต่อกันเป็น Networks เราสามารถตั้งค่า Networks ได้ด้วยว่าจะให้ Container ไหนเชื่อมต่อกันได้บ้าง มีประโยชน์มาก แต่เดี๋ยวจะพูดถึงในบทความต่อไป แต่ให้เข้าใจว่าใน Portainer มันดูได้ Networks ได้ ส่วน Docker Desktop ดูไม่ได้ ต้อง Command Line ดู
Environment ของ Portainer ให้เข้าใจว่ามันคือ Environment เฉพาะของ Portainer เท่านั้น ซึ่ง Environment ของ Portainer ก็คือการเพิ่มเครื่องหรือ Remote ควบคุมเครื่องตามที่เราต้องการ เพื่อไว้สำหรับจัดการกับ Container แต่ถ้าเป็น Environment ของ Docker จะเป็นเรื่องของการ Config ตัวแปรหรือค่าบางอย่าง เดี๋ยวไว้ผู้เขียนจะเขียนในบทความต่อ ๆ ไปอีกที
เอาล่ะมาถึงตรงนี้แล้ว คิดว่าหลาย ๆ คนน่าจะใช้งานพอได้แล้ว เราจะมาจัดการ Docker Hub บน Portainer กันต่อ
จัดการ Docker Hub บน Portainer
ต้องบอกก่อนว่า จัดการ Docker Hub บน Portainer ไม่ใช่ดึง Repository บน Docker Hub มาแสดงผลบน Portainer นะ แต่เป็นการเพิ่มสิทธิ์ให้เราสามารถจัดการ Docker Hub ได้ผ่านทาง Portainer ได้เลย เพราะตัว Portainer สามารถสร้าง Container บน Portainer ได้เลย
ขั้นแรกเลย เราคลิกที่ Registries ทางด้านซ้ายเลย

เราจะเห็นเป็น Docker Hub เป็นแบบ anonymous ก็คือ ไม่ใช่ของเรา เราจะมาเพิ่มกัน ก็คลิกไปที่ Add registry

พอคลิกเข้ามาแล้ว เราจะเห็นผู้ให้บริการเก็บ Docker Image เต็มเลย เราไปลองเล่นดูได้ แต่วันนี้เราจะมาใช้ของ Docker Hub กัน

จากรูปด้านบน เราจะเห็นว่ามีให้ใส่ Docker Hub access token ด้วย ถามว่าคืออะไร Docker Hub access token ก็คือ Token ตัวหนึ่งที่ใช้แทน Password ที่สามารถเข้าถึงบัญชีและจัดการ Repository ของเราได้ โดยตัว Access Token สามารถกำหนด Scope ว่าทำงานได้เท่าไหน ห้ามให้คนอื่นเห็นนะ เพราะไม่เช่นนั้น ถ้าคนรู้ username ของเรา แล้วเราไม่ได้ตั้ง 2FA ไว้ จะทำให้สามารถใช้งาน Account เราได้ ส่วนเราจะใช้ Access Token กรณีไหนนั้นก็เช่น
- สร้าง Token มาเพื่อสำหรับ Read อย่างเดียว หรือ Write อย่างเดียวอะไรแบบนี้
- สร้าง Token มาสำหรับ docker login สำหรับใช้งานบนเครื่องเซิฟเวอร์กับเครื่องเราแยกกัน
เอาล่ะ เรามี username แล้ว แต่ยังไม่มี Access Token เราไปสร้างกันเลย
ขั้นแรกก็ไปที่ Docker Hub Login ให้เรียบร้อย จากนั้นก็คลิก Dropdown แล้วเลือก Account Settings

เลือก Tab Security แล้วคลิกที่ New Access Token

จะมีช่องให้ใส่รายละเอียดของ Token ว่าทำอะไร จะใช้เป็นแบบตั้งชื่อก็ได้นะ ในที่นี้ขอตั้งเป็น Portainer ส่วน Permission ขอเป็นแบบ Read, Write, Delete เลยละกัน แล้วคลิก Generate เลย

เราจะเห็น Access Token ก็ Copy ไปนะ อย่าให้ใครเห็นนะ

กลับมาที่ WebUI Portainer ใส่รายละเอียดให้ครบ จากนั้นคลิก Add registry

ถ้าไม่มีอะไรผิดพลาด ก็จะได้ดังรูปเลย

เอาล่ะ เสร็จไปแล้วกับการใช้ Portainer จัดการ Container กัน เป็นยังไงกันบ้าง คิดว่าถ้าได้ลองแล้ว คิดว่าน่าจะมีประโยชน์กับผู้อ่านไม่มากก็น้อย ที่เขียนบทความนี้ขึ้นมาเพราะต้องการเขียนเรื่อง Docker Network แต่ตัว Docker Desktop ไม่มี เลยต้องมาที่ Portainer ก่อน เวลาไปเรื่อง Docker Network จะได้เข้าใจได้ง่าย สำหรับวันนี้ขอจากกันไปก่อน สวัสดีครับ
ช่องทางการติดต่อ
Email: [email protected]
Website: https://blog.tichaky.com/
Facebook: https://www.facebook.com/tichaky