ááœááºááááºáá¬áá»á¬ážááẠá¡ááá®áá±ážááŸááºážáá áºáá¯á¡á¬áž áááºážááá±á¬á·ááºáá²ááºááŸáá·áº áááºáááºááŸá¯á áá ẠááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááŒáá·áº áá¯ááºááá¯ážááŒááºážá¡ááœáẠáŠážá á¬ážáá±ážáááºážáááºážááŒá áºáá¬ááŒá®áž áááºážááá¯á·á¡á¬áž ááá°áá®áá±á¬áááºáááºážáá»ááºáá»á¬ážááá¯á· ááá¯á·áá±á¬ááºáá±ážáá«áááºá
á€áá±á¬ááºážáá«ážááœáẠSpring Boot á¡ááá®áá±ážááŸááºážááᯠááá¯ááŸá±á¬ááºááẠááá°áá®áá±á¬áááºážáááºážáá»á¬ážááᯠáá±á¬áºááŒáá¬ážáááº-
- Docker ááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á Docker áá¯á¶áááºáá®ážááŒááºážá
- Cloud-Native Buildpack ááᯠá¡áá¯á¶ážááŒá¯á á¡áááºážá¡ááŒá áºá០OCI áá¯á¶ááᯠáááºáá®ážááŒááºážá
- JAR á á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠá¡ááœáŸá¬áá±á«ááºážáá»á¬ážá áœá¬ áááááá¬áá»á¬áž á¡áá¯á¶ážááŒá¯á ááá°áá®áá±á¬ á¡ááœáŸá¬áá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážááŒááºážááŒáá·áº áá¯á¶ááááºááᯠá¡áá»áááºááá¯áá±á¬ááºážá¡á±á¬áẠááŒá¯áá¯ááºááŒááºážá
áá¯ááºá¥ááá¬
á€áá±á¬ááºážáá«ážááẠá¡áá¯ááºáá¯ááºáá±á¬áá¯ááºááá°áá¬ááŒáá·áº ááœá²áá¬ážáááºá
ááœááºááááºáᬠáá±á«áá¬ááá»á¬áž
áá±á¬ááºážáá«ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áº ááœááºááááºáá¬áá±á«áá¬áááŒáá·áº á áááºáá«áááºá
- ááœááºááááºáá¬áá¯á¶: áá®ážááŒá¬ážáá±á¬áºáááºáá áºáá¯á ááá¯ááºá áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážááᯠáááºáá±á¬ááºáááááá¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážááᯠááœááºááááºáá¬áá¯á¶á¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²áá«áááºá
- ááá·áºáá±á¬á¡áá¬ááœááºááááºáá¬áá¯á¶á á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá±á¬ á¥ááá¬áá áºáá¯á
- ááœááºááááºáá¬á¡ááºáá»ááº: ááœááºááááºáá¬ááá¯áááºáááºáááºá¡ááœáẠáá¬áááºááŸá daemon áá¯ááºáááºážá ááºá
- ááœááºááááºáá¬á¡áááºááŸááºááœááºááááºáá¬á¡ááºáá»ááºáááºáááºááá·áº áááºáá¶ááœááºááŒá°áá¬á
- ááœááºááááºáá¬á á¬áááºáž: ááœááºááááºáá¬áá¯á¶ááᯠáá¯ááºáá±áááºááŸáá·áº ááŒáá·áºáá±ááẠá¡áá¯á¶ážááŒá¯ááá·áº áá±áá¯áá»áááºáá±áá¬á
- OCI á
á¶ááŸá¯ááºáž:
Open Container Initiative (OCI) Linux áá±á¬ááºáá±ážááŸááºážááœáẠááœá²á·á ááºážáá¬ážáá±á¬ áá±á«á·áá«ážááŒá®áž ááœáá·áºáááºážáá±á¬ á¡á¯ááºáá»á¯ááºááŸá¯áá¯á¶á á¶ááŒá áºáááºá OCI Image Specification ááẠááœááºááááºáá¬á¡ááºáá»ááºáá»á¬áž áááºááá·áº build tool á០áááºáá®ážáá¬ážáá±á¬ ááœááºááááºáá¬áá¯á¶áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±ááẠáá±áá»á¬á á±ááẠááœááºááááºáá¬áá¯á¶ááŸáá·áº runtime áá±á¬áºáááºáá»á¬ážá¡ááœáẠá ááºááŸá¯áá¯ááºáááºážá á¶ááŸá¯ááºážáá»á¬ážááᯠáááºááŸááºáá±ážáá«áááºá
á¡ááá®áá±ážááŸááºážáá áºáá¯á¡á¬áž ááá¯ááŸá±á¬ááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááᯠááœááºááááºáá¬áá¯á¶áá áºáá¯ááœáẠáá¯ááºááá¯ážááŒá®áž ááá¯áá¯á¶ááᯠáá»áŸáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºáá áºáá¯ááá¯á· ááŒáá·áºáá»ááá«áááºá ááœááºááááºáᬠruntime ááẠregistry á០á€áá¯á¶ááᯠáá¯ááºáá°ááŒá®ážá áááºážááᯠáá¯ááºááá¯ážááŒá®áž áááºážá¡ááœááºážááŸá á¡ááá®áá±ážááŸááºážááᯠáá¯ááºáá±á¬ááºáááºá
Spring Boot á áá¬ážááŸááºáž 2.3 ááẠOCI áá¯á¶áá»á¬ážááᯠáááºáá®ážáááºá¡ááœáẠááááºá¡ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
ááá¯ážáá¬áááºážá¡ááá¯ááºáž ááœááºááááºáá¬áá¯á¶áááºáá±á¬ááºááŒááºážá
Spring Boot á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠDocker áá¯á¶áá»á¬ážááᯠáááºáá®ážááŒááºážááẠDocker ááá¯ááºááœáẠááœáŸááºááŒá¬ážáá»ááºá¡áááºážáááºááᯠááá·áºááŒááºážááŒáá·áº á¡ááœááºááœááºáá°áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠááááŠážá áœá¬ executable JAR ááá¯ááºááá¯áááºáá®ážááŒá®áž Docker ááá¯ááºáááºážááœáŸááºáá»ááºáá»á¬ážá áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº ááá¯á¡ááºáá±á¬áááºáááºáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬áẠá¡ááŒá±áᶠJRE áá¯á¶áááááºááŸá executable JAR ááá¯ááºááᯠáá°ážáá°áá«á
áá»áœááºá¯ááºááá¯á·á Spring application ááá¯áááºáá®ážááŒáá«á
áá¯á· 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"]
áá»áœááºá¯ááºááá¯á·á Docker ááá¯ááºááœáẠá¡ááŒá±áá¶áá¯á¶áá«ááŸááááºá adoptopenjdk
áá»áœááºá¯ááºááá¯á·á JAR ááá¯ááºááᯠáá±á¬áºáá®áá°ážááŒá®áž ááááºáááºážááá¯ááœáá·áºááá·áºá¡áá±á«áºááœááºá 8080
áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¬ážáá±á¬ááºáá±ážáááºááŒá
áºáááºá
áá»áŸá±á¬ááºááœáŸá¬ááá¯áááºáá±á¬ááºááŒááºážá
ááááá¯á¶áž Maven ááá¯á·ááá¯áẠGradle ááᯠá¡áá¯á¶ážááŒá¯á á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááᯠáááºáá®ážááẠááá¯á¡ááºáááºá á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠMaven ááá¯á¡áá¯á¶ážááŒá¯áááº-
mvn clean package
áááºážááẠá¡ááá®áá±ážááŸááºážá¡ááœáẠáááºáááºááá¯ááºáá±á¬ JAR ááá¯ááºááᯠáááºáá®ážáá±ážáááºá Docker á¡ááºáá»ááºááœááºáááºáááºááẠဠexecutable JAR ááᯠDocker áá¯á¶á¡ááŒá áºááá¯á· ááŒá±á¬ááºážááẠááá¯á¡ááºáá«áááºá
ááœááºááááºáá¬áá¯á¶ áááºáá®ážááŒááºážá
ááá¯á·áá±á¬ááºáá»áœááºá¯ááºááá¯á·ááẠcommand ááᯠrun ááŒááºážááŒáá·áºá€ executable JAR ááá¯ááºááᯠDocker áá¯á¶ááœááºááá·áºáá«á docker build
á¡á
á±á¬ááá¯ááºážá áááºáá®ážáá¬ážáá±á¬ Dockerfile áá«ááŸááá±á¬ ááá±á¬áá»áẠroot directory ááŸ-
docker build -t usersignup:v1 .
Command ááá¯á¡áá¯á¶ážááŒá¯á á á¬áááºážáá²ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯á¶ááᯠááŒááºááá¯ááºáááº-
docker images
á¡áááºáá« command á output ááœááºáá»áœááºá¯ááºááá¯á·ááá¯á¶áá« á ááºáááºá usersignup
á¡ááŒá±áá¶áá¯á¶ááŸáá·áºáááœá adoptopenjdk
áá»áœááºá¯ááºááá¯á·á Docker ááá¯ááºááœáẠáááºááŸááºáá¬ážáááºá
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
ááœááºááááºáá¬áá¯á¶á¡ááœááºáž á¡ááœáŸá¬áá»á¬ážááᯠááŒáá·áºáá«á
áá¯á¶áá²ááŸá¬ááŸááá²á· á¡ááœáŸá¬ááœá±ááᯠááŒáá·áºááá¯ááºáá¡á±á¬ááºá áá¯á¶ážáááºá
dive usersignup:v1
á€áááºááŸá¬ Dive command á០output á áá áºá áááºáá áºááá¯ááºážááŒá áºááẠá
áá»áœááºá¯ááºááá¯á·ááŒááºááá¯ááºáááºá¡ááá¯ááºážá á¡ááá®áá±ážááŸááºážá¡ááœáŸá¬ááẠáá¯ááºáá¯á¶á¡ááœááºá¡á á¬ážá áááá¬áááºááŸá¬ážáá±á¬á¡ááá¯ááºážááᯠááŒá¯áá¯ááºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯á áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº á¡á±á¬ááºáá«ááá¹ááá»á¬ážááœáẠá€á¡ááœáŸá¬áá¡ááœááºá¡á á¬ážááᯠáá»áŸá±á¬á·áá»ááá¯áá«áááºá
Buildpack ááᯠá¡áá¯á¶ážááŒá¯á ááœááºááááºáá¬áá¯á¶áá áºáᯠáááºáá®ážááŒááºážá
cloud build packages áá»á¬ážá á¡á¬ážáá¬áá»ááº
áá¯á¶áá»á¬ážááá¯áááºáá®ážááẠBuildpack ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáá¡áááá¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážáá²ááŸáá áºáá¯ááŸá¬áááºáž áá¯á¶ááœá²á·á ááºážáá¯á¶ ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáááá¯á០á á®áá¶ááá·áºááœá²ááá¯ááºááŒá®áž builder ááᯠá¡áá¯á¶ážááŒá¯á á¡ááá®áá±ážááŸááºážá¡á¬ážáá¯á¶ážáᶠááŒáá·áºáá±ááá¯ááºáááºá
áááºáá±á¬ááºááŸá¯ áááºáá±á·áá»áºáá»á¬ážááᯠááááºáá±á¬ááºážááŸáá·áº áááºážáááºážáá»ááºáá»áẠááœá²áá¬ážáááºá Cloud-Native Buildpacks áá»á¬ážááẠDocker á¡ááºáá»ááºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºááᯠáá±áá»á¬á á±ááá·áº OCI áá¯ááºáá¯á¶áá±á¬áºáááºááᯠáá¶á·ááá¯ážáá±ážááŒááºážááŒáá·áº ááááºáá±á¬ááºážáá»á¬ážáá áºáá»áŸá±á¬áẠá á¶áááºááŸááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
Spring Boot plugin ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
Spring Boot plugin ááẠBuildpack ááᯠá¡áá¯á¶ážááŒá¯á á¡áááºážá¡ááŒá
áºá០OCI áá¯á¶áá»á¬ážááᯠáááºáá±á¬ááºáááºá áá¯á¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºáá®ážáá¬ážáááºá 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 áá¯á¶ááááºááá¯áááºáá®ážáááºá¡áá¯á¶ážááŒá¯áááºá ááááºá¡ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠcommand ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº Docker áá¯á¶á¡ááŒá
áºáá±á¬áºááŒáá¬ážáá±á¬áá¯á¶ááá¯ááœá±á·ááŒááºááá¯ááºáááº-
docker images
áááá¯á¶ážáá»á¯ááº:
REPOSITORY SIZE
paketobuildpacks/run 84.3MB
gcr.io/paketo-buildpacks/builder 652MB
pratikdas/usersignup 257MB
Jib ááᯠá¡áá¯á¶ážááŒá¯á ááœááºááááºáá¬áá¯á¶áá áºáᯠáááºáá®ážááŒááºážá
Jib ááẠá¡áááºážá¡ááŒá áºáá¯ááºá០ááœááºááááºáá¬áá¯á¶áá áºáá¯á¶ááᯠáááºáá®ážáááºá¡ááœáẠá¡ááŒá¬ážáááºážáááºážáá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážááá·áº Google á០áá¯á¶áááºáá®ážááŸá¯ ááááºá¡ááºáá áºáá¯ááŒá áºáááºá
Configuring jib-maven-plugin
pom.xml ááœááº
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááá¯áááºáá±á¬ááºáááºááŸáá·áº ááœááºááááºáá¬áá¯á¶áá áºáá¯áááºáá®ážááẠMaven á¡áááá·áºááá¯á¡áá¯á¶ážááŒá¯á Jib ááááºá¡ááºááᯠáá¯ááºáá±á¬ááºáááºá ááááºáá¡ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠá€áá±áá¬ááœáẠDocker ááá¯ááºáá»á¬ážááᯠááá¯á¶ážáá±á¬á·áá«á
mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1
á¡áááºáá±á¬áºááŒáá« Maven command ááá¯áá¯ááºáá±á¬ááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá« output ááá¯áááŸááááºááŒá áºáááºá
[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
á¡ááœááºááœáẠááœááºááááºáá¬áá¯á¶á¡á¬áž áááºáá®ážááŒá®áž ááŸááºáá¯á¶áááºááŸá¯ááœáẠááá·áºááœááºážáá¬ážááŒá±á¬ááºáž ááŒááááºá
á¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáááºáá®ážáá¬ážáá±á¬ áá¯á¶áá»á¬ážááᯠáááºáá®ážáááºá¡ááœáẠááŸá¯á¶á·áá±á¬áºááŸá¯áá»á¬ážááŸáá·áº áááºážááá¬áá»á¬áž
áá»áœááºá¯ááºááá¯á·ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá¡ááœáẠá¡áááá¡ááŒá±á¬ááºážáááºážááŸá áºáá¯ááŸááááºá
- ááœááºááá¯ááºáá±áž: ááœááºááááºáᬠáá®ážááŸá¯ááºááŒááºážá áá áºááœáẠááœááºááááºáá¬áá¯á¶áá áºáá¯á¶ááᯠááŸááºáá¯á¶áááºááŒááºážá០ááœááºááááºáá¬á¡ááºáá»ááºááᯠáááºáááºáá±áá±á¬ á¡áááºááŸááºáᶠááŒááºáááºááá°áááºá á€áá¯ááºáááºážá ááºááᯠPlanning áá¯áá±á«áºáááºá registry á០ááŒá®ážáá¬ážáá±á¬ áá¯á¶áá»á¬ážááᯠááœá²áá°ááŒááºážááẠááœááºááááºáᬠáá®ážááŸá¯ááºá áá áºáá»á¬ážááœáẠá¡áá»áááºááá¬ážááœá²ááŒááºážááŸáá·áº CI ááá¯ááºááá¯ááºážáá»á¬ážááœáẠááŸááºáá»á¬ážáá±á¬ áááºáá±á¬ááºáá»áááºáá»á¬ážááᯠááŒá áºáá±á«áºá á±áá«áááºá
- áá¯á¶ááœá¯á¶ááŸá¯: ááá¯ááŒá®ážáá±á¬ áá¯á¶áá»á¬ážááẠá¡á¬ážáááºážáá»ááºáá»á¬ážá¡ááœáẠááá¯ááŒá®ážáá±á¬ á§áááá¬áááºáž ááŸááááºá
Docker áá¯á¶áá áºáá¯ááœáẠáá»áœááºá¯ááºááá¯á·á Dockerfile ááŸá ááœáŸááºááŒá¬ážáá»ááºáá áºáá¯á á®ááᯠááá¯ááºá á¬ážááŒá¯ááá·áº á¡ááœáŸá¬áá áºáá¯á á®áá«áááºáá«áááºá á¡ááœáŸá¬áá áºáá¯á á®ááẠá¡áááºážáá¶á¡ááœáŸá¬ááŸá ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá ááŒá áºááá»áœááºážáá±á«áºáá±áááᯠááá¯ááºá á¬ážááŒá¯áááºá Registry á០Docker áá¯á¶ááᯠáá»áœááºá¯ááºááá¯á·ááœá²áá°áá±á¬á¡áá«á áááºážááᯠá¡ááœáŸá¬áá»á¬ážá¡ááœááºáž ááœá²áá¯ááºááŒá®áž host áá±á«áºááœáẠááááºážáááºážáá¬ážáááºá
Spring Boot ááá¯á¡áá¯á¶ážááŒá¯áááºá
ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá±á¬áºááŒá°áá¬ááẠSpring Framework ááŸá®ááá¯ááŸá¯á០áá®ážááŒá¬ážá¡ááá·áºááœáẠá¡ááá®áá±ážááŸááºážááᯠáá®ážááŒá¬ážááœá²áá¯ááºááŒááºážá¡á¬áž áááá¯ááŒá¯áá«áááºá
áá°áá²áá±á¬ JAR ááá¯ááºá á¡á á¯á¡áá±ážááᯠááœá²á·á ááºážáá¬ážááá·áº ááŸá®ááá¯ááŸá¯á¡ááœáŸá¬ááẠáá áºááŒáááºáᬠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºáá¶á áá áºááœáẠááááºážáááºážáá¬ážáááºá
á¡ááá®áá±ážááŸááºážááœááºážáá¶ááŸá¯áá»á¬ážááŸáá·áº ááœááºááááºáá¬á¡áá»áááºááá¬ážááœá²áá±á ááºá¡ááœááºáž á¡ááá®áá±ážááŸááºážááá«ážááœáŸá¬áá±á¬á¡ááœáŸá¬ááá¯áᬠááœá²áá¯ááºáááºá á€áá¯á¶ááœáẠááŒáá¬ážááá·áºá¡ááá¯ááºáž
á¡á±á¬ááºáá«ááá¹ááá»á¬ážááœáẠSpring Boot á¡ááá®áá±ážááŸááºážá¡ááœáẠá€á¡áá±á¬ááºážáá¯á¶ážáá¯á¶áá»á¬ážááᯠáááºáá®ážáááºážááᯠááŒáá·áºááŸá¯áá«áááºá
Buildpack ááᯠá¡áá¯á¶ážááŒá¯á Spring Boot á¡ááá®áá±ážááŸááºážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážáá±á¬ ááœááºááááºáá¬áá¯á¶áá áºáá¯ááᯠáááºáá®ážááŒááºážá
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>
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á container image ááᯠBuildpack ááŒáá·áº áŠážá áœá¬áááºáá±á¬ááºáááºá ááá¯á·áá±á¬áẠá¡á±á¬ááºáá«ááá¹ááá»á¬ážááœáẠDocker ááŒáá·áº á€ááœá²á·á ááºážáá¯á¶ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
á
áááºááá¯ááºáá¡á±á¬áẠbuild-image
ááœááºááááºáá¬áá¯á¶áááºáá®ážááŸá¯á¡ááœáẠMaven áá
áºááŸááº-
mvn spring-boot:build-image
ááœááºáá±á«áºáá¬áá±á¬áá¯ááºáá¯á¶ááŸá á¡ááœáŸá¬áá»á¬ážááá¯ááŒáá·áºááẠDive ááᯠrun áá«áá á¡ááá®áá±ážááŸááºážá¡ááœáŸá¬ (á¡áá®áá±á¬ááºááŒáá·áºáá±á¬áºááŒáá¬ážáááº) ááẠfat JAR áá±á¬áºáááºááá¯á¡áá¯á¶ážááŒá¯áá¬ážáááºááŸáá·áº ááŸáá¯ááºážááŸááºáá«á áá®ááá¯ááá¯ááºá¡ááœá¬á¡áá±ážááœáẠáá»á¬ážá áœá¬áá±ážáááºáááºááᯠááœá±á·ááá¯ááºáááº-
Docker ááᯠá¡áá¯á¶ážááŒá¯á Spring Boot á¡ááá®áá±ážááŸááºážá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬ ááœááºááááºáá¬áá¯á¶áá áºáá¯ááᯠáááºáá®ážááŒááºážá
Maven ááá¯á·ááá¯áẠGradle ááááºá¡ááºááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡á á¬ážá Docker ááá¯ááºááŒáá·áº á¡ááœáŸá¬ááá¯áẠDocker JAR áá¯á¶áá áºáá¯ááá¯áááºáž áááºáá®ážááá¯ááºáááºá
áá»áœááºá¯ááºááá¯á· Docker ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á á¡ááœáŸá¬áá»á¬ážááá¯áá¯ááºáá°ááŒá®áž áááºážááá¯á·ááá¯áá±á¬ááºáá¯á¶ážáá¯á¶ááá¯á·áá°ážáá°ááẠáá±á¬ááºáááºá¡ááá·áºááŸá áºááá·áºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá
Maven ááᯠá¡ááœáŸá¬ááá¯ááºááœáá·áºááŒá®áž á¡áá¯á¶ážááŒá¯áááºáá±á¬ááºááŒá®ážáá±á¬áẠááœááºáá±á«áºáá¬áá±á¬ JAR á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááẠá€áá²á·ááá¯á· ááŒá áºáá±áááá·áºáááº-
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
á€á¡áááá·áºááᯠrun ááŒááºážááŒáá·áº áááŸáááá¯ááºáá±á¬ command options áá»á¬ážáá«áááºáá±á¬ output ááá¯áá¯ááºáá±ážáááº-
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
output ááẠcommand áá»á¬ážááá¯ááŒááááºá list
, extract
О help
Ñ help
áá¯á¶áá±ááŒá
áºáá«á
á±á command áá²á· run ááŒáá¡á±á¬áẠ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 Loader á¡áááºážáá»á¬áž
snapshot-dependencies
SNAPSHOT áá¬ážááŸááºážáá«ááŸááá±á¬ áááºááá·áºááŸá®ááá¯ááŸá¯áááá¯
application
áá»áŸá±á¬ááºááœáŸá¬á¡áááºážáá»á¬ážááŸáá·áºá¡áááºážá¡ááŒá áºáá»á¬áž
á¡ááœáŸá¬áá»á¬ážááᯠáááºááŸááºáá¬ážáááºá layers.idx
ááá¯ááºááᯠDocker áá¯á¶ááœáẠááá·áºááœááºážááá·áºááẠá áááááŒááºáááºááá°ááŒá®ážáá±á¬áẠáááºážááá¯á·áááŒá±á¬ááºážáá²áá±á¬ááŒá±á¬áá·áº á€á¡ááœáŸá¬áá»á¬ážááᯠhost ááœáẠááááºážáááºážáá¬ážáááºá á¡ááºááááºáá¯ááºáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážá¡ááœáŸá¬ááá¯áᬠáá±á«ááºážáá¯ááºáá¯ááºáá¬ážááŒá®áž á¡ááœááºá¡á
á¬áž áá»áŸá±á¬á·áá»ááŒááºážááŒá±á¬áá·áº ááá¯ááá¯ááŒááºáááºáááºá .
áá®ážááŒá¬ážá¡ááœáŸá¬áá»á¬ážá¡ááŒá Ạááœá²áá¯ááºáá¬ážáá±á¬ ááŸá®ááá¯ááŸá¯ááŒáá·áº áá¯á¶áá áºáá¯ááᯠáááºáá±á¬ááºááŒááºážá
áá±á¬ááºáá¯á¶ážáá¯á¶áá¯áá±á«áºáá±á¬ áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á á¡ááá·áºááŸá
áºááá·áºááŒáá·áº áááºáá±á¬ááºáá«áááºá
á¡ááá·áºáá±á«ááºážáá»á¬ážá áœá¬ áááºáá±á¬ááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·á 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
.
áá»áœááºá¯ááºááá¯á·ááẠcommand ááá¯á¡áá¯á¶ážááŒá¯á Docker image ááá¯áááºáá±á¬ááºáááº-
docker build -f Dockerfile2 -t usersignup:v1 .
ဠcommand ááᯠrun ááŒá®ážáá±á¬ááºáá»áœááºá¯ááºááá¯á·áááºá¡á±á¬ááºáá« output ááá¯áááŸááááºá
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 áá áºáá¯ááŒáá·áº áááºáá®ážááŒá®ážáá±á¬áẠáááºáá¯ááºáá¬ážáááºááᯠáá»áœááºá¯ááºááá¯á· ááœá±á·ááá¯ááºáá«áááºá
áá±á¬ááºáá¯á¶ážááœááºá áá¯ááºáá¯ááºáá¬ážáá±á¬ Docker áá¯á¶á¡ááœááºážááŸá á¡ááœáŸá¬áá»á¬ážááᯠá á áºáá±ážááẠááááºááá²á·ááá¯á· Dive command ááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠDive command ááá¯á· ááá·áºááœááºážááŸá¯á¡ááŒá Ạáá¯á¶ ID ááá¯á·ááá¯áẠáááºááᯠáá±ážáá±á¬ááºááá¯ááºáááº-
dive userssignup:v1
á¡ááœááºááœáẠáááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá á¡ááá®áá±ážááŸááºážáá«ááŸááá±á¬ á¡ááœáŸá¬ááẠááá¯á¡áá« 11 KB áá¬ááŸáááŒá®áž ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯áá»á¬ážááᯠáá®ážááŒá¬ážá¡ááœáŸá¬áá»á¬ážááœáẠááááºážáááºážáá¬ážáááºá
á¡ááœáŸá¬áá áºáá¯áá»ááºážá á®ááœáẠá¡ááœááºážááá¯ááºážááŸá®ááá¯ááŸá¯ááᯠáá¯ááºáá°ááŒááºážá
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á á
áááºááŒáá¯ááºááŸá®ááá¯ááŸá¯áá»á¬ážá¡á¬áž áá®ážááŒá¬ážá¡ááá·áºááá¯á· áá¯ááºáá°ááŒááºážááŒáá·áº áááºážááá¯á·ááᯠá¡ááá®áá±ážááŸááºážááœáẠáá¯ááºááá¯ážááŒááºážá¡á
á¬áž áááºážááá¯á·á¡á¬áž á¡ááá®áá±ážááŸááºážá¡ááá·áºááœáẠááŒá±ááŒá¬ááŒááºážááŒáá·áº á¡ááá®áá±ážááŸááºážá¡ááá·áºá á¡ááœááºá¡á
á¬ážááᯠáááºáá¶áá»áŸá±á¬á·áá»ááá¯ááºáááºá 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 ááá¯ááºááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠáááºááŸááºááŒááºážááŒáá·áº áááºážááᯠááœááºááááºáá¬áá¯á¶áá áºáá¯á¡ááŒá Ạáá¯ááºááá¯ážááá¯ááºáá«á
host áá±á«áºááŸá áááºááŸáºáá¯ááºáá¬ážáá±á¬ áá®ážááŒá¬ážá¡ááœáŸá¬áá»á¬ážááá¯á· ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯ááᯠááœá²áá¯ááºááá·áº á¡ááœáŸá¬ááá¯ááºá¡ááºá¹áá«áááºááᯠááœáá·áºáá¬ážááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·áááœááºááááºáá¬ááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºáááºáááºáž ááŒáá·áºááŸá¯áá²á·ááŒá®áž ááœááºááááºáá¬á áá¯ááºáá±á¬ááºááŸá¯á¡ááºáá»ááºáá»á¬ážááœáẠá¡áá»áááºááá¬ážááœá²áá¬ážáá±á¬ á¡ááœáŸá¬áá áºáá¯ááœáẠá¡ááá®áá±ážááŸááºážá áá«ážááœáŸá¬áá±á¬á¡ááœáŸá¬ááᯠáááºáá¬ážáááºá
áá±á¬ááºážáá«ážááŸá¬áá¯á¶ážáá²á· á¡áááºážá¡ááŒá
áºáá¯ááºá¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ááœá±á·ááá¯ááºáá«áááºá
á¡áááá·áºááá¯ážáá¬áž
á€áá±á¬ááºážáá«ážááœááºáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·áá±á¬ command áá»á¬ážáá¡áá»ááºážáá»á¯ááºááᯠá€ááœááºáá±á¬áºááŒáá¬ážáááºá
á¡ááŒá±á¬ááºážá¡áá¬ááŸááºážáááºážááŒááºáž-
docker system prune -a
Docker ááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á ááœááºááááºáá¬áá¯á¶áá áºáᯠáááºáá®ážááŒááºáž-
docker build -f <Docker file name> -t <tag> .
áá»áœááºá¯ááºááá¯á·ááẠá¡áááºážá¡ááŒá áºáá¯ááºá០(Dockerfile ááá«áá²) ááœááºááááºáá¬áá¯á¶á¡á¬áž áááºáá±á¬ááºáááº-
mvn spring-boot:build-image
ááŸá®ááá¯ááŸá¯á¡ááœáŸá¬áá»á¬ážááᯠááŒáá·áºáá«á á¡ááá®áá±ážááŸááºáž JAR ááá¯ááºááᯠááááºáá±á¬ááºáá®á spring-boot-maven-plugin ááœáẠlayering á¡ááºá¹áá«áááºááᯠááœáá·áºáá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
java -Djarmode=layertools -jar application.jar list
ááŸá®ááá¯ááŸá¯á¡ááœáŸá¬áá»á¬ážááᯠáá¯ááºáá°ááŒááºážá á¡ááá®áá±ážááŸááºáž JAR ááá¯ááºááᯠááááºáá±á¬ááºáá®á spring-boot-maven-plugin ááœáẠlayering á¡ááºá¹áá«áááºááᯠááœáá·áºáá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
java -Djarmode=layertools -jar application.jar extract
ááœááºááááºáá¬áá¯á¶áá»á¬ážá á¬áááºážááᯠááŒáá·áºáá«á
docker images
ááœááºááááºáá¬áá¯á¶á¡ááœááºáž áááºáááºááŒááºážááᯠááŒáá·áºáá« (áá¯ááºáááááá¬ááᯠáááºáááºáá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±-
dive <image ID or image tag>
source: www.habr.com