αα»αααΊαααααΆαααααΆααα ααΆαααααααΆαααααααα α·ααααααα»αααΆαααα ααα αααααααα·ααΈααΆαα½αααΉαααΆαα’αΆααααααααααααα·ααΈ αα·αααααααααααααα·ααααα·ααΆαααΆααα’ααααααααΆ α αΎααααααΆαααααααααΌαααΆαα ααΆααααα·ααααΆαααααααααααΆα
α’αααααααααααααααααααα·ααΈαααααααααΆαααα»αααΆααααα»ααααααα·ααΈ Spring Bootα
- αααααΎαααΌαααΆα Docker αααααααΎα―αααΆα Docker,
- αααααΎαααΌαααΆα OCI ααΈααααααααααααΎ Cloud-Native Buildpack,
- αα·αααΆααααααΎαααααα·αααααΆαααΌαααΆααααααααΎαααΆααααααΆααααααααααααα JAR αα ααΆαααααΆααααααααααααΆαααααααΎα§ααααααα α»αααααΆααα
α§ααΆα αααααΌα
α’ααααααααααααΌαααΆαα’ααααα§ααΆα αααααΌαααΆαααΆα
ααΆααααααααα»αααΊααα
ααΎαααΉαα αΆααααααΎαααΆαα½αααΉαααΆααα container αααααααΎαααα»αα’αααααα
- ααΌαααΆααα»αααΊαααα α―αααΆαααααααααααΆααααΆααα ααΎαααΉαααααααααααααα·ααΈααααααΎααα ααΆααΌαααΆααα»αααΊααααααααααΎαααΆαα§αααααααΆααααα
- αα»αααΊαααα ααΆα§ααΆα ααααααα’αΆα ααααα·ααααα·ααΆαααααΌαααΆααα»αααΊαααα
- αααΆαααΈααα»αααΊαααα ααααΎαααΆααααα·αααα½ααα»αααααΌααααααΆααααααΎαααΆααα»αααΊαααα
- ααα αΆαααααααα»αααΊαααα αα»αααααΌααααααΆαααΈαααααααΆαααΈααα»αααΊαααααααΎαααΆαα
- ααΆαα α»ααααααΈαα»αααΊαααα ααΈααΆααααΌαα αααααααΎαααααΆααααααα»ααα αα·αα ααα αΆαααΌαααΆααα»αααΊαααα
- αααααααΆα OCI:
αααα·ααααα½α ααααΎαααΎααα»αααΊααα (OCI) ααΊβααΆβαα ααΆααααααααβα’αα·ααΆααα·α αα βααΎαα αα αβααααΆαβαααβαααααΎαβα‘αΎαβαααα»αβααΌααα·αα·βααΈαα»α α ααΆααααααΆααααΌαααΆα OCI ααααααααααααΆαα§ααααΆα αααααααααΆααααΌαααΆααα»αααΊααα αα·ααααααααααααααΎαααΆα ααΎααααΈααΆααΆααΆαααΆαααΈααα»αααΊαααααΆααα’ααα’αΆα ααααΎαααΆαααΌαααΆααα»αααΊαααααααααααΎαα‘αΎααααα§αααααααΆααααααΆαα½αα
ααΎααααΈαααα»ααααααα·ααΈ ααΎααα»ααααααα·ααΈααααααΎααααα»αααΌαααΆααα»αααΊααα α αΎααααααααΆαααΌαααΆαααααα ααΆαααααααΈααααααααααΆαα αααααααα ααααααααααΎαααΆααα»αααΊαααααΆαααααΌαααΆααααααΈαααααΈααααα αααααΆααΆ α αΎαααααΎαααΆααααααα·ααΈαα ααΆααααα»αααΆα
αααα 2.3 αα Spring Boot αααααααΌααααααα·ααΈαααα½ααααααΆαααααααΎαααΌαααΆα OCI α
ααΆααααΆαααΌαααΆααα»αααΊαααααΆααα·ααΈαααααααΈ
ααΆααααααΎαααΌαααΆα Docker αααααΆαααααααα·ααΈ Spring Boot ααΊααΆααααα½αααΆαααααααααααααΆαααααΆααα½αα ααα½ααα α―αααΆα Docker α
ααααΌαααΎααααααΎαα―αααΆα JAR αααα’αΆα ααααα·ααααα·ααΆα α αΎαααΆααααααα½αααααΆαααααΆαα―αααΆα Docker α ααααα―αααΆα JAR αααα’αΆα ααααα·ααααα·ααΆααα ααΎααααΌαααααΌαααΆα JRE ααΌαααααΆααααααΆααααΈα’αα»ααααααΆααααααα αΆαααΆα αα
ααααααααΎααααααα·ααΈ Spring ααααααΎααα
ααΎ 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 αααα’αΆα ααααα·ααααα·ααΆααααααΆαααααααα·ααΈα ααΎαααααΌαααααααα 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α
ααΌα αααααΎαα’αΆα ααΎαααΎα αααααΆαααααααα·ααΈαααααΎαααΆαααααααααΆααααααα αααΌαααΆαα ααΎαα ααααΆαααααααααα ααααααααΆααααααα αααα»ααααααααΆαααααα αααααΆααααααα½αααααΆααααααΎαααααα·αααααΆαααααααΎαα
ααΆααααααΎαααΌαααΆααα»αααΊααααααααααΎ Buildpack
α’ααααααααααααααααα αααααααΎαααα
α’αααααααααααααααΆαααα½αααααΆαααααΎααααΆαα 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 ααααΎ
ααΌααααααααααΎαααααα·αααααΆααααααααΎααΆαααααααααα·ααΈαα ααααα·αααΆα ααααα‘ααααΈααΆαα’αΆααααααα Spring Framework α
αααααΆααααΆαα’αΆααααα ααααααααΎαααΆα―αααΆα JAR ααααααΆααααααΌαααΆαααΆαααααααααααα α αΎαααΆααααααΆαα»ααααα»αααααΆαααααααΆαααα ααΎαααααααααααΆαααΈαα
ααΆααααααααΆααααααΎααααααααα·ααΈααα»ααααααααααααΌαααΆαααΆαααα‘α»ααααα’αΆααααααααααα·ααΈ αα·αααΆααααααααΆααα·ααΆααα»αα ααΌα αααααΆααααα αΆααααα»αααααΆααααΆααααα
αα αααα»ααααααααΆαααααα ααΎαααΉαααΎαααΈαααααααααΎαααΌαααΆααααααΆααααααα’ααΆααααααααααΆαααααααα·ααΈ 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 ααααΆααα
ααΆααααααΎαααΌαααΆααα»αααΊαααααααααααΎαα‘αΎααααααΆαααααααα·ααΈ 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-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
α―αααΆαααΆαααααΆααααααα½ααααα½αααααααΌαααΆααααααααα
ααΌαααΆα 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 α αΎαααΆαα’αΆαααααααααΌαααΆααα»ααααα»αααααΆαααααααΆαααααα»ααααααΆααααΆα ααααα‘ααα
ααΆαααααΆαα’αΆαααααααΆααααα»αααΎαααααΆααααΈαα½αα
ααΎαα’αΆα
ααΆαααααααααα αααααααα·ααααααα·ααΈααααααααα αααααΆαααααΆαα’αΆαααααααααΆαααααα½αααΆαα½αααααααΎααα
ααΆααααΆααααΆα
ααααα‘αααααα½αα±ααααΆαααα
ααα
αααα½αααΆααΆαα½ααααααα·ααΈααααααααΆααα½αααΆαα
αααα»α 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 α
ααΎαααααΆααα·αα·αααααΎαααΆααααααΎαααααα·αααααΆααα»αααΊαααααααααΎαααααα αααααΎαααααΎαααΆααα»αααΆααααααΆαααααααΆαααΆαα’αΆααααααα ααΆαααααΆααααΆα ααααα‘αα αααααααΌαααΆααα»ααααα»αααααΆαααααααΆαααα ααΎαααΆαααΈα α αΎααααααΆααααααΎααααααααα·ααΈααααΌαααΆααααα»ααα ααααααααααααα αααα»ααααΆαααΈαααααα·ααααα·αααααα»αααΊαααα
α’αααα’αΆα
αααααααααΌααααααααΆααα’αααααααΆαααααΎαα
αααα»αα’ααααααα
ααα ααααΈαααααΆααααααααΆ
αααααΆααΆαααααααααααΈαααααΆααααααααΆαααααΎαααΆαααααΎαααα»αα’ααααααααα
ααΆααααα’αΆαααα·ααα
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