αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αž€αž»αž„αžαžΊαž“αŸαžšαž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŠαŸ‚αž›αž–αŸαž‰αž…αž·αžαŸ’αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžœαŸαž…αžαŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ…αž€αžΆαž“αŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ”

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring BootαŸ–

  • αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžš Docker,
  • αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– OCI αž–αžΈαž”αŸ’αžšαž—αž–αžŠαŸ„αž™αž”αŸ’αžšαžΎ Cloud-Native Buildpack,
  • αž“αž·αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžšαžΌαž”αž—αžΆαž–αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž•αŸ’αž“αŸ‚αž€αž“αŸƒ JAR αž‘αŸ…αž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž–αž αž»αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αŸ”

 αž§αž‘αžΆαž αžšαžŽαŸαž€αžΌαžŠ

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž˜αžŠαŸ„αž™αž§αž‘αžΆαž αžšαžŽαŸαž€αžΌαžŠαž€αžΆαžšαž„αžΆαžš αž“αŸ…αž›αžΎ GitHub .

αžœαžΆαž€αŸ’αž™αžŸαž–αŸ’αž‘αž€αž»αž„αžαžΊαž“αŸαžš

αž™αžΎαž„αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αžΆαž€αŸ’αž™ container αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αŸ–

  • αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ– αž―αž€αžŸαžΆαžšαž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž‡αžΆαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαžŸαžΆαž„αžŸαž„αŸ‹αŸ”
  • αž€αž»αž„αžαžΊαž“αŸαžšαŸ– αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ”
  • αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžšαŸ– αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸαž˜αž·αž“αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαŸ”
  • αž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαŸ– αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  • αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈαž€αž»αž„αžαžΊαž“αŸαžšαŸ– αž‘αžΈαžαžΆαŸ†αž„αž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž– αž“αž·αž„αž…αŸ‚αž€αž…αžΆαž™αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ”
  • αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš OCIαž‚αŸ†αž“αž·αžαž•αŸ’αžαž½αž…αž•αŸ’αžαžΎαž˜αž”αžΎαž€αž€αž»αž„αžαžΊαž“αŸαžš (OCI) αž‚αžΊβ€‹αž‡αžΆβ€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αž’αž—αž·αž”αžΆαž›αž€αž·αž…αŸ’αž…β€‹αž”αžΎαž€αž…αŸ†αž αžšβ€‹αžŸαŸ’αžšαžΆαž›β€‹αžŠαŸ‚αž›β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αž€αŸ’αž“αž»αž„β€‹αž˜αžΌαž›αž“αž·αž’αž·β€‹αž›αžΈαž“αž»αž…αŸ” αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαžΌαž”αž—αžΆαž– OCI αž€αŸ†αžŽαžαŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž§αžŸαŸ’αžŸαžΆαž αž€αž˜αŸ’αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž§αž”αž€αžšαžŽαŸαžŸαžΆαž„αžŸαž„αŸ‹αžŽαžΆαž˜αž½αž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž™αžΎαž„αžšαž»αŸ†αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžš αž αžΎαž™αž”αŸ„αŸ‡αž•αŸ’αžŸαžΆαž™αžšαžΌαž”αž—αžΆαž–αž“αŸ„αŸ‡αž‘αŸ…αž€αžΆαž“αŸ‹αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αŸ” αžšαž™αŸˆαž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαž‘αžΆαž‰αž™αž€αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ αž–αž“αŸ’αž›αžΆαžœαžΆ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αžœαžΆαŸ”

αž€αŸ†αžŽαŸ‚ 2.3 αž“αŸƒ Spring Boot αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– OCI αŸ”

Dockers αž‚αžΊαž‡αžΆαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž‡αžΆαž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αž αž αžΎαž™αž™αžΎαž„αž”αŸ’αžšαžΎ Docker αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžšαžΆαž›αŸ‹αž―αž€αžŸαžΆαžšαž™αŸ„αž„αž€αž»αž„αžαžΊαž“αŸαžšαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αžŸαŸ†αžŠαŸ…αž›αžΎ Docker αŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžαžΆαž˜αžœαž·αž’αžΈαž”αŸ’αžšαž–αŸƒαžŽαžΈ

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ…αž―αž€αžŸαžΆαžš Docker αŸ”

αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“ αž αžΎαž™αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž―αž€αžŸαžΆαžš Docker αž…αž˜αŸ’αž›αž„αž―αž€αžŸαžΆαžš JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒαžšαžΌαž”αž—αžΆαž– JRE αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž›αžΎ αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ Initializr αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ weblombokΠΈ actuator. αž™αžΎαž„αž€αŸαž€αŸ†αž–αž»αž„αž”αž“αŸ’αžαŸ‚αž˜αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž€αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹ API αž•αž„αžŠαŸ‚αžšαŸ” GETαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Dockerfile

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž•αŸ’αž‘αž»αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ Dockerfile:

FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]

αž―αž€αžŸαžΆαžš Docker αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž–αžΈ adoptopenjdkαžαžΆαž„αž›αžΎαžŠαŸ‚αž›αž™αžΎαž„αž…αž˜αŸ’αž›αž„αž―αž€αžŸαžΆαžš JAR αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αžΎαž€αž…αŸ’αžšαž€αŸ” 8080αžŠαŸ‚αž›αž“αžΉαž„αžŸαŸ’αžαžΆαž”αŸ‹αž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎ Maven ឬ Gradle αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž”αŸ’αžšαžΎ Maven:

mvn clean package

αžœαžΆαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ†αž”αŸ’αž›αŸ‚αž„ JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž“αŸαŸ‡αž‘αŸ…αž‡αžΆαžšαžΌαž”αž—αžΆαž– Docker αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ Docker αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžš

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αžŠαžΆαž€αŸ‹αž―αž€αžŸαžΆαžš JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž“αŸαŸ‡αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ docker buildαž–αžΈαžαž root αžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž˜αžΆαž“ Dockerfile αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž˜αž»αž“αž“αŸαŸ‡αŸ–

docker build  -t usersignup:v1 .

αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–

docker images 

αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž›αžΎαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” usersignupαžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“, adoptopenjdkαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš Docker αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

REPOSITORY          TAG                 SIZE
usersignup          v1                  249MB
adoptopenjdk        11-jre-hotspot      229MB

αž˜αžΎαž›αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž’αž»αž„

αžαŸ„αŸ‡αž˜αžΎαž›αž‡αž„αŸ‹αž“αŸƒαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ αž§αž”αž€αžšαžŽαŸ  αž˜αž»αž‡αž‘αžΉαž€ αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ–

dive usersignup:v1

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž›αž‘αŸ’αž’αž•αž›αž–αžΈαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ DiveαŸ– 

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž‘αŸ†αž αŸ†αžšαžΌαž”αž—αžΆαž–αŸ” αž™αžΎαž„αž…αž„αŸ‹αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ†αž αŸ†αž“αŸƒαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ Buildpack

αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ†αž‘αžΎαž„ (αž€αž‰αŸ’αž…αž”αŸ‹αžŸαžΆαž„αžŸαž„αŸ‹) αž‚αžΊαž‡αžΆαž–αžΆαž€αŸ’αž™αž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαŸ„αž™ Platform as a Service (PAAS) αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž’αŸ„αž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαž–αžΈαž€αžΌαžŠαž”αŸ’αžšαž—αž–αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ Heroku αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2011 αž αžΎαž™αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž–αŸαž›αž“αŸ„αŸ‡αž˜αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž˜αŸαžαžŠαŸ„αž™ Cloud Foundry, Google App Engine, Gitlab, Knative αž“αž·αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ€αžαŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž–αž–αž€

αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Buildpack αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž‚αžΊαž“αŸ„αŸ‡αŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαžΌαž”αž—αžΆαž–αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžŽαŸ’αžαžΆαž› (αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹) αž“αž·αž„αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž‘αŸ…αž‚αŸ’αžšαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž„αžŸαž„αŸ‹αŸ”

αž€αž‰αŸ’αž…αž”αŸ‹αžŸαžΆαž„αžŸαž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž™αŸ‰αžΆαž„αžαžΉαž„αžšαžΉαž„αž‘αŸ…αž“αžΉαž„αžœαŸαž‘αž·αž€αžΆαŸ” Cloud-Native Buildpacks αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž›αžΎαžœαŸαž‘αž·αž€αžΆαž“αžΆαž“αžΆαžŠαŸ„αž™αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αžšαžΌαž”αž—αžΆαž– OCI αžŠαŸ‚αž›αž’αžΆαž“αžΆαžαžΆαžšαžΌαž”αž—αžΆαž–αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ Docker αŸ”

αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Spring Boot

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Spring Boot αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– OCI αž–αžΈαž”αŸ’αžšαž—αž–αžŠαŸ„αž™αž”αŸ’αžšαžΎ Buildpack αŸ” αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ bootBuildImageαž€αž·αž…αŸ’αž…αž€αžΆαžš (Gradle) ឬ spring-boot:build-imageαž‚αŸ„αž›αžŠαŸ… (Maven) αž“αž·αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Docker αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž”αŸ’αžŠαžΌαžšβ€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžšαžΌαž”αž—αžΆαž–β€‹αžαžΆαž˜β€‹αž”αŸ†αžŽαž„β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžšαž»αž‰β€‹αž‘αŸ…β€‹αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ Docker αžŠαŸ„αž™β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž…αžΌαž› image tag:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <image>
      <name>docker.io/pratikdas/${project.artifactId}:v1</name>
    </image>
  </configuration>
</plugin>

αžαŸ„αŸ‡αž”αŸ’αžšαžΎ Maven αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžœαžΆαŸ” build-imageαž‚αŸ„αž›αžŠαŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎ Dockerfiles αžŽαžΆαž˜αž½αž™αž‘αŸαž“αŸ…αž–αŸαž›αž“αŸαŸ‡αŸ”

mvn spring-boot:build-image

αž›αž‘αŸ’αž’αž•αž›αž“αžΉαž„αž˜αžΆαž“αžŠαžΌαž…αž“αŸαŸ‡αŸ–

[INFO] --- spring-boot-maven-plugin:2.3.3.RELEASE:build-image (default-cli) @ usersignup ---
[INFO] Building image 'docker.io/pratikdas/usersignup:v1'
[INFO] 
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0%
.
.
.. [creator]     Adding label 'org.springframework.boot.version'
.. [creator]     *** Images (c311fe74ec73):
.. [creator]           docker.io/pratikdas/usersignup:v1
[INFO] 
[INFO] Successfully built image 'docker.io/pratikdas/usersignup:v1'

αž–αžΈαž‘αž·αž“αŸ’αž“αž•αž›αž™αžΎαž„αžƒαžΎαž‰ paketo Cloud-Native buildpackαž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– OCI αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαžΌαž…αž–αžΈαž˜αž»αž“ αž™αžΎαž„αž’αžΆαž…αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αžšαžΆαž™αž‡αžΆαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–

docker images 

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“:

REPOSITORY                             SIZE
paketobuildpacks/run                  84.3MB
gcr.io/paketo-buildpacks/builder      652MB
pratikdas/usersignup                  257MB

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ Jib

Jib αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž–αžΈ Google αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž‡αŸ†αž“αž½αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαž–αžΈαž€αžΌαžŠαž”αŸ’αžšαž—αž–αŸ”

αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ jib-maven-pluginαž“αŸ…αž€αŸ’αž“αž»αž„ pom.xml:

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Jib αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Maven αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αžŠαžΌαž…αž–αžΈαž˜αž»αž“ αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžš Docker αžŽαžΆαž˜αž½αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸαŸ–

mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Maven αžαžΆαž„αž›αžΎαž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜:

[INFO] Containerizing application to pratikdas/usersignup:v1...
.
.
[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, io.pratik.users.UsersignupApplication]
[INFO] 
[INFO] Built and pushed image as pratikdas/usersignup:v1
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete

αž›αž‘αŸ’αž’αž•αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αŸ”

αž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αž αž“αž·αž„αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž›αž˜αŸ’αž’

αž™αžΎαž„αž˜αžΆαž“αž αŸαžαž»αž•αž›αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αŸ–

  • αž•αž›αž·αžαž—αžΆαž–αŸ– αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž€αž»αž„αžαžΊαž“αŸαžš Orchestration αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž™αž€αž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αžšαžΌαž”αž—αžΆαž–αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž€αžΆαžšαž’αŸ’αžœαžΎαž•αŸ‚αž“αž€αžΆαžšαŸ” αž€αžΆαžšαž‘αžΆαž‰αžšαžΌαž”αž—αžΆαž–αž’αŸ† αŸ— αž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž“αžΆαŸ†αž±αŸ’αž™αž–αŸαž›αžœαŸαž›αžΆαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαž™αžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαŸ€αž”αž…αŸ†αž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„αžšαž™αŸˆαž–αŸαž›αžŸαžΆαž„αžŸαž„αŸ‹αž™αžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αž–αž„αŸ‹ CI αŸ”
  • αžŸαž“αŸ’αžαž·αžŸαž»αžαŸ– αžšαžΌαž”αž—αžΆαž–αž’αŸ†αž€αŸαž˜αžΆαž“αž•αŸ’αž‘αŸƒαž’αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αž•αž„αžŠαŸ‚αžšαŸ”

αžšαžΌαž”αž—αžΆαž– Docker αž˜αžΆαž“αž‡αž„αŸ‹αž“αŸƒαžŸαŸ’αžšαž‘αžΆαž”αŸ‹ αžŠαŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„ Dockerfile αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—αžαŸ†αžŽαžΆαž„αž±αŸ’αž™ delta αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž‘αžΆαž‰αžšαžΌαž”αž—αžΆαž– Docker αž…αŸαž‰αž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αŸ— αž αžΎαž™αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ”

Spring Boot αž”αŸ’αžšαžΎ "JAR αžαŸ’αž›αžΆαž‰αŸ‹" αž“αŸ…αž€αŸ’αž“αž»αž„ αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αžœαŸαž…αžαŸ’αž…αž”αŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αž“αŸ…αž–αŸαž›αž™αžΎαž„αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž› JAR αž€αŸ’αžšαžΆαžŸαŸ‹ αž™αžΎαž„αžƒαžΎαž‰αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž„αŸ’αž€αžΎαžαž”αžΆαž“αž‡αžΆαž•αŸ’αž“αŸ‚αž€αžαžΌαž…αž˜αž½αž™αž“αŸƒ JAR αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ†αž•αž»αžαŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αžšαž½αž˜αž˜αžΆαž“ Spring Framework dependenciesαŸ”

αžšαžΌαž”αž˜αž“αŸ’αžαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž•αŸ’αžαŸ„αžαž›αžΎαž€αžΆαžšαž‰αŸ‚αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒ Spring Framework αŸ”

αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž―αž€αžŸαžΆαžš JAR αžŠαŸαž€αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž™αž€αžαŸ‚αž˜αŸ’αžαž„αž‚αžαŸ‹ αž αžΎαž™αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ”

αž˜αžΆαž“αžαŸ‚αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŸαŸ’αžαžΎαž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž€αŸ†αž‘αž»αž„αž–αŸαž›αž’αžΆαž”αŸ‹αžŠαŸαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαž›αžœαž·αž—αžΆαž‚αž’αž»αž„αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž€αŸ’αž“αž»αž„αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž“αŸαŸ‡αŸ–

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž™αžΎαž„αž“αžΉαž„αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž›αž˜αŸ’αž’αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring BootαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot αžŠαŸ„αž™αž”αŸ’αžšαžΎ Buildpack

Spring Boot 2.3 αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž”αž‰αŸ’αžˆαž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž―αž€αžŸαžΆαžš JAR αž€αŸ’αžšαžΆαžŸαŸ‹αž‘αŸ…αž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž αžΎαž™αžαŸ’αžšαžΌαžœαžαŸ‚αž”αžΎαž€αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Spring Boot MavenαŸ–

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <layers>
      <enabled>true</enabled>
    </layers>
  </configuration> 
</plugin>

αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž»αž“αžŸαž·αž“αž‡αžΆαž˜αž½αž™ Buildpack αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ Docker αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αžαŸ„αŸ‡αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ build-imageαž‚αŸ„αž›αžŠαŸ… Maven αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ–

mvn spring-boot:build-image

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Dive αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž’αžΆαž…αžƒαžΎαž‰αžαžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž‚αžΌαžŸαž‡αžΆαž–αžŽαŸŒαž€αŸ’αžšαž αž˜) αž‚αžΊαžαžΌαž…αž‡αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαž‚αžΈαž‘αžΌαž”αŸƒαž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αž˜αŸ’αžšαž„αŸ‹ JAR αžαŸ’αž›αžΆαž‰αŸ‹αŸ–

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot αžŠαŸ„αž™αž”αŸ’αžšαžΎ Docker

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Maven ឬ Gradle αž™αžΎαž„αž€αŸαž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker JAR αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžš Docker αž•αž„αžŠαŸ‚αžšαŸ”

αž“αŸ…αž–αŸαž›αž™αžΎαž„αž”αŸ’αžšαžΎ Docker αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αž“αž»αžœαžαŸ’αžαž‡αŸ†αž αžΆαž“αž–αžΈαžšαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžšαž„αŸ‹αžŸαŸ’αžšαž‘αžΆαž”αŸ‹ αž αžΎαž™αž…αž˜αŸ’αž›αž„αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ”

αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒ JAR αž›αž‘αŸ’αž’αž•αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŸαžΆαž„αžŸαž„αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎ Maven αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αžΎαž€αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž“αžΉαž„αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

META-INF/
.
BOOT-INF/lib/
.
BOOT-INF/lib/spring-boot-jarmode-layertools-2.3.3.RELEASE.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idx

αž›αž‘αŸ’αž’αž•αž›αž”αž„αŸ’αž αžΆαž‰ JAR αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ spring-boot-jarmode-layertoolsΠΈ layersfle.idxαž―αž€αžŸαžΆαžšαŸ” αž―αž€αžŸαžΆαžš JAR αž”αž“αŸ’αžαŸ‚αž˜αž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŸαž˜αžαŸ’αžαž—αžΆαž–αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹ αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž€αžΆαžšαžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž›αžΎαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—

αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž› αž“αž·αž„αžŸαŸ’αžšαž„αŸ‹αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž…αŸαž‰αž–αžΈ JAR αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αŸ’αžšαžΎαž›αž€αŸ’αžαžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž”αŸ’αžšαž–αŸαž“αŸ’αž’ -Djarmode=layertoolsαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ spring-boot-jarmode-layertoolsJAR αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ–

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar

αž€αžΆαžšαžšαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαžαž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž˜αžΆαž“αŸ–

Usage:
  java -Djarmode=layertools -jar usersignup-0.0.1-SNAPSHOT.jar

Available commands:
  list     List layers from the jar that can be extracted
  extract  Extracts layers from the jar for image creation
  help     Help about any command

αž›αž‘αŸ’αž’αž•αž›αž”αž„αŸ’αž αžΆαž‰αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ listextractΠΈ helpс helpαž‡αžΆαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αžαŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‡αžΆαž˜αž½αž™ listαž‡αž˜αŸ’αžšαžΎαžŸαŸ–

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application

αž™αžΎαž„αžƒαžΎαž‰αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αŸ”

αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ–

αžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸ’αžšαž‘αžΆαž”αŸ‹

αž˜αžΆαžαž·αž€αžΆ

dependencies

αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αž˜αž·αž“αž˜αžΆαž“ SNAPSHOT

spring-boot-loader

αžαŸ’αž“αžΆαž€αŸ‹αž•αŸ’αž‘αž»αž€ JAR

snapshot-dependencies

αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“ SNAPSHOT

application

αžαŸ’αž“αžΆαž€αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž’αž“αž’αžΆαž“

αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ layers.idxαž―αž€αžŸαžΆαžšαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αžšαžΌαž”αž—αžΆαž– Docker αŸ” αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž‘αžΆαž‰αž™αž€αž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž˜αžΆαž“αžαŸ‚αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž’αžΆαž”αŸ‹αžŠαŸαžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž™αž€αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αžŠαŸ‚αž›αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αžŠαŸ„αž™αžŸαžΆαžšαž‘αŸ†αž αŸ†αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™ .

αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžšαžΌαž”αž—αžΆαž–β€‹αžŠαŸ„αž™β€‹αž˜αžΆαž“β€‹αž—αžΆαž–β€‹αž’αžΆαžŸαŸ’αžšαŸαž™β€‹αž”αžΆαž“β€‹αžŸαŸ’αžšαž„αŸ‹β€‹αž…αŸαž‰β€‹αž‡αžΆβ€‹αžŸαŸ’αžšαž‘αžΆαž”αŸ‹β€‹αžŠαžΆαž…αŸ‹β€‹αžŠαŸ„αž™β€‹αž‘αŸ‚αž€

αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‡αžΆαž–αžΈαžšαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž˜αž½αž™αž αŸ…αžαžΆ αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› . αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„ αž™αžΎαž„αž“αžΉαž„αž‘αžΆαž‰αž™αž€αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž αžΎαž™αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž‘αžΈαž–αžΈαžš αž™αžΎαž„αž“αžΉαž„αž…αž˜αŸ’αž›αž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŠαŸ‚αž›αž”αžΆαž“αžŠαž€αžŸαŸ’αžšαž„αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ”

αžαŸ„αŸ‡αž€αŸ‚αž”αŸ’αžšαŸ‚ Dockerfile αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ–

# the first stage of our build will extract the layers
FROM adoptopenjdk:14-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

# the second stage of our build will copy the extracted layers
FROM adoptopenjdk:14-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™ - Dockerfile2.

αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–

docker build -f Dockerfile2 -t usersignup:v1 .

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜:

Sending build context to Docker daemon  20.41MB
Step 1/12 : FROM adoptopenjdk:14-jre-hotspot as builder
14-jre-hotspot: Pulling from library/adoptopenjdk
.
.
Successfully built a9ebf6970841
Successfully tagged userssignup:v1

αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆαžšαžΌαž”αž—αžΆαž– Docker αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™ ID αžšαžΌαž”αž—αžΆαž– αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αŸ”

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Dive αžŠαžΌαž…αž–αžΈαž˜αž»αž“ αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ” αž™αžΎαž„αž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαžΌαž”αž—αžΆαž– αž¬αžŸαŸ’αž›αžΆαž€αž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ DiveαŸ–

dive userssignup:v1

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž‘αŸ’αž’αž•αž› αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ‚ 11 KB αž αžΎαž™αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” 

αž€αžΆαžšαž€αžŸαžΆαž„αžšαžΌαž”αž—αžΆαž– Docker αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Spring Boot

αž‘αžΆαž‰αž™αž€αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžαžΆαž„αž€αŸ’αž“αž»αž„αž›αžΎαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—

αž™αžΎαž„αž’αžΆαž…αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ†αž αŸ†αž“αŸƒαž€αž˜αŸ’αžšαž·αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αžŠαŸ„αž™αž‘αžΆαž‰αž™αž€αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžŽαžΆαž˜αž½αž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž‡αžΆαžαŸ’αž“αžΆαž€αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžœαŸαž…αžαŸ’αž…αž”αŸ‹αž–αž½αž€αžœαžΆαž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž”αŸ’αžšαž€αžΆαžŸαž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ ymlαž―αž€αžŸαžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ layers.idx:

- "dependencies":
  - "BOOT-INF/lib/"
- "spring-boot-loader":
  - "org/"
- "snapshot-dependencies":
- "custom-dependencies":
  - "io/myorg/"
- "application":
  - "BOOT-INF/classes/"
  - "BOOT-INF/classpath.idx"
  - "BOOT-INF/layers.idx"
  - "META-INF/"

αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αŸ” layers.idxαž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ io.myorgαž•αŸ’αž‘αž»αž€αž“αžΌαžœαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžšαž”αžŸαŸ‹αž’αž„αŸ’αž‚αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αžšαž½αž˜αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Cloud-Native Buildpacks αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž€αžΌαžŠαž”αŸ’αžšαž—αž–αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Docker αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžαžΆαž˜αžšαž”αŸ€αž”αž’αž˜αŸ’αž˜αžαžΆαŸ– αžŠαŸ†αž”αžΌαž„αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž€αŸ’αžšαžΆαžŸαŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαŸαž…αžαŸ’αž…αž”αŸ‹αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš Docker αŸ”

αž™αžΎαž„αž€αŸαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž•αž„αžŠαŸ‚αžš αžŠαŸ„αž™αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαŸ‚αž›αž‘αžΆαž‰αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž‡αžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž αžΎαž™αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŸαŸ’αžαžΎαž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž“αŸ…αž–αŸαž›αž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αž€αž»αž„αžαžΊαž“αŸαžšαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸ… Github .

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ

αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαžŸαž„αŸ’αžαŸαž”αžαŸ’αž›αžΈαŸ—αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

αž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαž”αžšαž·αž”αž‘αŸ–

docker system prune -a

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžš DockerαŸ–

docker build -f <Docker file name> -t <tag> .

αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαž–αžΈαž€αžΌαžŠαž”αŸ’αžšαž—αž– (αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ Dockerfile)αŸ–

mvn spring-boot:build-image

αž˜αžΎαž›αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž’αžΆαžŸαŸ’αžšαŸαž™αŸ” αž˜αž»αž“αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αž“αŸ…αž€αŸ’αž“αž»αž„ spring-boot-maven-pluginαŸ–

java -Djarmode=layertools -jar application.jar list

αž€αžΆαžšαžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž’αžΆαžŸαŸ’αžšαŸαž™αŸ” αž˜αž»αž“αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αž“αŸ…αž€αŸ’αž“αž»αž„ spring-boot-maven-pluginαŸ–

 java -Djarmode=layertools -jar application.jar extract

αž˜αžΎαž›αž”αž‰αŸ’αž‡αžΈαžšαžΌαž”αž—αžΆαž–αž’αž»αž„

docker images

αž˜αžΎαž›αž“αŸ…αžαžΆαž„αž†αŸ’αžœαŸαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžš (αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž§αž”αž€αžšαžŽαŸαž˜αž»αž‡αž‘αžΉαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„)αŸ–

dive <image ID or image tag>

αž”αŸ’αžšαž—αž–: www.habr.com