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

ใช้ Docker Desktop เบื่อแล้วใช่มั้ย วันนี้เราจะมาแนะนำการใช้ Portainer จัดการ Container กัน
Feature Image

สวัสดีครับ วันนี้เราจะมาใช้ Portainer จัดการ Container กัน จะเป็นอย่างไรนั้นเรามาดูกัน

สำหรับใครที่ยังไม่รู้จักว่า Docker คืออะไร สามารถดูรายละเอียดตามด้านล่างนี้เลย

เอาล่ะ เรามาเริ่มเนื้อหากันเลย เราจะมาพูดถึงก่อนว่า 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 เลย

Docker Desktop Containers

ไปดู Volume กันเลย

Docker Desktop Volumes

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

Docker Desktop Volumes Data

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

เอาล่ะ ตรวจสอบเรียบร้อยแล้ว เราจะเริ่มใช้งานกัน ไปที่ https://localhost:9443 ต้องเป็น https เท่านั้นนะ

Portainer Timeout

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

Portainer create admin

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

เอาล่ะ พอลงทะเบียนเสร็จแล้ว จะเข้ามาที่หน้า Dashboard ตามรูปเลย

Portainer Home

เสร็จแล้วกับการติดตั้ง แค่นี้ก็ใช้งานได้แล้ว ต่อไปเราจะมาดูการ Remote ควบคุม Container บนเครื่องเราเอง จะเป็นอย่างไร เรามาดูกัน

การ Remote ควบคุม Container บนเครื่องเราเอง

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

ขั้นแรกเลย ให้คลิก Get Started ตามรูปด้านบนเลย จะได้หน้าตาดังรูปเลย

Portainer Home

ถ้าใครไม่ขึ้น ไม่ต้องแปลกใจ อาจต้องรอสักครู่ หรือถ้าไม่ขึ้นเลยอาจจะเป็นเรื่อง docker.sock ที่เราใส่ตอน Mount Volume ด้านบน

-v /var/run/docker.sock:/var/run/docker.sock

ทำต่อกันเลย ให้คลิกไปที่ Environment ทางด้านซ้าย

Portainer click environments

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

Portainer click Add environment button

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

Portainer select Docker Standalone and click Start Wizard

เมื่อเข้ามา จะมีให้เลือกทั้งหมด 4 แบบ ส่วนนี้ขอยังไม่อธิบายนะ เดี๋ยวจะยาว ในที่นี้จะขอเลือกเป็น Socket เป็นการต่อบนเครื่องเรา จะเห็นว่าเค้าให้เราใส่ Volume เพิ่มไป

-v "/var/run/docker.sock:/var/run/docker.sock"
Portainer select Socket

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

Portainer create name and click connect button

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

Portainer Home

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

Portainer Detail Environments

ในหน้านี้จะมีคำว่า 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

ทีนี้เข้าไปดูอีกรอบ

Portainer Detail Environments

จะเห็นว่า 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 ทางด้านซ้ายเลย

Portainer Registries

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

Portainer click Add registry

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

Portainer select Dockerhub

จากรูปด้านบน เราจะเห็นว่ามีให้ใส่ 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

Docker Hub click dropdown and click Account Settings

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

Docker Hub click tab Security and click New Access Token button

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

Docker Hub input Access Token Description and select account permission, click generate button

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

Docker Hub copy access token

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

Portainer input and click Add registry

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

Portainer Registries

เอาล่ะ เสร็จไปแล้วกับการใช้ Portainer จัดการ Container กัน เป็นยังไงกันบ้าง คิดว่าถ้าได้ลองแล้ว คิดว่าน่าจะมีประโยชน์กับผู้อ่านไม่มากก็น้อย ที่เขียนบทความนี้ขึ้นมาเพราะต้องการเขียนเรื่อง Docker Network แต่ตัว Docker Desktop ไม่มี เลยต้องมาที่ Portainer ก่อน เวลาไปเรื่อง Docker Network จะได้เข้าใจได้ง่าย สำหรับวันนี้ขอจากกันไปก่อน สวัสดีครับ

ช่องทางการติดต่อ

Email: [email protected]

Website: https://blog.tichaky.com/

Facebook: https://www.facebook.com/tichaky

Youtube: https://www.youtube.com/@tichaky_diary

Post navigation

เริ่มต้นใช้งาน Docker กัน Part 2

DigitalOcean มีอะไรให้ใช้บ้าง

รีวิว Low Code Appsmith กัน

ทำความรู้จักกับ Freqtrade บอทเทรดคริปโต