ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืงืึทื ื˜ื™ื™ื ืขืจื– ื”ืึธื‘ืŸ ื•ื•ืขืจืŸ ื“ื™ ื‘ื™ืœื›ืขืจ ืžื™ื˜ืœ ืคื•ืŸ ืคึผืึทืงืงืึทื’ื™ื ื’ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ ืึทืœืข ื–ื™ื™ึทืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืื•ืŸ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื•ืŸ ื“ืขืœื™ื•ื•ืขืจื™ื ื’ ื–ื™ื™ ืฆื• ืคืึทืจืฉื™ื“ืขื ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ.

ื“ืขืจ ืึทืจื˜ื™ืงืœ ืงืึธื•ื•ืขืจืก ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ ืฆื• ืงืึทื ื˜ืึทืžืึทื ื™ื™ื– ืึท ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ:

  • ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืžื™ื˜ ืึท ื“ืึธืงืงืขืจ ื˜ืขืงืข,
  • ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทืŸ OCI ื‘ื™ืœื“ ืคึฟื•ืŸ ืžืงื•ืจ ื ื™ืฆืŸ Cloud-Native Buildpack,
  • ืื•ืŸ ืœื•ื™ืคืŸ-ืฆื™ื™ื˜ ื‘ื™ืœื“ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ื“ื•ืจืš ืกืขืคึผืขืจื™ื™ื˜ื™ื ื’ ืคึผืึทืจืฅ ืคื•ืŸ ื“ื™ JAR ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืœื™ื™ึทืขืจืก ื ื™ืฆืŸ ืžืึทืœื˜ื™-ืจื™ื™ ืžื›ืฉื™ืจื™ื.

 ืงืึธื“ืขืงืก ื‘ื™ื™ึทืฉืคึผื™ืœ

ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ื‘ืื’ืœื™ื™ื˜ ื“ื•ืจืš ืืจื‘ืขื˜ืŸ ืงืึธื“ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื•ื™ืฃ GitHub .

ืงืึทื ื˜ื™ื™ื ืขืจ ื˜ืขืจืžื™ื ืึธืœืึธื’ื™ืข

ืžื™ืจ ื•ื•ืขืœืŸ ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ื˜ืขืจืžื™ื ืึธืœืึธื’ื™ืข ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ:

  • ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“: ื˜ืขืงืข ืคื•ืŸ โ€‹โ€‹ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืคึฟืึธืจืžืึทื˜. ืžื™ืจ ื•ื•ืขืœืŸ ื’ืขืจ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ื‘ื•ื™ืขืŸ ื’ืขืฆื™ื™ึทื’.
  • ืงืึทื ื˜ื™ื™ื ืขืจ: ืึท ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“.
  • ืงืึทื ื˜ื™ื™ื ืขืจ ืžืึธื˜ืึธืจ: ื“ืขืจ ื“ืขืžืึธืŸ ืคึผืจืึธืฆืขืก ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ.
  • ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ืึทืœืขื‘ืึธืก: ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืงืึธืžืคึผื™ื•ื˜ืขืจ ืื•ื™ืฃ ื•ื•ืึธืก ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืžืึธื˜ืึธืจ ืœื•ื™ืคื˜.
  • ืงืึทื ื˜ื™ื™ื ืขืจ ืจืขื’ื™ืกื˜ืจื™: ื“ืขืจ ื’ืขื ืขืจืึทืœ ืึธืจื˜ ื’ืขื ื™ืฆื˜ ืฆื• ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื•ืŸ ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“.
  • OCI ื ืึธืจืžืึทืœืขืคึฟืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื ื™ืฆื™ืื˜ื™ื•ื• (OCI) ืื™ื– ืึท ืœื™ื™ื˜ื•ื•ื™ื™ื˜, ืึธืคึฟืŸ ื’ืึทื•ื•ืขืจื ืึทื ืก ืกื˜ืจื•ืงื˜ื•ืจ ื’ืขื’ืจื™ื ื“ืขื˜ ืื™ืŸ ื“ื™ ืœื™ื ื•ืงืก ื•ื•ื™ืงื™ืคึผืขื“ื™ืข. ื“ื™ OCI ื‘ื™ืœื“ ืกืคึผืขืกื™ืคื™ืงืึทื˜ื™ืึธืŸ ื“ื™ืคื™ื™ื ื– ื™ื ื“ืึทืกื˜ืจื™ ืกื˜ืึทื ื“ืึทืจื“ืก ืคึฟืึทืจ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืื•ืŸ ืจื•ื ื˜ื™ืžืข ืคึฟืึธืจืžืึทื˜ื™ืจื•ื ื’ืขืŸ ืฆื• ืขื ืฉื•ืจ ืึทื– ืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจ ืขื ื“ื–ืฉืึทื ื– ืงืขื ืขืŸ ืœื•ื™ืคืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ืขืจ ื‘ืืฉืืคืŸ ื“ื•ืจืš ืงื™ื™ืŸ ื‘ื•ื™ืขืŸ ื’ืขืฆื™ื™ึทื’.

ืฆื• ืงืึทื ื˜ืึทืžืึทื ื™ื™ื– ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืžื™ืจ ื™ื™ึทื ื•ื•ื™ืงืœืขืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืื•ืŸ ืึทืจื•ื™ืกื’ืขื‘ืŸ ื“ืขื ื‘ื™ืœื“ ืฆื• ืึท ืฉืขืจื“ ืจืขื’ื™ืกื˜ืจื™. ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืจื•ื ื˜ื™ืžืข ืจื™ื˜ืจื™ื•ื•ื– ื“ืขื ื‘ื™ืœื“ ืคื•ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™, ืึทื ืคึผืึทืงืก ืขืก ืื•ืŸ ืœื•ื™ืคื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื™ืŸ ืขืก.

ื•ื•ืขืจืกื™ืข 2.3 ืคื•ืŸ ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ื’ื™ื˜ ืคึผืœื•ื’ื™ื ืก ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ OCI ื‘ื™ืœื“ืขืจ.

ื“ืึธืงืงืขืจ ืื™ื– ื“ื™ ืžืขืจืกื˜ ืงืึทืžืึทื ืœื™ ื’ืขื•ื•ื™ื™ื ื˜ ืงืึทื ื˜ื™ื™ื ืขืจ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ, ืื•ืŸ ืžื™ืจ ื ื•ืฆืŸ Docker ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ืฉืคื™ืœืŸ, ืึทื–ื•ื™ ืึทืœืข ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื•ื•ืขื˜ ืึธืคึผืฉื™ืงืŸ ืฆื• Docker.

ื‘ื ื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ื“ื™ ื˜ืจืื“ื™ืฆื™ืื ืขืœืŸ ื•ื•ืขื’

ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ื– ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ื“ื•ืจืš ืึทื“ื™ื ื’ ืขื˜ืœืขื›ืข ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืฆื• ื“ื™ ื“ืึธืงืงืขืจ ื˜ืขืงืข.

ืžื™ืจ ืขืจืฉื˜ืขืจ ืžืึทื›ืŸ ืึทืŸ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข JAR ื˜ืขืงืข ืื•ืŸ, ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื“ืึธืงืงืขืจ ื˜ืขืงืข ื™ื ืกื˜ืจืึทืงืฉืึทื ื–, ื ืึธื›ืžืึทื›ืŸ ื“ื™ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข JAR ื˜ืขืงืข ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ ื‘ืึทื–ืข JRE ื‘ื™ืœื“ ื ืึธืš ืึทืคึผืœื™ื™ื™ื ื’ ื“ื™ ื ื™ื™ื˜ื™ืง ืกืขื˜ื˜ื™ื ื’ืก.

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืื•ื ื“ื–ืขืจ ืคืจื™ืœื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ ืคืจื™ืœื™ื ื’ ืื™ื ื™ืฆื™ืืœื™ื–ืจ ืžื™ื˜ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– 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"]

ืื•ื ื“ื–ืขืจ ื“ืึธืงืงืขืจ ื˜ืขืงืข ื›ึผื•ืœืœ ืึท ื‘ืึทื–ืข ื‘ื™ืœื“ ืคึฟื•ืŸ adoptopenjdk, ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื•ื•ืึธืก ืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ืื•ื ื“ื–ืขืจ JAR ื˜ืขืงืข ืื•ืŸ ื“ืขืžืึธืœื˜ ืขืคืขื ืขืŸ ื“ื™ ืคึผืึธืจื˜, 8080ื•ื•ืึธืก ื•ื•ืขื˜ ื”ืขืจืŸ ืคึฟืึทืจ ืจื™ืงื•ื•ืขืก.

ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืขืจืฉื˜ืขืจ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ Maven ืึธื“ืขืจ Gradle. ื“ืึธ ืžื™ืจ ื ื•ืฆืŸ Maven:

mvn clean package

ื“ืึธืก ืงืจื™ื™ื™ืฅ ืึทืŸ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข JAR ื˜ืขืงืข ืคึฟืึทืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืจ ื“ืขื ืขืงืกืขืงื•ื˜ืึทื‘ืœืข JAR ืื™ืŸ ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืฆื• ืœื•ื™ืคืŸ ืื•ื™ืฃ ื“ื™ ื“ืึธืงืงืขืจ ืžืึธื˜ืึธืจ.

ืฉืืคืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“

ืžื™ืจ ืฉื˜ืขืœืŸ ื“ืขื ืขืงืกืขืงื•ื˜ืึทื‘ืœืข JAR ื˜ืขืงืข ืื™ืŸ ื“ื™ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ docker buildืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืึธืจืฆืœ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื“ื™ Dockerfile ื‘ืืฉืืคืŸ ืคืจื™ืขืจ:

docker build  -t usersignup:v1 .

ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ืœื“ ืื™ืŸ ื“ืขืจ ืจืฉื™ืžื” ืžื™ื˜ ื“ืขื ื‘ืึทืคึฟืขืœ:

docker images 

ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืื•ื™ื‘ืŸ ื‘ืึทืคึฟืขืœ ื›ื•ืœืœ ืื•ื ื“ื–ืขืจ ื‘ื™ืœื“ usersignupืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ื™ ื‘ืึทื–ืข ื‘ื™ืœื“, adoptopenjdkืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ืื•ื ื“ื–ืขืจ ื“ืึธืงืงืขืจ ื˜ืขืงืข.

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

ืงื•ืง ืœื™ื™ึทืขืจืก ื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ ืึธื ืœื™ื™ื’ืŸ ืคื•ืŸ ืœื™ื™ึทืขืจืก ื™ืŸ ื“ื™ ื‘ื™ืœื“. ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื’ืขืฆื™ื™ึทื’  ื•ื ื˜ืขืจื˜ื•ืงื  ื–ื™ืš ืฆื• ื–ืขืŸ ื“ื™ ืœื™ื™ึทืขืจืก:

dive usersignup:v1

ื“ืึธ ืื™ื– ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ Dive ื‘ืึทืคึฟืขืœ: 

ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื•ื•ื™ ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฉื™ื›ื˜ืข ืื™ื– ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื‘ื™ืœื“ ื’ืจื™ื™ืก. ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ืขื ืฉื™ื›ื˜ืข ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืกืขืงืฉืึทื ื– ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ.

ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืžื™ื˜ Buildpack

ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืคึผืึทืงืึทื“ื–ืฉืึทื– (Buildpacks) ืื™ื– ืึท ื’ืขื ืขืจืึทืœ ื˜ืขืจืžื™ืŸ ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืคืึทืจืฉื™ื“ืŸ ืคึผืœืึทื˜ืคืึธืจื ื•ื•ื™ ืึท ืกืขืจื•ื•ื™ืก (PAAS) ืึธืคืจื™ื ื’ื– ืฆื• ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืคึฟื•ืŸ ืžืงื•ืจ ืงืึธื“. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ื”ืขืจืึธืงื• ืื™ืŸ 2011 ืื•ืŸ ืื™ื– ื–ื™ื ื˜ ื’ืขื•ื•ืืจืŸ ืื ื’ืขื ื•ืžืขืŸ ื“ื•ืจืš ืงืœืึธื•ื“ ืคืึทื•ื ื“ืจื™, Google ืึทืคึผ ืขื ื’ื™ื ืข, ื’ื™ื˜ืœืึทื‘, ืงื ืึทื˜ื™ื•ื•ืข ืื•ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข.

ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื“ื™ ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹ื•ื•ืึธืœืงืŸ ื‘ื•ื™ืขืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื–

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ื‘ืขื ืขืคื™ืฅ ืคื•ืŸ ื ื™ืฆืŸ Buildpack ืฆื• ืฉืึทืคึฟืŸ ื‘ื™ืœื“ืขืจ ืื™ื– ืึทื– ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื‘ื™ืœื“ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืจืื˜ืŸ ืกืขื ื˜ืจืึทืœื™ (ื‘ื™ืœื“ืขืจ) ืื•ืŸ ืคึผืจืึทืคึผืึทื’ื™ื™ื˜ื™ื“ ืฆื• ืึทืœืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื ื™ืฆืŸ ื‘ื™ืœื“ืขืจ.

ื“ื™ ื‘ื•ื™ืขืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื– ื–ืขื ืขืŸ ื˜ื™ื™ื˜ืœื™ ืงืึทืคึผืึทืœื“ ืฆื• ื“ื™ ืคึผืœืึทื˜ืคืึธืจืžืข. Cloud-Native Buildpacks ืฆื•ืฉื˜ืขืœืŸ ืกื˜ืึทื ื“ืขืจื“ื™ื–ื™ื™ืฉืึทืŸ ืึทืจื™ื‘ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืก ื“ื•ืจืš ืฉื˜ื™ืฆืŸ ื“ื™ OCI ื‘ื™ืœื“ ืคึฟืึธืจืžืึทื˜, ื•ื•ืึธืก ื™ื ืฉื•ืจื– ืึทื– ื“ื™ ื‘ื™ืœื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื•ื™ืคืŸ ื“ื•ืจืš ื“ื™ ื“ืึธืงืงืขืจ ืžืึธื˜ืึธืจ.

ื ื™ืฆืŸ ื“ื™ ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ืคึผืœื•ื’ื™ืŸ

ื“ื™ ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ืคึผืœื•ื’ื™ืŸ ื‘ื•ื™ืขืŸ OCI ื‘ื™ืœื“ืขืจ ืคึฟื•ืŸ ืžืงื•ืจ ื ื™ืฆืŸ Buildpack. ื‘ื™ืœื“ืขืจ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ื ื™ืฆืŸ bootBuildImageื˜ืึทืกืงืก (ื’ืจืึทื“ืœืข) ืึธื“ืขืจ spring-boot:build-imageื˜ืึทืจื’ืึทืฅ (ืžืึทื•ื•ืขืŸ) ืื•ืŸ ื”ื™ื’ืข ื“ืึธืงืงืขืจ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’.

ืžื™ืจ ืงืขื ืขืŸ ืงืึทืกื˜ืึทืžื™ื™ื– ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ื‘ื™ืœื“ ื“ืืจืฃ ืฆื• ืฉื˜ื•ืคึผืŸ ืฆื• ื“ื™ ื“ืึธืงืขืจ ืจืขื’ื™ืกื˜ืจื™ ื“ื•ืจืš ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื ืึธืžืขืŸ ืื™ืŸ 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 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 ื‘ืึทืคึฟืขืœ ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“. ื•ื•ื™ ืคืจื™ืขืจ, ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ื“ืึธืงืงืขืจ ื˜ืขืงืขืก ื“ืึธ:

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

ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ื™ื™ื–ื˜ ืึทื– ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืื™ื– ื‘ืืฉืืคืŸ ืื•ืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™.

ืžืึธื•ื˜ืึทื•ื•ื™ื™ืฉืึทื ื– ืื•ืŸ ื˜ืขืงื ื™ืงืก ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื‘ื™ืœื“ืขืจ

ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ื”ื•ื™ืคึผื˜ ืกื™ื‘ื•ืช ืคึฟืึทืจ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ:

  • ืคืึธืจืฉื˜ืขืœื•ื ื’: ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืึธืจืงืขืกื˜ืจืึทื˜ื™ืึธืŸ ืกื™ืกื˜ืขื, ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืื™ื– ืจื™ื˜ืจื™ื•ื•ื“ ืคื•ืŸ ื“ื™ ื‘ื™ืœื“ ืจืขื’ื™ืกื˜ืจื™ ืฆื• ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ื•ื•ืึธืก ืœื•ื™ืคืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืžืึธื˜ืึธืจ. ื“ืขื ืคึผืจืึธืฆืขืก ืื™ื– ื’ืขืจื•ืคืŸ ืคึผืœืึทื ื™ืจื•ื ื’. ืคึผื•ืœื™ื ื’ ื’ืจื•ื™ืก ื‘ื™ืœื“ืขืจ ืคื•ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™ ืจืขื–ื•ืœื˜ืื˜ืŸ ืื™ืŸ ืœืึทื ื’ ืกืงืขื“ื–ืฉื•ืœื™ื ื’ ืฆื™ื™ื˜ ืื™ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ืึธืจืงืขืกื˜ืจืึทื˜ื™ืึธืŸ ืกื™ืกื˜ืขืžืขืŸ ืื•ืŸ ืœืึทื ื’ ื‘ื•ื™ืขืŸ ืฆื™ื™ื˜ ืื™ืŸ ืกื™ ืคึผื™ื™ืคึผืœื™ื™ื ื–.
  • ื–ื™ื›ืขืจืงื™ื™ึทื˜: ื’ืจืขืกืขืจืข ื‘ื™ืœื“ืขืจ ืื•ื™ืš ื”ืึธื‘ืŸ ืึท ื’ืจืขืกืขืจืข ืฉื˜ื— ืคึฟืึทืจ ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ื–.

ื ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืึท ืึธื ืœื™ื™ื’ืŸ ืคื•ืŸ ืœื™ื™ึทืขืจืก, ื™ืขื“ืขืจ ืคื•ืŸ ื•ื•ืึธืก ืจืขืคึผืจืึทื–ืขื ืฅ ืึทืŸ ื™ื ืกื˜ืจื•ืงื˜ื™ืึธืŸ ืื™ืŸ ืื•ื ื“ื–ืขืจ ื“ืึธืงืขืจืคื™ืœืข. ื™ืขื“ืขืจ ืฉื™ื›ื˜ืข ืจืขืคึผืจืึทื–ืขื ืฅ ืึท ื“ืขืœื˜ืึท ืคื•ืŸ ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ืึทื ื“ืขืจืœื™ื™ื™ื ื’ ืฉื™ื›ื˜ืข. ื•ื•ืขืŸ ืžื™ืจ ืฆื™ืขืŸ ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืคื•ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™, ืขืก ืื™ื– ืคึผื•ืœื“ ืื™ืŸ ืœื™ื™ึทืขืจืก ืื•ืŸ ืงืึทืฉื˜ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก.

ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ื ื™ืฆื˜ "ืคืขื˜ JAR" ืื™ืŸ ื•ื•ื™ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืคึผืึทืงืงืึทื’ื™ื ื’ ืคึฟืึธืจืžืึทื˜. ื•ื•ืขืŸ ืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ื“ื™ืง JAR, ืžื™ืจ ื–ืขืŸ ืึทื– ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืึท ื–ื™ื™ืขืจ ืงืœื™ื™ืŸ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื’ืื ืฆืข JAR. ื“ืึธืก ืื™ื– ื“ืขืจ ื˜ื™ื™ืœ ื•ื•ืึธืก ืขื ื“ืขืจื•ื ื’ืขืŸ ืจื•ื‘ึฟ ืึธืคื˜. ื“ื™ ืจืขืฉื˜ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื“ื™ ืกืคึผืจื™ื ื’ ืคืจืึทืžืขื•ื•ืึธืจืง ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–.

ื“ื™ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืคืึธืจืžื•ืœืข ืกืขื ื˜ืขืจืก ืึทืจื•ื ื™ื™ืกืึทืœื™ื™ื˜ื™ื ื’ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืžื“ืจื’ื” ืคื•ืŸ ืกืคึผืจื™ื ื’ ืคืจืึทืžืขื•ื•ืึธืจืง ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–.

ื“ื™ ื“ืขืคึผืขื ื“ืขื ืกื™ ืฉื™ื›ื˜ืข, ื•ื•ืึธืก ืคืืจืžืขืŸ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ื™ ื“ื™ืง JAR ื˜ืขืงืข, ืื™ื– ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ื‘ืœื•ื™ื– ืึทืžืึธืœ ืื•ืŸ ืงืึทืฉื˜ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืกื™ืกื˜ืขื.

ื‘ืœื•ื™ื– ืึท ื“ื™ืŸ ืคึผืœืึทืกื˜ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืคึผื•ืœื“ ื‘ืขืฉืึทืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ืื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ืกืงืขื“ื–ืฉื•ืœื™ื ื’. ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ืขื ื“ื™ืึทื’ืจืึทืžืข:

ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืกืขืงืฉืึทื ื–, ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื•ื•ื™ ืฆื• ืžืึทื›ืŸ ื“ื™ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืกืคึผืจื™ื ื’ ื‘ืึธืึธื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืฉืึทืคึฟืŸ ืึท ืึธืคึผื˜ื™ืžื™ื–ืขื“ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ื™ืฆืŸ 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ืžืึทื•ื•ืขืŸ ืฆื™ืœ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“:

mvn spring-boot:build-image

ืื•ื™ื‘ ืžื™ืจ ืœื•ื™ืคืŸ ื•ื ื˜ืขืจื˜ื•ืงื  ื–ื™ืš ืฆื• ื–ืขืŸ ื“ื™ ืœื™ื™ึทืขืจืก ืื™ืŸ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ื‘ื™ืœื“, ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฉื™ื›ื˜ืข (ืึทื•ื˜ืœื™ื™ื ื“ ืื™ืŸ ืจื•ื™ื˜) ืื™ื– ืคื™ืœ ืงืœืขื ืขืจืขืจ ืื™ืŸ ื“ื™ ืงื™ืœืึธื‘ื™ื™ื˜ ืงื™ื™ื˜ ืงืึทืžืคึผืขืจื“ ืžื™ื˜ ื•ื•ืึธืก ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื ื™ืฆืŸ ื“ื™ ืคืขื˜ JAR ืคึฟืึธืจืžืึทื˜:

ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืฉืึทืคึฟืŸ ืึท ืึธืคึผื˜ื™ืžื™ื–ืขื“ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ื™ืฆืŸ ื“ืึธืงืงืขืจ

ืึทื ืฉื˜ืึธื˜ ื ื™ืฆืŸ ืึท ืžืึทื•ื•ืขืŸ ืึธื“ืขืจ ื’ืจืึทื“ืœืข ืคึผืœื•ื’ื™ืŸ, ืžื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ืฉืึทืคึฟืŸ ืึท ืœื™ื™ืขืจื“ Docker JAR ื‘ื™ืœื“ ืžื™ื˜ ืึท ื“ืึธืงืงืขืจ ื˜ืขืงืข.

ื•ื•ืขืŸ ืžื™ืจ ื ื•ืฆืŸ ื“ืึธืงืขืจ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ืฆื•ื•ื™ื™ ื ืึธืš ืกื˜ืขืคึผืก ืฆื• ืขืงืกื˜ืจืึทืงื˜ ื“ื™ ืœื™ื™ึทืขืจืก ืื•ืŸ ื ืึธื›ืžืึทื›ืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ ืœืขืฆื˜ ื‘ื™ืœื“.

ื“ืขืจ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ 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ื˜ืขืงืข ืื™ืŸ ื“ื™ ืกื“ืจ ื–ื™ื™ ื–ืึธืœ ื–ื™ื™ืŸ ืžื•ืกื™ืฃ ืฆื• ื“ื™ ื“ืึธืงืงืขืจ ื‘ื™ืœื“. ื“ื™ ืœื™ื™ึทืขืจืก ื–ืขื ืขืŸ ืงืึทืฉื˜ ืื™ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ื ืึธืš ื“ืขืจ ืขืจืฉื˜ืขืจ ืจื™ื˜ืจื™ื•ื•ืึทืœ ื•ื•ื™ื™ึทืœ ื–ื™ื™ ื˜ืึธืŸ ื ื™ื˜ ื˜ื•ื™ืฉืŸ. ื‘ืœื•ื™ื– ื“ื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฉื™ื›ื˜ืข ืื™ื– ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ืฆื• ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก, ื•ื•ืึธืก ืื™ื– ืคืึทืกื˜ืขืจ ืจืขื›ื˜ ืฆื• ื“ืขืจ ืจื™ื“ื•ืกื˜ ื’ืจื™ื™ืก .

ื‘ื•ื™ืขืŸ ืึท ื‘ื™ืœื“ ืžื™ื˜ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ื™ืงืกื˜ืจืึทืงื˜ื™ื“ ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืœื™ื™ึทืขืจืก

ืžื™ืจ ื•ื•ืขืœืŸ ื‘ื•ื™ืขืŸ ื“ื™ ืœืขืฆื˜ ื‘ื™ืœื“ ืื™ืŸ ืฆื•ื•ื™ื™ ืกื˜ืึทื’ืขืก ื ื™ืฆืŸ ืึท ืื•ืคึฟืŸ ื’ืขืจื•ืคืŸ ืžื•ืœื˜ื™-ื‘ื™ื ืข ืคึฟืึทืจื–ืึทืžืœื•ื ื’ . ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืฉืจื™ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืขืงืกื˜ืจืึทืงื˜ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื•ืŸ ืื™ืŸ ื“ื™ ืจื’ืข ืฉืจื™ื˜ ืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ื“ื™ ื™ืงืกื˜ืจืึทืงื˜ื™ื“ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื™ืŸ ื“ื™ ืœืขืฆื˜ ื‘ื™ืœื“.

ืœืึธืžื™ืจ ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ืื•ื ื“ื–ืขืจ 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 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

ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืื™ื– ื‘ืืฉืืคืŸ ืžื™ื˜ ืึท ื‘ื™ืœื“ ืฉื™ื™ึทืŸ ืื•ืŸ ื“ืึทืŸ ื˜ืึทื’ื“.

ืฆื•ื ืกื•ืฃ, ืžื™ืจ ืœื•ื™ืคืŸ ื“ื™ Dive ื‘ืึทืคึฟืขืœ ื•ื•ื™ ืคืจื™ืขืจ ืฆื• ื“ื•ืจื›ืงื•ืงืŸ ื“ื™ ืœื™ื™ึทืขืจืก ืื™ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“. ืžื™ืจ ืงืขื ืขืŸ ืฆื•ืฉื˜ืขืœืŸ ืึท ื‘ื™ืœื“ ืฉื™ื™ึทืŸ ืึธื“ืขืจ ืงื•ื•ื™ื˜ืœ ื•ื•ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืฆื• ื“ื™ Dive ื‘ืึทืคึฟืขืœ:

dive userssignup:v1

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ ืฉื™ื›ื˜ืข ืžื™ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืื™ืฆื˜ ื‘ืœื•ื™ื– 11 ืงื‘, ืื•ืŸ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ื–ืขื ืขืŸ ืงืึทืฉื˜ ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืœื™ื™ึทืขืจืก. 

ืฉืึทืคึฟืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ ืึท ืคืจื™ืœื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืขืงืกื˜ืจืึทืงื˜ื™ื ื’ ื™ื ืขืจืœืขืš ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื•ื™ืฃ ื™ื—ื™ื“ ืœื™ื™ึทืขืจืก

ืžื™ืจ ืงืขื ืขืŸ ื ืึธืš ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืจื™ื™ ื“ื•ืจืš ืขืงืกื˜ืจืึทืงื˜ ืงื™ื™ืŸ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืžื ื”ื’ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืจื™ื™ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืคึผืึทืงืงืึทื’ื™ื ื’ ื–ื™ื™ ืžื™ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ื•ืจืš ื“ืขืจืงืœืขืจืŸ ื–ื™ื™ ืื™ืŸ 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 system prune -a

ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืžื™ื˜ ืึท ื“ืึธืงืงืขืจ ื˜ืขืงืข:

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

ืžื™ืจ ื‘ื•ื™ืขืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืคึฟื•ืŸ ื“ื™ ืžืงื•ืจ ืงืึธื“ (ืึธืŸ Dockerfile):

mvn spring-boot:build-image

View ื“ืขืคึผืขื ื“ืขื ืกื™ ืœื™ื™ึทืขืจืก. ืื™ื™ื“ืขืจ ืื™ืจ ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ 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