[Docker-101#3] จัดการ Docker Engine และ Docker Swarm ผ่าน Web GUI ด้วย Portainer กัน

Supachai Jaturaprom
Jun 13 · 5 min read

วันนี้เราจะมาลองบริหาร จัดการ Docker Engine ที่เป็น Standalone (ตัวคนเดียว) กับ Docker Swarm ที่เป็น Cluster (มีเพื่อนเยอะจุง) ผ่าน Web GUI ด้วย Portainer กันครับ โดยผมจะจำลองสถานการณ์เล่นๆ แบบนี้ครับ

ผมจำลองบนเครื่องตัวเองทั้งหมดนะครับ

สิ่งที่ต้องมีก่อนทำ

  1. ติดตั้ง Virtualization Software (Virtualbox, VMware Workstation,….) ในที่นี้ผมใช้ VMware Workstation นะครับ
  2. ติดตั้ง Docker Client
  3. ติดตั้ง Docker-Machine

ใครยังไม่เคยลองใช้ ลองเข้าไปดูในบทความก่อนหน้าครับ

สร้าง Docker Hosts และทำการ Deploy Portainer

ในที่นี้ผมอนุญาตตัวเอง ใช้ Powershell นะครับ

  1. สร้าง Docker Hosts ทั้งหมดด้วย Docker-Machine
docker-machine create --driver=vmwareworkstation BKK-manager-node-1
docker-machine create --driver=vmwareworkstation BKK-worker-node-1
docker-machine create --driver=vmwareworkstation CHM-manager-node-1
docker-machine create --driver=vmwareworkstation CHM-worker-node-1
docker-machine create --driver=vmwareworkstation SRT-manager-node-1
docker-machine create --driver=vmwareworkstation SRT-worker-node-1
docker-machine create --driver=vmwareworkstation Docker-Local-1
docker-machine ls

2. ทำการ Initial Docker Swarm และ Join Worker แต่ละ Site ดังนี้

เริ่มทำกที่ Bangkok site

## Bangkok site
$manager_ip = $(docker-machine ip BKK-manager-node-1)docker-machine env BKK-manager-node-1 | iexdocker swarm init --advertise-addr $manager_ip$mgr_remote= $(docker-machine ip BKK-manager-node-1) + ':2377'$token = $(docker swarm join-token worker -q)docker-machine env BKK-worker-node-1 | iexdocker swarm join --token $token $mgr_remote

ต่อไปก็ทำที่ ChangMai site

## ChangMai site
$manager_ip = $(docker-machine ip CHM-manager-node-1)docker-machine env CHM-manager-node-1 | iexdocker swarm init --advertise-addr $manager_ip$mgr_remote= $(docker-machine ip CHM-manager-node-1) + ':2377'$token = $(docker swarm join-token worker -q)docker-machine env CHM-worker-node-1 | iexdocker swarm join --token $token $mgr_remote

และทำที่ Surathani site

## Surathani site
$manager_ip = $(docker-machine ip SRT-manager-node-1)docker-machine env SRT-manager-node-1 | iexdocker swarm init --advertise-addr $manager_ip$mgr_remote= $(docker-machine ip SRT-manager-node-1) + ':2377'$token = $(docker swarm join-token worker -q)docker-machine env SRT-worker-node-1 | iexdocker swarm join --token $token $mgr_remote

ตรวจสอบสถานะของ Swarm node แต่ละ sites ก่อน

docker node ls

3. ทำการ Deploy Portainer Web และ Agent บน Swarm Manager Node ที่ Bangkok site ครับ

docker-machine env BKK-manager-node-1 | iexInvoke-WebRequest -Uri 'https://downloads.portainer.io/portainer-agent-stack.yml' -OutFile portainer-agent-stack.ymldocker stack deploy --compose-file=portainer-agent-stack.yml portainer

4. ทำการ Deploy Portainer Agent บน Swarm Manager Node ที่ ChangMai และ Surathani site ครับ

docker-machine env CHM-manager-node-1 | iexInvoke-WebRequest -Uri 'https://downloads.portainer.io/agent-stack.yml' -OutFile agent-stack.ymldocker stack deploy --compose-file=agent-stack.yml portainer_agent

และทำที่ Surathani site

docker-machine env SRT-manager-node-1 | iexdocker stack deploy --compose-file=agent-stack.yml portainer_agent

ดูสถานะของ Portainer Service ต่างๆ บน Swarm Manager Node แต่ละ sites ครับ

docker service ls

เสร็จเรียบร้อย สำหรับขั้นตอนการสร้าง Docker Hosts และ Deploy Portainer บน Docker Swarm Mode.

ขั้นตอนการเข้าหน้า Web GUI ของ Portainer

ตัว Web GUI ของ Portainer เราได้ทำการ Deploy Service ไว้บน Bangkok site โดยเปิด Listen Port 9000 ไว้

เปิด Browser และเข้าไปที่ IP:9000 ของ Swarm Manager Node แล้วก็กำหนด Username/Password ของ User administrator ดังรูป

creating user administrator for Portainer web gui

เมื่อกำหนดเรียบร้อยแล้ว ก็จะเข้าไปที่หน้า Home ของ Portainer

Home page of Potainer web gui

เมื่อคลิกเข้าไปที่ Endpoints ชื่อ Primary จะเข้าไปที่ Dashboard สำหรับการจัดการ Endpoint หรือ Docker Swarm ของ Bangkok site ครับ

Dashboard of Docker Swarm at Bangkok site.

เพิ่ม Endpoints Swarm Manager Node แต่ละตัวเข้าไปใน Portainer

เข้าไปที่เมนู Endpoints และคลิกที่ปุ่ม + Add endpoint ดังรูป

จากนั้นทำการเลือกและใส่ข้อมูลดังนี้ Environment type: Portainer agent Name: กำหนดชื่อ Engpoint URL: ให้ใส่ IP:Port ของ Swarm Manager Node Public IP: ให้ใส่ IP Public (ใส่ก็ได้ ไม่ใส่ก็ไม่เป็นไรครับ) เสร็จแล้วก็เลือก + Add endpoint

หลังจากนั้นก็เพิ่ม Endpoint สำหรับ Swarm Manager Node ของ Surathani site ด้วยครับ เสร็จแล้วก็จะได้ประมาณนี้

Endpoints lists

สำหรับการเพิ่ม Swarm Manager Node เข้ามาใน Portainer ก็เรียบร้อยครับ

เพิ่ม Endpoints Docker Host แบบ Standalone บน Portainer

จากรูป Diagram ผมมี Docker Host แบบ Standalone อีกตัว เราจะมาลองเพิ่มเป็น Endpoint บน Portainer กัน

เข้าไปเมนู Endpoints > Add endpoint เหมือนเดิมครับ แต่ให้เลือก Environment Type เป็น Docker environment ครับ

สิ่งสำคัญคือตรงการกำหนด TLS files ครับ ไปเอามาจากไหน?

%USERPROFILE%\.docker\machine\machines\Docker-Local-1

หลังจากเพิ่มเสร็จแล้วก็จะได้ประมาณนี้ครับ

ลองเข้าไปดูที่เมนู Home จะเห็นว่ามี Endpoints ที่เราทำการเพิ่มดังรูปครับ

แค่นี้ก็เรียบร้อยสำหรับการทดลอง Deploy Portainer บน Swarm Manager Node และเพิ่ม Endpoints แบบต่างๆ เข้าไป ครับ

ถึงเวลา ลบทิ้งทั้งหมดครับ

งานเลี้ยงต้องมีวันเลิกลา ฮั่นแน่ๆ อย่าลืม งั้นล้างจานครับ ด้วยคำสั่งนี้

docker-machine rm -f $(docker-machine ls -q --filter NAME=-1)

ปล. หวังว่าจะเป็นประโยชน์ สำหรับคนที่สนใจ ไม่มากก็น้อยครับ