ในตอนนี้ทาง Spring  ได้ปล่อย Spring Boot 2.3.0.M1 ออกมา
มีความสามารถที่น่าสนใจคือ

  • สร้าง Docker image ด้วย Cloud Native Buildpacks แล้ว
  • ทำการ optimized layer  ต่าง ๆ ใน JAR file เพื่อให้สร้างได้ดีและเร็วขึ้น

มาดูว่าใช้งานกันอย่างไรบ้าง

เริ่มต้นด้วยการใช้งานร่วมกับ Buildpacks

โดยจะเพิ่ม task ใหม่เข้ามาทั้ง Apache Maven และ  Gradle

  • Apache maven คือ spring-boot:build-image
  • Gradle คือ bootBuildImage

เพื่อให้เราสร้าง Docker image ได้เลย
จะช้าในครั้งแรกเพราะว่า ทำการดึง base image
ชื่อว่า cloudfoundry/run:base-cnb จาก Docker Hub
จากนั้นก็เข้าสู่ขั้นตอนการ build ของ buildpacks
ตัวอย่างของ Apache Maven

เมื่อได้ Docker image มาแล้ว ก็นำไปสร้าง container ต่อได้เลย
น่าจะทำให้ชีวิตง่ายขึ้นเยอะ

แต่ความสามารถนี้ ตอนนี้ยังไม่สนับสนุนบน Windows นะ !!
มาถึงตรงนี้น่าจะเป็นจุดเริ่มต้นที่ดี
ว่าในอนาคตจะเดินไปทิศทางใดบ้าง

ต่อมา ลองสร้าง  Layered JAR กัน

ทำการแก้ไข configuration นิดหน่อย
ตัวอย่างใช้งาน Apache Maven ดังนั้นจึงแก้ไขในไฟล์ pom.xml ดังนี้

จากนั้นทำการสร้างไฟล์ JAR ใหม่ 
ทำการดูได้ด้วยว่า แต่และ layer เป็นอย่างไร รวมทั้ง extract ออกมาได้ดังนี้

เมื่อ extract ออกมาแล้วจะมี folder ต่าง ๆ ออกมาดังนี้

  • Dependencies จะเก็บ library ทั้งหมดที่ระบบงานใช้งาน ซึ่งเยอะมาก ๆ ที่สำคัญจะไม่ค่อยเปลี่ยน
  • Application จะเก็บ class file ต่าง ๆ ของระบบงานที่เราเขียนขึ้นมา พร้อมทั้ง spring loader

Layer ต่าง ๆ ของไฟล์ JAR แล้ว จะมีทั้งที่เป็น static และ dynamic 
ถ้าเราจัดการดี ๆ แล้ว จะช่วยให้การ build เร็วขึ้นอย่างมาก
และเราสามารถสร้าง Docker image
ด้วยการนำ layer ต่าง ๆ มารวมกันใน Dockerfile ของเราได้เลย
ยกตัวอย่างเช่น

ลองใช้งานดูครับ สะดวกขึ้นเยอะเลย

Reference Websites