ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π°Ρ Π° Π² ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΎΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΌΡ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ ΠΈΠΌ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΎΠ±Ρ Π²Π°ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Spring Boot:
- ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΡΠ°ΠΉΠ»,
- ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° OCI ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Cloud-Native Buildpack,
- ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° JAR ΡΠ°ΡΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΠΏΡΠΈΠ΄ΡΡΠΆΠ΅Π½Π° ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ΅Ρ ΠΊΠΎΠ΄
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½Π° ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ
Π©Π΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² ΡΡΠ»Π°ΡΠ° ΡΡΠ°ΡΠΈΡ:
- ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ: ΡΠ°ΠΉΠ» ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
- ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ: ΠΠ·ΠΏΡΠ»Π½ΠΈΠΌ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»: ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° Π΄Π΅ΠΌΠΎΠ½, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΎΡΡ: Π₯ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ°, Π½Π° ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π».
- Π Π΅Π³ΠΈΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ: ΠΠ±ΡΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ ΠΈ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- OCI ΡΡΠ°Π½Π΄Π°ΡΡ:
ΠΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π° Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ (OCI) Π΅ Π»Π΅ΠΊΠ° ΡΠ°ΠΌΠΊΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° ΠΎΡ Linux Foundation. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° OCI ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π·Π° Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
ΠΠ° Π΄Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΈΠ΅ ΠΎΠ±Π³ΡΡΡΠ°ΠΌΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ. Π‘ΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ, ΡΠ°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π° Π³ΠΎ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π½Π΅Π³ΠΎ.
ΠΠ΅ΡΡΠΈΡ 2.3 Π½Π° Spring Boot ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° OCI ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡ Π½Π°ΡΠΈΠ½
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° Spring Boot ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ ΡΡΠ΅Π· Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΡΠΌ Π²Π°ΡΠΈΡ Dockerfile.
ΠΡΡΠ²ΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ JAR ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° Dockerfile, ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡ JAR Π²ΡΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ JRE ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Spring Π½Π° web
, lombok
ΠΈ actuator
. ΠΠΈΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ Π·Π° ΠΏΠΎΡΠΈΠ²ΠΊΠ°, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ API GET
ΠΌΠ΅ΡΠΎΠ΄.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Docker ΡΠ°ΠΉΠ»
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΡΠ΅Π· Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Dockerfile
:
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]
ΠΠ°ΡΠΈΡΡ Dockerfile ΡΡΠ΄ΡΡΠΆΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ adoptopenjdk
, Π²ΡΡΡ
Ρ ΠΊΠΎΠΉΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ JAR ΡΠ°ΠΉΠ» ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΡΠ²Π°ΡΡΠΌΠ΅ ΠΏΠΎΡΡΠ°, 8080
ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ.
Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Maven ΠΈΠ»ΠΈ Gradle. Π’ΡΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Maven:
mvn clean package
Π’ΠΎΠ²Π° ΡΡΠ·Π΄Π°Π²Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ JAR ΡΠ°ΠΉΠ» Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ JAR ΡΠ°ΠΉΠ» Π² Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° Docker Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ.
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠΎΠ·ΠΈ JAR ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° docker build
ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠ΄ΡΡΠΆΠ°Ρ Dockerfile, ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΠΎ-ΡΠ°Π½ΠΎ:
docker build -t usersignup:v1 .
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
docker images
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π³ΠΎΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ usersignup
Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, adoptopenjdk
ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π² Π½Π°ΡΠΈΡ Dockerfile.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠ΅ΠΊΠ° ΠΎΡ ΡΠ»ΠΎΠ΅Π²Π΅ Π²ΡΡΡΠ΅ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅
dive usersignup:v1
ΠΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Dive:
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈΡΡ ΡΠ»ΠΎΠΉ ΡΡΡΡΠ°Π²Π»ΡΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°ΡΡ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΡΠ»ΠΎΠΉ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Π½Π°ΡΠ°ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Buildpack
ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Π»Π°ΠΊ
ΠΠ΄Π½ΠΎ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Buildpack Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΅ ΡΠΎΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎ (builder) ΠΈ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ Π΄ΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ builder.
ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π±ΡΡ Π° ΡΡΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°. Cloud-Native Buildpacks ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ OCI ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΡ Docker Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Spring Boot Plugin
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ Spring Boot ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° OCI ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Buildpack. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° bootBuildImage
Π·Π°Π΄Π°ΡΠΈ (Gradle) ΠΈΠ»ΠΈ spring-boot:build-image
target (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, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΠΈ, ΡΡΠΊ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Dockerfiles:
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 Boot ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°
Π€ΠΎΡΠΌΡΠ»Π°ΡΠ° Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° 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
Π¦Π΅Π»ΡΠ° Π½Π° Maven Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
mvn spring-boot:build-image
ΠΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Dive, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»ΠΎΠ΅Π²Π΅ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈΡΡ ΡΠ»ΠΎΠΉ (ΠΎΠ³ΡΠ°Π΄Π΅Π½ Π² ΡΠ΅ΡΠ²Π΅Π½ΠΎ) Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ Π² ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π΅Π±Π΅Π»ΠΈΡ JAR ΡΠΎΡΠΌΠ°Ρ:
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° ΠΏΡΠΎΠ»Π΅ΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Docker
ΠΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ»ΡΠ³ΠΈΠ½ Maven ΠΈΠ»ΠΈ Gradle, ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½ΠΎ Docker JAR ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ 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-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 Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΎ.
ΠΠ°ΠΊΡΠ°Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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 ΡΠ°ΠΉΠ» ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ° Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΡΠ΅Π· ΠΏΠΎΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π² Dockerfile.
Π Π°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠ°ΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π·Π° Π½Π°ΡΠ»ΠΎΡΠ²Π°Π½Π΅, ΠΊΠΎΡΡΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ Π½Π° Ρ ΠΎΡΡΠ° ΠΈ ΡΡΠ½ΡΠΊ ΡΠ»ΠΎΠΉ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π² Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈΡΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΡΠ°ΡΠΈΡΡΠ° Π½Π°
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅
ΠΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π·Π° Π±ΡΡΠ·Π° ΡΠΏΡΠ°Π²ΠΊΠ°.
ΠΠ·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
docker system prune -a
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Dockerfile:
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