บันทึกปัญหาที่เจอเกี่ยวการ build ระบบงานที่พัฒนาด้วย Java กับ Apache Maven
เพิ่มเติมความยากคือ เอาไป run ใน Docker อีก
ปัญหาที่เจอคือ เรื่องการ download dependency/library ใหม่
ในขั้นตอนการ build Docker image จาก Dockerfile
ซึ่งใช้เวลาในการ download นานมาก ๆ
ดังนั้นจึงมาหาวิธีการแก้ไขหน่อย

วิธีการที่ง่ายสุด ๆ คือ ทำการ download นอก Docker

จากนั้นทำการ copy JAR file เข้าไปใน Docker ดังนี้

แต่วิธีไม่สามารถควบคุม JDK ที่ทำการ build JAR file ได้
จึงใช้งาน Docker multi-stage build เข้ามาช่วย

สามารถเขียน Dockerfile ใหม่ได้ดังนี้

  • ขั้นตอนที่ 1 ทำการ build JAR file
  • ขั้นตอนที่ 2 ทำการ copy JAR file มา เพื่อสร้าง image ที่มี JRE

ผลที่ตามมาคือ ช้ามาก ๆ เพราะว่า ต้องทำการ download ใหม่ทุกครั้ง
ยิงเป็น Spring Boot projectด้วยยิ่งช้าไปกันใหญ่
จึงต้องแก้ไขความช้านี้ก็หน่อย

มีวิธีการที่ทำได้ดังนี้

  • ทำการ copy folder .m2 เข้าไปเลย ง่ายแต่ดูแปลก ๆ นะ
  • ทำการเปลี่ยนไปใช้งาน Reverse proxy หรือ Local Package Server สำหรับ Apache Maven Dependency เลย
  • ใช้ Docker buildkit
  • Spring Boot Layer JAR
  • Apache Maven Daemon
  • Mount volume ของ Docker

แต่วิธีการที่ชอบ และ เหมาะกับที่ต้องการคือ การ Mount volume ของ Docker
และวิธีการที่ดีอีกคือ Spring Boot Layer JAR แต่ทำเยอะไปหน่อย

ตัวอย่างการใช้งาน Mount volume ของ Docker

ผลที่ได้คือ ถ้าทำการ build ใหม่ด้วยการเพิ่ม dependency/library ไป
จะไม่ download ของเดิมอีกต่อไป จะ download ที่ของใหม่เท่านั้น
ถ้าใช้ร่วมกับ Local Package Server ก็จะรวดเร็วยิ่งขึ้น

Reference Websites