ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΡΠ°Π½Π°Ρ Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΡΡΠ°Π²ΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Spring Boot ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Docker ΠΎΠ±ΡΠ°Π· ΡΡΠ΅Π· Docker ΡΠ°ΠΉΠ»,
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° OCI ΠΎΠ±ΡΠ°Π· ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Cloud-Native Buildpack,
- ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ°ΡΡΠΈ ΠΎΡ JAR Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π° Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
Β ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΠΏΡΠΈΠ΄ΡΡΠΆΠ΅Π½Π° ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄Β Β .
Π’Π΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² ΡΡΠ°ΡΠΈΡΡΠ°:
- ΠΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (Container image): ΡΠ°ΠΉΠ» Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΎΡΠΌΠ°Ρ. ΠΡΠ΅Π²ΡΡΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ Π² ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
- ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ: ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΎΠ±ΡΠ°Π·Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠ²ΠΈΠ³Π°ΡΠ΅Π» Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (Container engine): Π΄Π΅ΠΌΠΎΠ½ ΠΏΡΠΎΡΠ΅Ρ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- Π₯ΠΎΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (Container host): Ρ ΠΎΡΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- Π Π΅Π³ΠΈΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ (Container registry): ΠΎΠ±ΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ ΠΈ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- Π‘ΡΠ°Π½Π΄Π°ΡΡ OCI:Β β ΡΠΎΠ²Π° Π΅ Π»Π΅ΠΊΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΡΠΎΡΠΌΠΈΡΠ°Π½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Linux Foundation. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ OCI ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π·Π° Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΎΠ±ΡΠ°Π·ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Ρ Π²ΡΡΠΊΠ°ΠΊΡΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
ΠΠ° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΎΠ±ΡΠ°Π· Π² ΠΎΠ±Ρ ΡΠ΅Π³ΠΈΡΡΡΡ. Π‘ΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΠΎΠ·ΠΈ ΠΎΠ±ΡΠ°Π· ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΡΠ°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π° Π³ΠΎ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π½Π΅Π³ΠΎ.
ΠΠ΅ΡΡΠΈΡ 2.3 Π½Π° Spring Boot ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° OCI ΠΎΠ±ΡΠ°Π·ΠΈ.
β Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Docker Π² Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΎΡΠ½Π°ΡΡΡ Π·Π° Docker.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡ Π½Π°ΡΠΈΠ½
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Docker ΠΎΠ±ΡΠ°Π·ΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Spring Boot Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Docker ΡΠ°ΠΉΠ»Π°.
ΠΡΡΠ²ΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» JAR ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° Docker ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ» JAR Π²ΡΡΡ Ρ Π±Π°Π·ΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π· JRE ΡΠ»Π΅Π΄ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½Π°ΡΠ΅ΡΠΎ Spring ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Β Β Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ web,Β lombokΠΈΒ actuator. ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΡΡΠΎ REST ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ API ΡΒ ΠΠΠΠ‘ΠΠΠΠΠΠΌΠ΅ΡΠΎΠ΄.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Docker ΡΠ°ΠΉΠ»
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈΒ Dockerfile:
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=targetonts/**/*.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ΠΎΡ ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠ΄ΡΡΠΆΠ°ΡΠ° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ Docker ΡΠ°ΠΉΠ»:
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
() - ΡΠΎΠ²Π° Π΅ ΠΎΠ±Ρ ΡΠ΅ΡΠΌΠΈΠ½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ βΠΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΊΠ°ΡΠΎ ΡΡΠ»ΡΠ³Π°β (PAAS) Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄. Π’ΠΎΠΉ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΎΡ Heroku ΠΏΡΠ΅Π· 2011 Π³. ΠΈ ΠΎΡΡΠΎΠ³Π°Π²Π° Π΅ ΠΏΡΠΈΠ΅Ρ ΠΎΡ Cloud Foundry, Google App Engine, Gitlab, Knative ΠΈ Π½ΡΠΊΠΎΠΈ Π΄ΡΡΠ³ΠΈ.

ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΎΠ±Π»Π°ΡΠ½ΠΈΡΠ΅ Buildpacks
ΠΠ΄Π½ΠΎ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Buildpack Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ Π΅, ΡΠ΅Β Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ (builder) ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ builder.
Π‘Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π±ΡΡ Π° ΡΡΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°.Β Cloud-Native Buildpacks ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈΡΠ΅, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΉΠΊΠΈ OCI ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ ΠΎΡ Docker Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° Spring Boot
ΠΠ»Π°Π³ΠΈΠ½ΡΡ Spring Boot ΡΡΠ·Π΄Π°Π²Π° OCI ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Buildpack. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π°Β bootBuildImageΠ·Π°Π΄Π°ΡΠΈ (Gradle) ΠΈΠ»ΠΈΒ spring-boot:build-imageΡΠ΅Π»ΠΈ (Maven) ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° Docker.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π² Docker ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠΎΡΠΈΠΌ ΠΈΠΌΠ΅ΡΠΎ Π²Β image tag:
org.springframework.boot
spring-boot-maven-plugin
docker.io/pratikdas/${project.artifactId}:v1ΠΠ΅ΠΊΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Maven, Π·Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΒ build-imageΡΠ΅Π»ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Docker ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
mvn spring-boot:build-imageΠ Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
[INFO] --- spring-boot-maven-plugin:2.3.3.RELEASE:build-image (default-cli) @ usersignup ---
[INFO] ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 'docker.io/pratikdas/usersignup:v1'
[INFO]
[INFO] > ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ builder 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0%
.
.
.. [creator] ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΅ΡΠΈΠΊΠ΅Ρ 'org.springframework.boot.version'
.. [creator] *** ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (c311fe74ec73):
.. [creator] docker.io/pratikdas/usersignup:v1
[INFO]
[INFO] Π£ΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ '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:
com.google.cloud.tools
jib-maven-plugin
2.5.2Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° Jib Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Maven, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΠΈ, ΡΡΠΊ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Docker ΡΠ°ΠΉΠ»ΠΎΠ²Π΅:
mvn compile jib:build -Dimage=/usersignup:v1Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π³ΠΎΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Maven ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄:
[INFO] ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² pratikdas/usersignup:v1...
.
.
[INFO] Π’ΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½Π° [java, -cp, /app/resources:/app/classes:/app/libs/*, io.pratik.users.UsersignupApplication]
[INFO]
[INFO] ΠΠ±ΡΠ°Π· ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΊΠ°ΠΊ pratikdas/usersignup:v1
[INFO] ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ:
[INFO] [==============================] 100.0% Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ°.
ΠΠΎΡΠΈΠ²Π°ΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ:
- ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ: Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΎΠ±ΡΠ°Π·ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ° ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° Ρ ΠΎΡΡΠ°, Π½Π° ΠΊΠΎΠΉΡΠΎ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Π’ΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ Π½Π°ΡΠΈΡΠ° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅. ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π² CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈΡΠ΅.
- Π‘ΠΈΠ³ΡΡΠ½ΠΎΡΡ: Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π³ΠΎΠ»ΡΠΌΠΎ ΠΏΠΎΠ»Π΅ Π·Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ.
ΠΠ±ΡΠ°Π·ΡΡ Π½Π° Docker ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΡΠ΅ΠΊ ΠΎΡ ΡΠ»ΠΎΠ΅Π²Π΅, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π² Π½Π°ΡΠΈΡ Dockerfile.Β ΠΡΠ΅ΠΊΠΈ ΡΠ»ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π΄Π΅Π»ΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΡ Π΄ΠΎΠ»Π½ΠΈΡ ΡΠ»ΠΎΠΉ. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·Π° Π½Π° Docker ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ° Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅ ΠΈ ΠΊΠ΅ΡΠΈΡΠ° Π½Π° Ρ ΠΎΡΡΠ°.
Spring Boot ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Β Β ΠΊΠ°ΡΠΎ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π΄Π΅Π±Π΅Π»ΠΈΡ JAR, Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ΅Π»ΠΈΡ JAR. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΡΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ. ΠΡΡΠ°Π½Π°Π»Π°ΡΠ° ΡΠ°ΡΡ ΡΡΠ΄ΡΡΠΆΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Spring Framework.
Π€ΠΎΡΠΌΡΠ»Π°ΡΠ° Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Spring Framework.
Π‘Π»ΠΎΡΡ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π΄Π΅Π±Π΅Π»ΠΈΡ JAR ΡΠ°ΠΉΠ», ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ ΠΈ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ° Π² Ρ ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
Π‘Π°ΠΌΠΎ ΡΡΠ½ΠΊΠΈΡΡ ΡΠ»ΠΎΠΉ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ,Β ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ°Π·ΠΈ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°:

Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ΅Π·ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Spring Boot.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Spring Boot Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Buildpack
Spring Boot 2.3 ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎΡΡ, ΠΈΠ·Π²Π»ΠΈΡΠ°ΠΉΠΊΠΈ ΡΠ°ΡΡΠΈ ΠΎΡ Π΄Π΅Π±Π΅Π»ΠΈΡ JAR ΡΠ°ΠΉΠ» Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅. Π€ΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° Π½Π°ΡΠ»ΠΎΡΠ²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ²Π½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Spring Boot Maven ΠΏΠ»Π°Π³ΠΈΠ½:
org.springframework.boot
spring-boot-maven-plugin
trueΠΠΈΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΎΠ±ΡΠ°Π· ΠΏΡΡΠ²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Buildpack, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈ Ρ Docker Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ.
ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅Β build-imageMaven ΡΠ΅Π» Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΎΠ±ΡΠ°Π·:
mvn spring-boot:build-imageΠΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Dive, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»ΠΎΠ΅Π²Π΅ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΡΠ»ΠΎΠΉΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ Ρ ΡΠ΅ΡΠ²Π΅Π½ΠΎ) Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠΈ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π΅Π±Π΅Π»ΠΈΡ ΡΠΎΡΠΌΠ°Ρ JAR:

Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΎΠ±ΡΠ°Π· Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Spring Boot Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker
ΠΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Maven ΠΈΠ»ΠΈ Gradle ΠΏΠ»ΡΠ³ΠΈΠ½, Π½ΠΈΠ΅ ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π² JAR Docker ΠΎΠ±ΡΠ°Π· Ρ Dockerfile.
ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 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-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ΠΠ·Ρ
ΠΎΠ΄ΡΡ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅Β ΡΠΏΠΈΡΡΠΊ,Β extractΠΈΒ helpΡΒ helpΠ΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΒ ΡΠΏΠΈΡΡΠΊΠΎΠΏΡΠΈΡΡΠ°:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar listdependencies
spring-boot-loader
snapshot-dependencies
applicationΠΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΊΠ°ΡΠΎ ΡΠ»ΠΎΠ΅Π²Π΅.
Π‘Π»ΠΎΠ΅Π²Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
ΠΠΌΠ΅ Π½Π° ΡΠ»ΠΎΠΉ
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅
dependencies
Π²ΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ, ΡΠΈΡΡΠΎ Π²Π΅ΡΡΠΈΡ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ° SNAPSHOT
spring-boot-loader
ΠΠ»Π°ΡΠΎΠ²Π΅ Π½Π° JAR Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠ°
snapshot-dependencies
Π²ΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ, ΡΠΈΡΡΠΎ Π²Π΅ΡΡΠΈΡ ΡΡΠ΄ΡΡΠΆΠ° SNAPSHOT
application
ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΡΡΠΈ
Π‘Π»ΠΎΠ΅Π²Π΅ΡΠ΅ ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π²Β layers.idxΡΠ°ΠΉΠ»Π° Π² ΡΠ΅Π΄Π°, Π² ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² ΠΎΠ±ΡΠ°Π·Π° Docker. Π’Π΅Π·ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ Π½Π° Ρ
ΠΎΡΡΠ° ΡΠ»Π΅Π΄ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎΡΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ.Β ΠΠ° Ρ
ΠΎΡΡΠ° ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΡΠ°ΠΌΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΡ ΡΠ»ΠΎΠΉ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ.Β .
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅.
Π©Π΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΡΠΈΠ½Π°Π»Π½ΠΈΡ ΠΎΠ±ΡΠ°Π· Π½Π° Π΄Π²Π° Π΅ΡΠ°ΠΏΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄, Π½Π°ΡΠ΅ΡΠ΅Π½Β Β . Π ΠΏΡΡΠ²ΠΈΡ Π΅ΡΠ°ΠΏ ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅, Π° Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·.
ΠΠ΅ΠΊΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ Docker ΡΠ°ΠΉΠ» Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠ΅ΡΠ°ΠΏΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅:
# 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 .Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄:
ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΊΡΠΌ Docker Π΄Π΅ΠΌΠΎΠ½ 20.41MB
Π‘ΡΡΠΏΠΊΠ° 1/12 : ΠΠ’ adoptopenjdk:14-jre-hotspot ΠΊΠ°ΡΠΎ builder
14-jre-hotspot: ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°/adoptopenjdk
.
.
Π£ΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° a9ebf6970841
Π£ΡΠΏΠ΅ΡΠ½ΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ°Π½Π° userssignup:v1ΠΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡ Docker ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ°.
ΠΠ°ΠΊΡΠ°Ρ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Dive, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΈ, Π·Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠ»ΠΎΠ΅Π²Π΅ΡΠ΅ Π² Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π· Docker. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ»ΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠ° ΠΊΠ°ΡΠΎ Π²Ρ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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 ΡΠ°ΠΉΠ»Π°.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π²ΠΊΠ»ΡΡΠ²Π°ΠΉΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π° Π½Π°ΡΠ»ΠΎΡΠ²Π°Π½Π΅, ΠΊΠΎΡΡΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ Π½Π° Ρ ΠΎΡΡΠ°, Π° ΡΡΠ½ΠΊΠΈΡΡ ΡΠ»ΠΎΠΉ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΡΠ°ΡΠΈΡΡΠ° Π½Π°Β Β .
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅
ΠΡΠΎ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅Π·ΡΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π·Π° Π±ΡΡΠ·ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅.
ΠΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
docker system prune -aΠ‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΎΠ±ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker ΡΠ°ΠΉΠ»:
docker build -f -t .Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΎΠ±ΡΠ°Π· ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ (Π±Π΅Π· 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ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
