Jib เป็นเครื่องมือช่วยสร้าง Docker และ OCI image
สำหรับระบบงานที่พัฒนาด้วย Java
โดยที่ไม่ต้องติดตั้งหรือมี Docker deamon
รวมทั้งไม่ต้องเขียน Dockerfile อีกด้วย
โดยที่ Jib จะมี plugin มาให้ทั้ง Apache Maven และ Gradle เลย
หรือจะใช้งานผ่าน Jib-CLI ก็ได้
เป้าหมายของ Jib ประกอบไปด้วย
- Fast คือทำงานได้อย่างรวดเร็ว จะทำการ build เฉพาะ Layer ที่เปลี่ยนแปลงเท่านั้น โดยจะแยก layer ต่าง ๆ ไว้ให้คือ Dependency, Java class เป็นต้น ส่วน default base image จะใช้จาก Distroless/java
- Reproducible ถ้าไม่มีการเปลี่ยนแปลงใด ๆ ก็จะไม่มีการ build อะไรให้ในขั้นตอนการสร้าง image
- Deamonless ลด dependency ต่าง ๆ ของ CLI ลงไป ทำให้สามารถใช้งานผ่าน build tool เช่น Apache Maven และ Gradle ได้เลย ไม่ต้องมี Docker deamon อีกด้วย
แสดงขั้นตอนการทำงานของ Jib เมื่อเทียบกับ Docker workflow ปกติ
Docker workflow
Jib workflow
จะเห็นได้ว่า ช่วยให้เราพัฒนาและใช้งานได้ง่ายขึ้น
รวมทั้งง่ายต่อการ integrate ไปกับ pipeline ของ CI/CD อีกด้วย
แต่แนะนำว่า ควรเข้าใจการทำงานของทั้ง 2 workflow ก่อน
ตัวอย่างการใช้งาน Jib ร่วมกับ Spring Boot application
โดยที่สร้าง project ในรูปแบบ Gradle project
ให้เพิ่ม plugin ของ Jib เข้าไปในไฟล์ build.gradle ดังนี้
จากนั้นทำการ build Image และ push ไปยัง Image registry
ที่เราต้องการทั้ง public และ private ได้เลย
ยกตัวอย่างเช่นทำการ push Image ไปยัง Docker Hub
ต้องทำการ configuration username และ password ก่อน
หรือกำหนดผ่าน secret/credential tools (Docker credential helper) ต่าง ๆ ได้
เช่น
- osxkeychain
- secretservice
- wincred
- pass
ตัวอย่างการใช้ username/password ง่าย ๆ
[gist id="c97b3e6aecc9c1bd9369154fc911ab37" file="build2.gradle"]จากนั้นใช้คำสั่ง run ดังนี้
[gist id="c97b3e6aecc9c1bd9369154fc911ab37" file="1.txt"]หรือถ้าต้องการ build ไปยัง Docker deamon ก็ใช้คำสั่ง
[gist id="c97b3e6aecc9c1bd9369154fc911ab37" file="2.txt"]เพียงเท่านี้ก็สามารถใช้งาน Jib แบบง่าย ๆ ได้แล้ว