ืงืึทื ืืืื ืขืจื ืืึธืื ืืืขืจื ืื ืืืืืขืจ ืืืื ืคืื ืคึผืึทืงืงืึทืืื ื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึทืืข ืืืึทื ืืืืืืืืืจื ืืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืืคึผืขื ืืึทื ืกืื ืืื ืืขืืืืืขืจืื ื ืืื ืฆื ืคืึทืจืฉืืืขื ืข ืื ืืืืืจืึทื ืืึทื ืฅ.
ืืขืจ ืึทืจืืืงื ืงืึธืืืขืจืก ืคืึทืจืฉืืืขื ืข ืืืขืื ืฆื ืงืึทื ืืึทืืึทื ืืื ืึท ืกืคึผืจืื ื ืืึธืึธื ืึทืคึผืืึทืงืืืฉืึทื:
- ืงืจืืืืืื ื ืึท ืืึธืงืงืขืจ ืืืื ืืื ืึท ืืึธืงืงืขืจ ืืขืงืข,
- ืงืจืืืืืื ื ืึทื OCI ืืืื ืคึฟืื ืืงืืจ ื ืืฆื Cloud-Native Buildpack,
- ืืื ืืืืคื-ืฆืืื ืืืื ืึทืคึผืืึทืืึทืืืืฉืึทื ืืืจื ืกืขืคึผืขืจืืืืื ื ืคึผืึทืจืฅ ืคืื ืื JAR ืืื ืคืึทืจืฉืืืขื ืข ืืืึทืขืจืก ื ืืฆื ืืึทืืื-ืจืื ืืืฉืืจืื.
ืงืึธืืขืงืก ืืืึทืฉืคึผืื
ืืขืจ ืึทืจืืืงื ืืื ืืืืืืื ืืืจื ืืจืืขืื ืงืึธื ืืืึทืฉืคึผืื
ืงืึทื ืืืื ืขืจ ืืขืจืืื ืึธืืึธืืืข
ืืืจ ืืืขืื ืึธื ืืืืื ืืื ืื ืงืึทื ืืืื ืขืจ ืืขืจืืื ืึธืืึธืืืข ืืขื ืืฆื ืืื ืืขื ืึทืจืืืงื:
- ืงืึทื ืืืื ืขืจ ืืืื: ืืขืงืข ืคืื โโืึท ืกืคึผืขืฆืืคืืฉ ืคึฟืึธืจืืึทื. ืืืจ ืืืขืื ืืขืจ ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึท ืงืึทื ืืืื ืขืจ ืืืื ืืืจื ืืืืคื ืื ืืืืขื ืืขืฆืืึทื.
- ืงืึทื ืืืื ืขืจ: ืึท ืขืงืกืขืงืืืึทืืืข ืืืึทืฉืคึผืื ืคืื ืืขื ืงืึทื ืืืื ืขืจ ืืืื.
- ืงืึทื ืืืื ืขืจ ืืึธืืึธืจ: ืืขืจ ืืขืืึธื ืคึผืจืึธืฆืขืก ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืคืืืกื ืืืง ืืขื ืงืึทื ืืืื ืขืจ.
- ืงืึทื ืืืื ืขืจ ืืึทืืขืืึธืก: ืืขืจ ืืึทืืขืืึธืก ืงืึธืืคึผืืืืขืจ ืืืืฃ ืืืึธืก ืื ืงืึทื ืืืื ืขืจ ืืึธืืึธืจ ืืืืคื.
- ืงืึทื ืืืื ืขืจ ืจืขืืืกืืจื: ืืขืจ ืืขื ืขืจืึทื ืึธืจื ืืขื ืืฆื ืฆื ืึทืจืืืกืืขืื ืืื ืคืึทืจืฉืคึผืจืืืื ืืขื ืงืึทื ืืืื ืขืจ ืืืื.
- OCI ื ืึธืจืืึทื:
ืขืคึฟื ืงืึทื ืืืื ืขืจ ืืื ืืฆืืืืืื (OCI) ืืื ืึท ืืืืืืืืื, ืึธืคึฟื ืืึทืืืขืจื ืึทื ืก ืกืืจืืงืืืจ ืืขืืจืื ืืขื ืืื ืื ืืื ืืงืก ืืืืงืืคึผืขืืืข. ืื OCI ืืืื ืกืคึผืขืกืืคืืงืึทืืืึธื ืืืคืืื ื ืื ืืึทืกืืจื ืกืืึทื ืืึทืจืืก ืคึฟืึทืจ ืงืึทื ืืืื ืขืจ ืืืื ืืื ืจืื ืืืืข ืคึฟืึธืจืืึทืืืจืื ืืขื ืฆื ืขื ืฉืืจ ืึทื ืึทืืข ืงืึทื ืืืื ืขืจ ืขื ืืืฉืึทื ื ืงืขื ืขื ืืืืคื ืงืึทื ืืืื ืขืจ ืืืืืขืจ ืืืฉืืคื ืืืจื ืงืืื ืืืืขื ืืขืฆืืึทื.
ืฆื ืงืึทื ืืึทืืึทื ืืื ืึท ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ืืึทื ืืืืงืืขื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึท ืงืึทื ืืืื ืขืจ ืืืื ืืื ืึทืจืืืกืืขืื ืืขื ืืืื ืฆื ืึท ืฉืขืจื ืจืขืืืกืืจื. ืืขืจ ืงืึทื ืืืื ืขืจ ืจืื ืืืืข ืจืืืจืืืื ืืขื ืืืื ืคืื ืื ืจืขืืืกืืจื, ืึทื ืคึผืึทืงืก ืขืก ืืื ืืืืคื ืื ืึทืคึผืืึทืงืืืฉืึทื ืื ืขืก.
ืืืขืจืกืืข 2.3 ืคืื ืกืคึผืจืื ื ืืึธืึธื ืืื ืคึผืืืืื ืก ืคึฟืึทืจ ืงืจืืืืืื ื OCI ืืืืืขืจ.
ืื ืื ืึท ืงืึทื ืืืื ืขืจ ืืืื ืื ืืจืืืืฆืืื ืขืื ืืืขื
ืงืจืืืืืื ื ืืึธืงืงืขืจ ืืืืืขืจ ืคึฟืึทืจ ืกืคึผืจืื ื ืืึธืึธื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืืืขืจ ืืจืื ื ืืืจื ืึทืืื ื ืขืืืขืืข ืื ืกืืจืึทืงืฉืึทื ื ืฆื ืื ืืึธืงืงืขืจ ืืขืงืข.
ืืืจ ืขืจืฉืืขืจ ืืึทืื ืึทื ืขืงืกืขืงืืืึทืืืข JAR ืืขืงืข ืืื, ืืื ืึท ืืืื ืคืื ืื ืืึธืงืงืขืจ ืืขืงืข ืื ืกืืจืึทืงืฉืึทื ื, ื ืึธืืืึทืื ืื ืขืงืกืขืงืืืึทืืืข JAR ืืขืงืข ืืืืฃ ืฉืคึผืืฅ ืคืื ืื ืืึทืืข JRE ืืืื ื ืึธื ืึทืคึผืืืืื ื ืื ื ืืืืืง ืกืขืืืื ืืก.
ืืึธืืืจ ืฉืึทืคึฟื ืืื ืืืขืจ ืคืจืืืื ื ืึทืคึผืืึทืงืืืฉืึทื ืืืืฃ web
, lombok
ะธ 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
ืื ืืืึทืืข ืคืื โโืืืึธืืงื ืืืืขื ืคึผืึทืงืึทืืืฉืึทื
ืืืื ืขืจ ืคืื ืื ืืืืคึผื ืืขื ืขืคืืฅ ืคืื ื ืืฆื 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 ืืขืงืข, ืืื ืืึทืื ืืึธืืืื ืืืืื ืึทืืึธื ืืื ืงืึทืฉื ืืืืฃ ืืขืจ ืืึทืืขืืึธืก ืกืืกืืขื.
ืืืืื ืึท ืืื ืคึผืืึทืกื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืคึผืืื ืืขืฉืึทืก ืึทืคึผืืึทืงืืืฉืึทื ืืขืจืืืึทื ืืืงืื ืืขื ืืื ืงืึทื ืืืื ืขืจ ืกืงืขืืืฉืืืื ื. ืืื ืืขืืืืื ืืื ืืขื ืืืึทืืจืึทืืข:
ืืื ืื ืคืืืืขื ืืข ืกืขืงืฉืึทื ื, ืืืจ ืืืขืื ืงืืงื ืืื ืืื ืฆื ืืึทืื ืื ืึธืคึผืืืืืืขื ืืืืืขืจ ืคึฟืึทืจ ืึท ืกืคึผืจืื ื ืืึธืึธื ืึทืคึผืืึทืงืืืฉืึทื.
ืฉืึทืคึฟื ืึท ืึธืคึผืืืืืืขื ืงืึทื ืืืื ืขืจ ืืืื ืคึฟืึทืจ ืึท ืคืจืืืื ื ืฉืืืืื ืึทืคึผืืึทืงืืืฉืึทื ื ืืฆื 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-layertools
JAR ืึทื ืฉืืึธื ืคืื ืึทืคึผืืึทืงืืืฉืึทื:
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
ืืขืจ ืจืขืืืืืึทื ืืืืืื ืื ืงืึทืืึทื ืื list
, extract
ะธ 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