DevOps 101 Nexus Repository

สวัสดีครับ วันนี้ผมจะมาพูดถึง tools อีกตัวนึง ที่สำคัญมาก ในการทำ CI/CD นะครับ
นั่นก็คือ Repository ที่เอาไว้เก็บของต่างๆ ของเรา ไม่ว่าจะเป็น docker images, libs, หรือ files binary ต่างๆ ที่นิยมกัน ก็จะมี JFrog Artifactory กับ Nexus วันนี้ ผมจะมาพูดถึงเจ้า Nexus กันนะครับ ..

รายละเอียด เพิ่มเติม https://www.sonatype.com/products/repository-pro

ความสามารถของเจ้า Nexus นั้นมีมากมายมากครับ และมี version ที่เป็น OSS อีกด้วย

ส่วนตัวที่ผมใช้ ก็จะใช้เป็น docker repository กับ docker proxy เพื่อใช้งาน ในองค์กร ทั้งแบบ On-Prem และแบบ Public ครับ หลายๆ ท่านอาจจะคุ้นกับ docker hub จะคล้ายๆ กันเลยครับ ..

อธิบายเพิ่มเติมนะครับ

Docker Repository = ที่เก็บ docker images ของเราครับ มองว่าเป็น docker hub ส่วนตัว ประมาณนั้นครับ ..
Docker Proxy = มองว่าเป็น proxy ที่ไปดึง docker images จากที่อื่นอีกที เช่นไปดึงจาก docker hub อะไรพวกนี้ .. ที่ต้องมี docker proxy นอกเหนือจากช่วย caching docker images แล้ว บางที่ network ภายใน ไม่สามารถ access public โดยตรงได้ ก็เลยต้องใช้เป็น docker repository (docker proxy) ภายในแทนครับ ..

มาดูวิธีการติดตั้งกันครับ ในที่นี่ จะติดตั้งแบบใช้ docker นะครับ (อันนี้ตามสะดวกเลยครับ)

1. Create directory nexus-data

mkdir ~/nexus-data

2. Docker Run

docker run -d -p 8081:8081 -p 5000:5000 -p 5001:5001 --name nexus -v ~/nexus-data:/nexus-data sonatype/nexus3

ที่เรา expose ออกมา 3 port ก็เพื่อเอาไว้ จัดการเรื่องต่างๆ ดังนี้ครับ
– Port 8081 สำหรับหน้า Nexus Dashboard
– Port 5000 สำหรับ docker pull
– Port 5001 สำหรับ docket push

3. จากนั้นเข้า หน้า Nexus Dashboard ด้วย IP:PORT

http://localhost:8081/

4. จะขึ้นหน้า ให้เรา Login จาก password ที่ได้จาก file admin.password

cat ~/nexus-data/admin.password 
89e5664b-f748-49e4-a7dc-cdcc3febdd6b

5. เมื่อทำการ update new password เรียบร้อยแล้ว จะเข้ามาที่หน้าแรกของ nexus ให้คลิกที่ รูปเฟือง แล้วเลือก Repositories > Create repositories

Create repositories

6. จะเห็นว่า มีให้เราเลือกเยอะแยะมากมาย ว่าจะ create repositories ประเภทไหนกันบ้าง ..

Select Recipe

ในที่นี้ ผมจะเลือกเป็น docker (hosted) เพื่อเอาไว้เก็บ private docker images ที่เอาไว้ใช้กันเองภายในองค์กร หน่วยงาน แทน public docker repository พวก docker hub ..

7. เลือก Create repository: docker (hosted) ใส่ค่าต่างๆ ประมาณนี้

Name: docker-private
HTTP: 5001 (Port 5001 จะเอาไว้ใช้ docker push)

Create repository: docker (hosted)

8. ต่อมาเลือก Create repository: docker (proxy) ใส่ค่าต่างๆ ประมาณนี้

Name: docker-hub
Remote storage: https://registry-1.docker.io
Docker Index: Use Docker Hub

Create repository: docker (proxy)

9. จากนั้นเลือก Create repository: docker (group) เพื่อรวม docker (hosted) และ docker (proxy) เข้าด้วยกัน ใส่ค่าต่างๆ ประมาณนี้

Name: docker-group
HTTP: 5000 (Port 5000 จะเอาไว้ใช้ docker pull)

Create repository: docker (group)

ตรงด้านล่าง ในส่วนของ Group

Member repositories: ให้คลิกเลือก docker-private และ docker-hub มาอยู่ในส่วนของ Members

Member repositories

*** เพิ่มเติม ***

สำหรับ docker repository ที่ URL ไม่มี SSL (https) เราต้องทำการ set เพิ่มเติม ในส่วนของ Docker Desktop ให้รองรับ insecure-registries โดยไปที่ Preferences > Docker Engine จากนั้น เพิ่มส่วนนี้ลงไป ..

“insecure-registries”: [“IP:5000”, “IP:5001”],

โดย IP ก็คือ IP ของ Server เรา หรือถ้าเป็น domain ก็ใส่ ชื่อ domain ลงไป

insecure-registries

ในกรณีที่เรา ต้องการ ให้ docker pull ได้แบบ anonymous ไม่ต้องมีการ login
ให้มาติ๊กที่ Allow anonymous docker pull: ในส่วนของ docker-group ครับ

Allow anonymous docker pull:

จากนั้น ให้ไปที่ Realms เลือก Docker Bearer Token Realm เป็น Active

Docker Bearer Token Realm

มาถึงวิธีการทดสอบครับ

ให้เราลอง ทดสอบง่ายๆ ประมาณนี้

# Docker Login
docker login http://IP:5000
docker login http://IP:5001
# Docker Pull
docker pull IP:5000/nginx
# Docker Build
docker build -t IP:5000/demo-app .
# Docker Tag
docker tag IP:5000/demo-app IP:5001/demo-app
# Docker Push
docker push IP:5001/demo-app 
# Docker Run
docker run -p 5000:5000 IP:5000/demo-app 

เพียงเท่านี้ เราก็จะได้ docker repository ของเราเองมาใช้แล้วครับ 🙂

แล้วพบกับ การแนะนำ tools ต่างๆ ที่จำเป็น และมีประโยชน์ สำหรับ DevOps (CI/CD) ในตอนต่อไปเร็วๆ นี้ครับ ..

DevOps CI/CD คืออะไร?

CICD Flow

เนื่องในโอกาส ที่มาเริ่มงานใหม่ ด้าน Banking Technology (FinTech) ได้ครบ 1 เดือน ในส่วนของ DevOps เลยจะมาเขียนเล่าว่า การทำงานของ DevOps มีอะไรบ้าง CI/CD คืออะไร? ทำไมสมัยนี้ ถึงเป็นคำที่นิยมใช้กัน ในสายงาน software developer ..

DevOps จริงๆ แล้วเป็นคำใหม่ ที่เอาคำว่า Developer กับ Operator มารวมกัน สมัยก่อน Developer เป็นคนพัฒนา code แต่ไม่มีสิทธิ deploy code ขึ้นใช้งานเอง ต้องมีทีม Operator มาทำการ deploy ให้อีกทีม ซึ่งทั้ง 2 ทีมนี้เป็นคนละทีมกัน ทำให้การทำงานยุ่งยาก เกิดความผิดพลาด และใช้เวลานาน ในการ deploy แต่ละครั้ง ..

CICD

CI/CD (Continuous Integration, Continuous Delivery) เป็นกระบวนการในการทำงาน ตั้งแต่การ Plan -> Code -> Build -> Test -> Release -> Deploy -> Operate -> Monitor หรือบางทีเรียกสั้นๆ ว่า Pipeline ซึ่งสมัยนี้ ก็มี tools ต่างๆ ที่ทำหน้าที่พวกนี้ เยอะมากทั้ง On-Premise และ On-Cloud ที่เรารู้จักกันดี ก็น่าจะเป็น Jenkins ที่เข้ามามีบทบาทมาก ในการทำ CICD ..

ขอบเขตของการทำงาน ของ DevOps แต่ละที่เท่าที่ผมได้เคยลงไปสัมผัส จะไม่เหมือนกัน ขึ้นอยู่ว่า scope ที่ทำได้ มีระดับไหน บางที่ ก็คือทำตั้งแต่ต้นน้ำ ยันปลายน้ำ คือตั้งแต่วางแผน สร้าง Infrastructure เอง ทำ ENV ให้ Dev ใช้ เขียน Pipeline ตลอดจน ทำ Load Test, Performance Test, Security Test และระบบ Monitor & Alert เองทั้งหมด แบบนี้ก็ดีตรงที่จะรู้และเข้าใจ ในแต่ละส่วนอย่างดี ทำให้งานออกมามีประสิทธิภาพ ควบคุมได้ แต่ถ้ามี หลายๆ Project ก็คงทำแบบนี้ไม่ไหว ..

บางที่ DevOps จะมีหน้าที่แค่ทำระบบให้ Dev มาใช้งาน แต่จะไม่มีสิทธิ ในการทำอย่างอื่นเอง แบบด้านบน แบบนี้ ก็จะทำให้ ควบคุมอะไรไม่ได้ทั้งหมด แต่ถ้ามีหลายๆ Project ก็จะรองรับการทำงาน ได้เต็มที่ ..

สำหรับแนวคิด และ Tools ในการทำงานแบบ DevOps (CI/CD) ไม่มีแบบไหนผิด แบบไหนถูก ขึ้นอยู่กับการเอามาประยุกต์ใช้งาน ให้เหมาะสมกับงานของเรา องค์กรของเรา เพื่อทำให้งาน เกิดประสิทธิภาพสูงสุด ตอบโจทย์ผู้ใช้งาน product ของเราให้ดีที่สุด .. และที่สำคัญ ต้อง Monitor ได้ ต้องมี Dashboard เอาไว้ Tracking Metric ต่างๆ ได้ ..

สำหรับใครที่กำลังหางาน DevOps สมัครกันเข้ามาได้ครับ รับรองว่า งานท้าทาย สนุก แน่นอนครับ 🙂
https://th.jobsdb.com/th/th/job/devops-engineer-300003001969662