ΠΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ ΡΡΠ°Π½Π°Π° Π½Π°ΡΠΏΠΎΡΠ°ΠΊΡΠ²Π°Π½ΠΎΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π·Π° ΠΏΠ°ΠΊΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠΎ ΡΠΈΡΠ΅ Π½Π΅ΡΠ·ΠΈΠ½ΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΡΠΎΡΡΠ²Π΅ΡΠΎΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΏΠΎΡΠΎΠ° Π½ΠΈΠ²Π½ΠΎ Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈΠ½ΠΈ.
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΠΎΠΏΡΠ°ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Spring Boot:
- ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π° Docker ΡΠ»ΠΈΠΊΠ° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Docker,
- ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° OCI ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Cloud-Native Buildpack,
- ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΎΠ΄Π²ΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ JAR Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ»ΠΎΠ΅Π²ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π°Π»Π°ΡΠΊΠΈ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½ΠΈΠ²ΠΎΠ°.
ΠΡΠΈΠΌΠ΅ΡΠΎΠΊ ΠΊΠΎΠ΄
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π΅ ΠΏΡΠΈΠ΄ΡΡΠΆΠ΅Π½Π° ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄
Π’Π΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ
ΠΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΡΡΠ°ΡΠΈΡΠ°ΡΠ°:
- Π‘Π»ΠΈΠΊΠ° ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ: Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ. ΠΠ΅ ΡΠ° ΠΏΡΠ΅ΡΠ²ΠΎΡΠΈΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅.
- ΠΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ: ΠΠ·Π²ΡΡΠ½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΎΠ΄ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ.
- ΠΠΎΡΠΎΡ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ: ΠΠ΅ΠΌΠΎΠ½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° Π²ΠΎΠ΄Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ.
- ΠΠΎΠΌΠ°ΡΠΈΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ: ΠΠΎΠΌΠ°ΡΠΈΠ½ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Π½Π° ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠΎΡΠΎΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ.
- Π Π΅Π³ΠΈΡΡΠ°Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ: ΠΠΏΡΡΠ°ΡΠ° Π»ΠΎΠΊΠ°ΡΠΈΡΠ° ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ.
- OCI ΡΡΠ°Π½Π΄Π°ΡΠ΄:
ΠΠ½ΠΈΡΠΈΡΠ°ΡΠΈΠ²Π° Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ (OCI) Π΅ Π»Π΅ΡΠ½Π°, ΠΎΡΠ²ΠΎΡΠ΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ°Π½Π° Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° Linux. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ»ΠΈΠΊΠ° OCI Π³ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠΊΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°Π΅ΡΠ΅ Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ° Π΄Π΅ΠΊΠ° ΡΠΈΡΠ΅ ΠΌΠΎΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΠ΄ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π°Π»Π°ΡΠΊΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅.
ΠΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΡΠ° ΠΎΠ±Π²ΠΈΡΠΊΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ ΡΠ° ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΡΠ°Π° ΡΠ»ΠΈΠΊΠ° Π²ΠΎ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΡΠ΅Π³ΠΈΡΡΠ°Ρ. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ ΡΠ° ΠΏΡΠ΅Π·Π΅ΠΌΠ° ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ, ΡΠ° ΠΎΡΠΏΠ°ΠΊΡΠ²Π° ΠΈ ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ Π½Π΅Π³ΠΎ.
ΠΠ΅ΡΠ·ΠΈΡΠ°ΡΠ° 2.3 Π½Π° Spring Boot ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ OCI ΡΠ»ΠΈΠΊΠΈ.
ΠΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π΅Π½ Π½Π°ΡΠΈΠ½
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ Docker ΡΠ»ΠΈΠΊΠΈ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Spring Boot Π΅ ΠΌΠ½ΠΎΠ³Ρ Π»Π΅ΡΠ½ΠΎ ΡΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Docker.
ΠΡΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° JAR ΠΈ, ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΡΠΏΠ°ΡΡΡΠ²Π°ΡΠ° Π·Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Docker, ΡΠ° ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·Π²ΡΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° 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"]
ΠΠ°ΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° 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
Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΠΎΠΊΠ΅Ρ.
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
ΠΠ·Π»Π΅Π·ΠΎΡ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ Π΅ ΠΊΡΠ΅ΠΈΡΠ°Π½Π° ΠΈ ΡΡΠ°Π²Π΅Π½Π° Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ.
ΠΠΎΡΠΈΠ²Π°ΡΠΈΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ
ΠΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ Π³Π»Π°Π²Π½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°:
- ΠΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ: ΠΠΎ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ° ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈ Π΄ΠΎ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΌΠΎΡΠΎΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ. ΠΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ Π½Π°ΡΠ΅ΠΊΡΠ²Π° ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠ΅. ΠΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ Π΄ΠΎΠ»Π³ΠΈ Π²ΡΠ΅ΠΌΠΈΡΠ° Π½Π° Π·Π°ΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΈ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ Π²ΠΎ ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ CI.
- Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ: ΠΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΠΈΠΌΠ°Π°Ρ ΠΈ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° ΠΎΠ±Π»Π°ΡΡ Π·Π° ΡΠ°Π½Π»ΠΈΠ²ΠΎΡΡΠΈ.
Π‘Π»ΠΈΠΊΠ°ΡΠ° Π½Π° Docker ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ ΠΊΡΠΏ ΡΠ»ΠΎΠ΅Π²ΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ° Π²ΠΎ Π½Π°ΡΠ°ΡΠ° Dockerfile. Π‘Π΅ΠΊΠΎΡ ΡΠ»ΠΎΡ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π° Π΄Π΅Π»ΡΠ° ΠΎΠ΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ ΡΠ»ΠΎΡ. ΠΠΎΠ³Π° ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΠΌΠ΅ ΡΠ»ΠΈΠΊΠ° Π½Π° Docker ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ, ΡΠ°Π° ΡΠ΅ Π²Π»Π΅ΡΠ΅ Π²ΠΎ ΡΠ»ΠΎΠ΅Π²ΠΈ ΠΈ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ.
ΠΠΎΡΠΈΡΡΠΈ ΠΏΡΠΎΠ»Π΅ΡΠ½ΠΈ ΡΠΈΠ·ΠΌΠΈ
Π€ΠΎΡΠΌΡΠ»Π°ΡΠ° Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ° Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ΅Π±Π½ΠΎ Π½ΠΈΠ²ΠΎ ΠΎΠ΄ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅ ΠΎΠ΄ Spring Framework.
Π‘Π»ΠΎΡΠΎΡ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ, ΠΊΠΎΡ Π³ΠΎ ΡΠΎΡΠΌΠΈΡΠ° Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ Π³ΡΡΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° JAR, ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π°Ρ ΠΈ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½.
Π‘Π°ΠΌΠΎ ΡΠ΅Π½ΠΎΠΊ ΡΠ»ΠΎΡ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ Π²Π»Π΅ΡΠ΅ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ°ΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π·Π°ΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅. ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ Π½Π° ΠΎΠ²ΠΎΡ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌ:
ΠΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²ΠΈ, ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° 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
ΠΠ΅ΡΠ²Π΅Π½ ΡΠ΅Π» Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ:
mvn spring-boot:build-image
ΠΠΊΠΎ Π³ΠΎ ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ Dive Π·Π° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡΠ»ΠΎΠ΅Π²ΠΈΡΠ΅ Π½Π° Π΄ΠΎΠ±ΠΈΠ΅Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ»ΠΎΡΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° (ΠΎΡΡΡΠ°Π½ ΡΠΎ ΡΡΠ²Π΅Π½ΠΎ) Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΌΠ°Π» Π²ΠΎ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° ΠΊΠΈΠ»ΠΎΠ±Π°ΡΡΠΈ Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΡΠΎ ΠΎΠ½Π° ΡΡΠΎ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π΄Π΅Π±Π΅Π»ΠΈΠΎΡ ΡΠΎΡΠΌΠ°Ρ JAR:
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΏΡΠΎΠ»Π΅ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° 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
ΡΠ΅ΠΊΠΎΡΠ° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΡΠΈΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π΅ ΡΠΎΠ΄ΡΠΆΠΈ Π‘ΠΠΠΠΠ
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. ΠΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠ΅ ID Π½Π° ΡΠ»ΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠ·Π½Π°ΠΊΠ° ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π· Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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 Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ»ΠΎΠ΅Π²ΠΈΡΠΎΡΡ Π²ΠΎ ΠΏΡΠΎΠ»Π΅ΡΡΠ°-boot-maven-ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ:
java -Djarmode=layertools -jar application.jar list
ΠΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ»ΠΎΠ΅Π²ΠΈ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ. ΠΡΠ΅Π΄ Π΄Π° ΡΠ° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° JAR Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ»ΠΎΠ΅Π²ΠΈΡΠΎΡΡ Π²ΠΎ ΠΏΡΠΎΠ»Π΅ΡΡΠ°-boot-maven-ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ:
java -Djarmode=layertools -jar application.jar extract
ΠΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎ ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ
docker images
ΠΡΠΈΠΊΠ°Π· Π½Π° Π»Π΅Π²Π°ΡΠ° ΡΡΡΠ°Π½Π° Π²ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ (ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° Π½ΡΡΠΊΠ°ΡΠ΅):
dive <image ID or image tag>
ΠΠ·Π²ΠΎΡ: www.habr.com