คู่มือการใช้งาน harbor สำหรับผู้ดูแลระบบ

Harbor คืออะไร

เป็นโครงการ Open Source สำหรับทำ Container Registry โดยตัวมันเองมันความสามารถหลายอย่างไม่ว่าจะเป็น role-based access control หรือจะเป็นสแกน Container Images หาช่องโว่ความปลอดภัย หรือจะเป็นรองรับการ Replicate ไปไว้ Container Registry อีกที่ก็ยังได้ เป็นต้น

ขั้นตอนการใช้งาน Harbor Container Registry

1. การเข้าสู่ระบบ Harbor Console
  • Hostname: https://registry.sawhr.com

  • Username: ....

  • Password: ....

🔹 ภาพประกอบ: หน้าจอ Login

2. การสร้างผู้ใช้งาน
  1. ไปที่ Administrator -> Users เพื่อสร้างผู้ใช้งานสำหรับทีมอื่นที่ต้องการใช้งานระบบ

  2. คลิกที่ New User แล้วกรอกข้อมูลดังนี้

    • Username: devops

    • Password: VMware1!

🔹 ภาพประกอบ: หน้าจอสร้างผู้ใช้งาน

3. การสร้างโปรเจค
  1. ไปที่ Project เพื่อสร้างโปรเจคใหม่

  2. คลิกที่ New Project

  3. กรอกข้อมูล Project Name: devops

🔹 ภาพประกอบ: หน้าจอสร้างโปรเจค

4. การกำหนดสิทธิ์ให้กับโปรเจค
  1. เข้าไปที่โปรเจคที่สร้าง

  2. ไปที่แท็บ Members

  3. คลิกที่ +User

  4. พิมพ์ชื่อผู้ใช้: devops

  5. กำหนดสิทธิ์ Role: Project Admin

🔹 ภาพประกอบ: หน้าจอการกำหนดสิทธิ์ให้กับโปรเจค

5. การเข้าสู่ระบบ Harbor จาก Docker Client ทำได้หลายวิธีตามตัวอย่างต่อไปนี้:
วิธีที่ 1: Login โดยใช้คำสั่งปกติ
$ docker login registry.sawhr.com 
Username: myusername
Password: mypassword
Login Succeeded
วิธีที่ 2: Login โดยระบุ Username และ Password ในคำสั่ง
$ docker login -u myusername -p mypassword registry.sawhr.com 
Login Succeeded
วิธีที่ 3: Login โดยใช้ Password จาก stdin (แนะนำสำหรับความปลอดภัยสูงสุด)
$ echo mypassword | docker login -u myusername --password-stdin registry.sawhr.com
Login Succeeded

หมายเหตุ: หากพบข้อผิดพลาด "x509: certificate signed by unknown authority" ให้นำ Root CA ของเครื่อง Harbor มาติดตั้งที่เครื่องที่จะ Login

6. การ Tag Container Images

การ Tag Container Images หมายถึงการกำหนดชื่อหรือแท็กให้กับ Docker image เพื่อให้สามารถระบุและใช้ได้ง่ายในภายหลัง โดยทั่วไปแล้วเมื่อเราดาวน์โหลดหรือสร้าง image ในเครื่องของเรา เราจะต้องทำการตั้งชื่อหรือแท็กให้เหมาะสมก่อนที่จะทำการ push ขึ้นไปยัง Harbor หรือ Docker registry อื่นๆ

วิธีการใช้คำสั่ง docker tag

คำสั่ง docker tag ใช้ในการสร้างชื่อใหม่หรือแท็กให้กับ image ที่มีอยู่แล้ว โดยมีรูปแบบการใช้งานดังนี้:

$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • SOURCE_IMAGE[:TAG]: คือชื่อและแท็กของ image ที่ต้องการทำการ tag ใหม่ (ถ้าไม่ระบุ TAG ระบบจะใช้ "latest" โดยอัตโนมัติ)

  • TARGET_IMAGE[:TAG]: คือชื่อใหม่และแท็กที่เราต้องการให้กับ image ที่เรา tag

ตัวอย่าง
  1. สมมุติว่าเรามี image ที่ชื่อว่า nginx:alpine บนเครื่องของเรา ซึ่งเป็น image ที่ใช้ Nginx เวอร์ชัน Alpine

  2. เราต้องการจะ tag image นี้ใหม่ เพื่อที่จะ push ขึ้นไปยัง Harbor registry ที่อยู่ที่ registry.sawhr.com ในโปรเจค devops ชื่อของ image ที่เราจะใช้ใน Harbor จะเป็น mynginx:alpine

เราสามารถใช้คำสั่ง:

$ docker tag nginx:alpine registry.sawhr.com/devops/mynginx:alpine

คำสั่งนี้จะทำการ tag image nginx:alpine ใหม่ให้กลายเป็น registry.sawhr.com/devops/mynginx:alpine

อธิบายคำสั่ง:
  • nginx:alpine: คือ SOURCE_IMAGE (ชื่อเดิมของ image ที่เราใช้ในเครื่อง)

  • registry.sawhr.com/devops/mynginx:alpine: คือ TARGET_IMAGE ที่เราจะใช้ในการ push ขึ้นไปยัง Harbor registry

7. การ Push Container Images ขึ้น Harbor

การ Push Container Images ขึ้น Harbor คือการอัพโหลดหรือส่ง Docker image ที่เราได้สร้างหรือแก้ไขไว้ ไปเก็บใน Harbor Container Registry เพื่อให้สามารถเข้าถึงและใช้งานได้จากที่อื่นหรือแชร์ให้คนอื่นใช้งานได้ง่ายๆ

วิธีการใช้คำสั่ง docker push

คำสั่ง docker push ใช้ในการส่ง Docker image จากเครื่องของเราไปยัง Docker registry (เช่น Harbor) ซึ่งในที่นี้เราจะอัพโหลด image ไปที่ registry.sawhr.com ในโปรเจค devops และมีชื่อว่า mynginx:alpine

$ docker push registry.sawhr.com/PROJECT/REPOSITORY[:TAG]
  • registry.sawhr.com: คือ URL ของ Harbor registry ที่เราใช้งาน

  • PROJECT: คือชื่อโปรเจคที่เราต้องการอัพโหลด image ไปยังโปรเจคนี้

  • REPOSITORY: คือชื่อของ image ที่เราต้องการจะอัพโหลด

  • TAG (ไม่จำเป็น): คือแท็กของ image เช่น latest, alpine, หรือชื่อเวอร์ชันของ image นั้นๆ ถ้าไม่ระบุจะใช้ latest โดยอัตโนมัติ

ตัวอย่าง
  1. สมมุติว่าเราได้สร้าง image ใหม่หรือทำการ tag image ไว้แล้วในเครื่องชื่อว่า nginx:alpine และเราได้ทำการ tag ใหม่เป็น registry.sawhr.com/devops/mynginx:alpine

  2. ตอนนี้เราต้องการจะ push image ที่เรา tag ขึ้นไปยัง Harbor registry ที่โปรเจค devops

เราสามารถใช้คำสั่งดังนี้:

$ docker push registry.sawhr.com/devops/mynginx:alpine

คำสั่งนี้จะทำการ push image mynginx:alpine ไปยัง Harbor registry ที่โปรเจค devops และทำให้ image นี้พร้อมใช้งานจากทุกที่ที่มีการเข้าถึง Harbor registry นี้

8. การตรวจสอบ Container Images
  1. ไปที่ Projects -> devops

  2. ตรวจสอบว่า Container Images ได้ถูก Push เข้ามาในระบบแล้วหรือไม่

9. การ Pull และ Run Container Images จาก Harbor

การ Pull และ Run Container Images จาก Harbor เป็นขั้นตอนที่ช่วยให้เราสามารถดึง Docker image ที่เก็บไว้ใน Harbor มาใช้งานบนเครื่องของเรา และสร้าง Container จาก image ที่เราได้ดึงมา เพื่อให้เราสามารถทำงานกับแอปพลิเคชันใน container ได้

การ Pull Image จาก Harbor

การ Pull image หมายถึงการดาวน์โหลด Docker image จาก Harbor registry มายังเครื่องของเรา เพื่อให้เราสามารถนำไปใช้งานต่อไปได้

$ docker pull registry.sawhr.com/PROJECT/REPOSITORY[:TAG]
  • registry.sawhr.com: คือ URL ของ Harbor registry ที่เราต้องการดึง image มาจาก

  • PROJECT: คือชื่อโปรเจคที่เก็บ image ไว้

  • REPOSITORY: คือชื่อของ image ที่เราต้องการดึงมา

  • TAG (ไม่จำเป็น): คือแท็กของ image เช่น latest, alpine หรือเวอร์ชันต่างๆ (ถ้าไม่ระบุ จะดึงเวอร์ชัน latest โดยอัตโนมัติ)

ตัวอย่าง

สมมุติว่าเราต้องการดึง Docker image ที่ชื่อว่า mynginx:alpine จากโปรเจค devops ใน Harbor registry registry.sawhr.com

เราสามารถใช้คำสั่ง:

$ docker pull registry.sawhr.com/devops/mynginx:alpine

คำสั่งนี้จะทำการ ดึง image mynginx:alpine จาก Harbor registry มายังเครื่องของเรา

การ Run Container จาก Image ใน Harbor

หลังจากที่เรา Pull image มาแล้ว เราสามารถใช้คำสั่ง docker run เพื่อสร้าง Container จาก image ที่เราได้ดึงมา และให้มันเริ่มทำงานทันที

$ docker run registry.sawhr.com/PROJECT/REPOSITORY[:TAG]
  • registry.sawhr.com: คือ URL ของ Harbor registry

  • PROJECT: คือชื่อโปรเจคที่เก็บ image ไว้

  • REPOSITORY: คือชื่อของ image ที่เราต้องการใช้

  • TAG: คือแท็กของ image (ถ้าไม่ระบุจะใช้ latest โดยอัตโนมัติ)

ตัวอย่าง

หลังจากที่เราได้ Pull image mynginx:alpine มาแล้ว ตอนนี้เราต้องการจะ Run image นี้ในรูปแบบของ Container โดยใช้คำสั่ง:

$ docker run registry.sawhr.com/devops/mynginx:alpine

คำสั่งนี้จะทำการ Run container โดยใช้ image mynginx:alpine จาก Harbor registry และ container นี้จะเริ่มทำงานในเครื่องของเรา

ข้อควรระวัง

  1. ควรเปลี่ยนรหัสผ่านเริ่มต้นของ admin โดยการแก้ไขไฟล์ harbor.yaml

  2. หากไม่ต้องการตั้งค่า SSL และต้องการใช้ insecure registry สำหรับการทดสอบ สามารถอ้างอิงข้อมูลเพิ่มเติมได้จากเอกสารอ้างอิง

สรุป

Harbor Container Registry เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจัดการ Container Images ภายในองค์กร โดยมีฟีเจอร์หลักอย่างการจัดการผู้ใช้งาน การควบคุมการเข้าถึงตามบทบาท (RBAC) และการจัดการโครงการ นอกจากนี้ยังมีฟีเจอร์อื่นๆ อีกมากมาย เช่น การจัดการบัญชีเซิร์ฟเวอร์ และการเก็บขยะ (garbage collection) ซึ่งจะช่วยให้การทำงานกับ Container มีประสิทธิภาพมากยิ่งขึ้น

Did you find this article useful?