ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ су постали ΠΏΡ€Π΅Ρ„Π΅Ρ€ΠΈΡ€Π°Π½ΠΎ срСдство Π·Π° паковањС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ са свим зависностима ΠΎΠ΄ софтвСра ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ систСма, Π° Π·Π°Ρ‚ΠΈΠΌ ΡšΠΈΡ…ΠΎΠ²ΠΎ испоруку Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π° ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°.

Овај Ρ‡Π»Π°Π½Π°ΠΊ ΠΏΠΎΠΊΡ€ΠΈΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½Π΅ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ΡšΠ° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅:

  • ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС ΠΏΠΎΠΌΠΎΡ›Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅,
  • ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ОЦИ сликС ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π° користСћи Π¦Π»ΠΎΡƒΠ΄-НативС Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ,
  • ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ сликС Ρ‚ΠΎΠΊΠΎΠΌ Ρ€Π°Π΄Π° одвајањСм Π΄Π΅Π»ΠΎΠ²Π° ЈАР-Π° Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ слојСвС ΠΏΠΎΠΌΠΎΡ›Ρƒ Π²ΠΈΡˆΠ΅ΡΠ»ΠΎΡ˜Π½ΠΈΡ… Π°Π»Π°Ρ‚Π°.

 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

Овај Ρ‡Π»Π°Π½Π°ΠΊ јС ΠΏΡ€ΠΎΠΏΡ€Π°Ρ›Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ€Π°Π΄Π½ΠΎΠ³ ΠΊΠΎΠ΄Π° Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ±-Ρƒ .

Π’Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°

ΠŸΠΎΡ‡Π΅Ρ›Π΅ΠΌΠΎ са Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ˜ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° која сС користи Ρƒ Ρ‡Π»Π°Π½ΠΊΡƒ:

  • Π‘Π»ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°: Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΎΠ³ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΠ²Π°Ρ›Π΅ΠΌΠΎ Π½Π°ΡˆΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Ρƒ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ΠΌ Π°Π»Π°Ρ‚Π° Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅.
  • ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€: Π˜Π·Π²Ρ€ΡˆΠ½Π° инстанца сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.
  • ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈ ΠΌΠΎΡ‚ΠΎΡ€: ДСмонски процСс ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°Π½ Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.
  • Π”ΠΎΠΌΠ°Ρ›ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°: Π“Π»Π°Π²Π½ΠΈ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€ Π½Π° ΠΊΠΎΠΌΠ΅ Ρ€Π°Π΄ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ.
  • РСгистар ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°: ΠžΠΏΡˆΡ‚Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° која сС користи Π·Π° ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ΅ ΠΈ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Ρƒ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.
  • ОЦИ ΡΡ‚Π°Π½Π΄Π°Ρ€Π΄Π˜Π½ΠΈΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π° Π·Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅ (ОЦИ) јС Π»Π°Π³Π°Π½Π°, ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° структура ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ° Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π° Ρƒ ΠΎΠΊΠ²ΠΈΡ€Ρƒ Π›ΠΈΠ½ΡƒΠΊ Ρ„ΠΎΠ½Π΄Π°Ρ†ΠΈΡ˜Π΅. ОЦИ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сликС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ΅ ΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΡ˜ΡΠΊΠ΅ стандардС Π·Π° сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° ΠΊΠ°ΠΊΠΎ Π±ΠΈ сС осигурало Π΄Π° сви ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈ ΠΌΠΎΡ‚ΠΎΡ€ΠΈ ΠΌΠΎΠ³Ρƒ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Ρ›Ρƒ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π΅ Π±ΠΈΠ»ΠΎ којим Π°Π»Π°Ρ‚ΠΎΠΌ Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅.

Π”Π° бисмо ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, ΡƒΠΌΠΎΡ‚Π°Π²Π°ΠΌΠΎ Π½Π°ΡˆΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Ρƒ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈ ΠΎΠ±Ρ˜Π°Π²Ρ™ΡƒΡ˜Π΅ΠΌΠΎ Ρ‚Ρƒ слику Ρƒ Π΄Π΅Ρ™Π΅Π½ΠΎΠΌ рСгистру. Π’Ρ€Π΅ΠΌΠ΅ ΠΈΠ·Π²ΠΎΡ’Π΅ΡšΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° ΠΎΠ²Ρƒ слику ΠΈΠ· рСгистра, Ρ€Π°ΡΠΏΠ°ΠΊΡƒΡ˜Π΅ јС ΠΈ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ ΡƒΠ½ΡƒΡ‚Π°Ρ€ њС.

Π’Π΅Ρ€Π·ΠΈΡ˜Π° 2.3 Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚-Π° ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠ΅ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ОЦИ слика.

Π»ΡƒΡ‡ΠΊΠΈ Ρ€Π°Π΄Π½ΠΈΠΊ јС Π½Π°Ρ˜Ρ‡Π΅ΡˆΡ›Π΅ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°, Π° ΠΌΠΈ користимо Π”ΠΎΡ†ΠΊΠ΅Ρ€ Ρƒ нашим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΠΌΠ°, Ρ‚Π°ΠΊΠΎ Π΄Π° Ρ›Π΅ сС свС Π½Π°ΠΊΠ½Π°Π΄Π½Π΅ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Ρƒ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ односити Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€.

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° имиџа ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π°Π»Π°Π½ Π½Π°Ρ‡ΠΈΠ½

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ јС Π²Π΅ΠΎΠΌΠ° Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ додавањСм Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ упутстава Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ.

ΠŸΡ€Π²ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ½Ρƒ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ ΠΈ, ΠΊΠ°ΠΎ Π΄Π΅ΠΎ упутстава Π·Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ, ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ½Ρƒ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π½Π° основну ΠˆΠ Π• слику Π½Π°ΠΊΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΈΡ… подСшавања.

Π₯ајдС Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ Π½Π°ΡˆΡƒ Π‘ΠΏΡ€ΠΈΠ½Π³ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π½Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π˜Π½ΠΈΡ‚ΠΈΠ°Π»ΠΈΠ·Ρ€ ΡΠ° зависностима weblombokΠΈ actuator. Π’Π°ΠΊΠΎΡ’Π΅ додајСмо ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΎΠ΄ΠΌΠΎΡ€Π° Π·Π° ΠΏΡ€ΡƒΠΆΠ°ΡšΠ΅ АПИ-ја GETΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Π°

Π—Π°Ρ‚ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡˆΠ΅ΠΌΠΎ ΠΎΠ²Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ додавањСм Dockerfile:

FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]

Наша Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° садрТи основну слику ΠΈΠ· adoptopenjdk, Π½Π° Π²Ρ€Ρ…Ρƒ којС ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠΎ Π½Π°ΡˆΡƒ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ ΠΈ Π·Π°Ρ‚ΠΈΠΌ ΠΎΡ‚Π²Π°Ρ€Π°ΠΌΠΎ ΠΏΠΎΡ€Ρ‚, 8080који Ρ›Π΅ ΡΠ°ΡΠ»ΡƒΡˆΠ°Ρ‚ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²Π΅.

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

ΠŸΡ€Π²ΠΎ ΠΌΠΎΡ€Π°Ρ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ користСћи МавСн ΠΈΠ»ΠΈ Π“Ρ€Π°Π΄Π»Π΅. ОвдС користимо МавСн:

mvn clean package

Ово ΠΊΡ€Π΅ΠΈΡ€Π° ΠΈΠ·Π²Ρ€ΡˆΠ½Ρƒ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ. ΠœΠΎΡ€Π°ΠΌΠΎ Π΄Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΡƒΡ˜Π΅ΠΌΠΎ овај ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ ЈАР Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слику Π΄Π° Π±ΠΈ сС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΠΎ Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ машини.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°

Π—Π°Ρ‚ΠΈΠΌ стављамо ΠΎΠ²Ρƒ ΠΈΠ·Π²Ρ€ΡˆΠ½Ρƒ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слику Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker buildΠΈΠ· основног Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° који садрТи Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ Ρ€Π°Π½ΠΈΡ˜Π΅:

docker build  -t usersignup:v1 .

ΠΠ°ΡˆΡƒ слику ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π½Π° листи ΠΏΠΎΠΌΠΎΡ›Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π΅:

docker images 

Излаз Π³ΠΎΡ€ΡšΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜Π΅ Π½Π°ΡˆΡƒ слику usersignupзајСдно са основном сликом, adoptopenjdkΠ½Π°Π²Π΅Π΄Π΅Π½ΠΎ Ρƒ нашој Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ.

REPOSITORY          TAG                 SIZE
usersignup          v1                  249MB
adoptopenjdk        11-jre-hotspot      229MB

ΠŸΡ€Π΅Π³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ слојСвС ΡƒΠ½ΡƒΡ‚Π°Ρ€ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°

Π₯ајдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ Π³ΠΎΠΌΠΈΠ»Ρƒ слојСва ΡƒΠ½ΡƒΡ‚Π°Ρ€ сликС. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΡ›Π΅ΠΌΠΎ Π°Π»Π°Ρ‚ΠΊΠ°  Ρ€ΠΎΠ½ΠΈΡ‚ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠ²Π΅ слојСвС:

dive usersignup:v1

Π•Π²ΠΎ Π΄Π΅Π»Π° ΠΈΠ·Π»Π°Π·Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π”ΠΈΠ²Π΅: 

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Као ΡˆΡ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎ, слој Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρ‡ΠΈΠ½ΠΈ Π·Π½Π°Ρ‡Π°Ρ˜Π°Π½ Π΄Π΅ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ сликС. Π–Π΅Π»ΠΈΠΌΠΎ Π΄Π° смањимо Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΎΠ²ΠΎΠ³ слоја Ρƒ слСдСћим ΠΎΠ΄Π΅Ρ™Ρ†ΠΈΠΌΠ° ΠΊΠ°ΠΎ Π΄Π΅ΠΎ нашС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ-Π°

ΠœΠΎΠ½Ρ‚Π°ΠΆΠ½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (Буилдпацкс) јС ΠΎΠΏΡˆΡ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ који користС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ½ΡƒΠ΄Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠ°ΠΎ услугС (ПААБ) Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ ΠΊΠΎΠ΄Π°. ΠŸΠΎΠΊΡ€Π΅Π½ΡƒΠΎ Π³Π° јС Π₯Π΅Ρ€ΠΎΠΊΡƒ 2011. Π³ΠΎΠ΄ΠΈΠ½Π΅ ΠΈ ΠΎΠ΄ Ρ‚Π°Π΄Π° су Π³Π° ΡƒΡΠ²ΠΎΡ˜ΠΈΠ»ΠΈ Π¦Π»ΠΎΡƒΠ΄ Π€ΠΎΡƒΠ½Π΄Ρ€ΠΈ, Π“ΠΎΠΎΠ³Π»Π΅ Апп Π•Π½Π³ΠΈΠ½Π΅, Π“ΠΈΡ‚Π»Π°Π±, ΠšΠ½Π°Ρ‚ΠΈΠ²Π΅ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ ΠΎΠ±Π»Π°ΠΊΠ°

ЈСдна ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡ… прСдности ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ-Π° Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ слика јС Ρ‚ΠΎ ΠŸΡ€ΠΎΠΌΠ΅Π½Π°ΠΌΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ сликС сС ΠΌΠΎΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Ρ™Π°Ρ‚ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ (Π±ΡƒΠΈΠ»Π΄Π΅Ρ€) ΠΈ прСносити Π½Π° свС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ користСћи Π±ΡƒΠΈΠ»Π΄Π΅Ρ€.

ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈΠ·Ρ€Π°Π΄Π΅ Π±ΠΈΠ»ΠΈ су чврсто ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΈ са ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΌ. Π¦Π»ΠΎΡƒΠ΄-НативС Буилдпацкс ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Ρƒ ΡΡ‚Π°Π½Π΄Π°Ρ€Π΄ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠ° ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π°Ρ˜ΡƒΡ›ΠΈ ОЦИ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сликС, који ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Π΅ Π΄Π° слику ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ.

ΠšΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠ°

Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ ΠΏΡ€Π°Π²ΠΈ ОЦИ сликС ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π° користСћи Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ. Π‘Π»ΠΈΠΊΠ΅ сС ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρƒ ΠΏΠΎΠΌΠΎΡ›Ρƒ bootBuildImageΠ·Π°Π΄Π°Ρ†ΠΈ (Π“Ρ€Π°Π΄Π»Π΅) ΠΈΠ»ΠΈ spring-boot:build-imageΡ†ΠΈΡ™Π΅Π²ΠΈ (МавСн) ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°.

МоТСмо Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ сликС која јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π·Π° Π³ΡƒΡ€Π°ΡšΠ΅ Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ рСгистар Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅ΠΌΠΎ навСсти ΠΈΠΌΠ΅ Ρƒ 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>

Π₯ајдС Π΄Π° користимо МавСн Π΄Π° Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠΌΠΎ build-imageΡ†ΠΈΡ™Π΅Π²ΠΈ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. Π’Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎ Π½Π΅ користимо нијСдан ДоцкСрфилСс.

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користи сС Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Ρ€Π°Π΄Π½Π΅ ОЦИ сликС. Као ΠΈ Ρ€Π°Π½ΠΈΡ˜Π΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ слику Π½Π°Π²Π΅Π΄Π΅Π½Ρƒ ΠΊΠ°ΠΎ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π΅:

docker images 

Π—Π°ΠΊΡ™ΡƒΡ‡Π°ΠΊ:

REPOSITORY                             SIZE
paketobuildpacks/run                  84.3MB
gcr.io/paketo-buildpacks/builder      652MB
pratikdas/usersignup                  257MB

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΠΎΠΌΠΎΡ›Ρƒ Јиб-Π°

Јиб јС Π“ΠΎΠΎΠ³Π»Π΅ Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС који ΠΏΡ€ΡƒΠΆΠ° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ jib-maven-pluginΡƒ ΠΏΠΎΠΌ.ΠΊΠΌΠ»:

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>

Π—Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ Јиб користСћи ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ МавСн Π΄Π° бисмо Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°Π»ΠΈ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. Као ΠΈ Ρ€Π°Π½ΠΈΡ˜Π΅, ΠΎΠ²Π΄Π΅ Π½Π΅ користимо Π½ΠΈΠΊΠ°ΠΊΠ²Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅:

mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1

Након ΠΈΠ·Π²Ρ€ΡˆΠ΅ΡšΠ° Π³ΠΎΡ€ΡšΠ΅ МавСн ΠΊΠΎΠΌΠ°Π½Π΄Π΅, добијамо слСдСћи ΠΈΠ·Π»Π°Π·:

[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

Излаз ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Π΅ Π΄Π° јС слика ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° ΠΈ ΡΠΌΠ΅ΡˆΡ‚Π΅Π½Π° Ρƒ рСгистар.

ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡ˜Π΅ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… слика

Имамо Π΄Π²Π° Π³Π»Π°Π²Π½Π° Ρ€Π°Π·Π»ΠΎΠ³Π° Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ:

  • ΠŸΠ΅Ρ€Ρ„ΠΎΡ€ΠΌΠ°Π½ΡΠ΅: Π£ систСму ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°, слика ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° сС ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° ΠΈΠ· рСгистра слика Π΄ΠΎ хоста који ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. Овај процСс сС Π·ΠΎΠ²Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΡšΠ΅. ΠŸΠΎΠ²Π»Π°Ρ‡Π΅ΡšΠ΅ Π²Π΅Π»ΠΈΠΊΠΈΡ… слика ΠΈΠ· рСгистра Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π° Π΄ΡƒΠ³ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΌ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΡšΠ° Ρƒ систСмима ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈ Π΄ΡƒΠ³ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅ Ρƒ ЦИ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠ°.
  • бСзбСдност: Π’Π΅Ρ›Π΅ сликС Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΈΠΌΠ°Ρ˜Ρƒ Π²Π΅Ρ›Ρƒ ΠΏΠΎΠ²Ρ€ΡˆΠΈΠ½Ρƒ Π·Π° Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ.

Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ Ρ…Ρ€ΠΏΠ΅ слојСва, ΠΎΠ΄ ΠΊΠΎΡ˜ΠΈΡ… сваки прСдставља ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Ρƒ Ρƒ нашСм Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Ρƒ. Π‘Π²Π°ΠΊΠΈ слој прСдставља Π΄Π΅Π»Ρ‚Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Ρƒ доњСм ΡΠ»ΠΎΡ˜Ρƒ. Када ΠΈΠ·Π²ΡƒΡ‡Π΅ΠΌΠΎ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слику ΠΈΠ· рСгистра, ΠΎΠ½Π° сС ΠΏΠΎΠ²Π»Π°Ρ‡ΠΈ Ρƒ слојСвима ΠΈ ΠΊΠ΅ΡˆΡƒΡ˜Π΅ Π½Π° хосту.

Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ користи "Π΄Π΅Π±Π΅Π»Π΅ ЈАР" Ρƒ ΠΊΠ°ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ паковања. Када ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ Π΄Π΅Π±Π΅Π»ΠΈ ЈАР, Π²ΠΈΠ΄ΠΈΠΌΠΎ Π΄Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρ‡ΠΈΠ½ΠΈ Π²Π΅ΠΎΠΌΠ° ΠΌΠ°Π»ΠΈ Π΄Π΅ΠΎ Ρ†Π΅Π»ΠΎΠ³ ЈАР-Π°. Ово јС Π΄Π΅ΠΎ који сС Π½Π°Ρ˜Ρ‡Π΅ΡˆΡ›Π΅ мСња. ΠžΡΡ‚Π°Ρ‚Π°ΠΊ сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ зависности ΠΎΠ΄ Π‘ΠΏΡ€ΠΈΠ½Π³ Π€Ρ€Π°ΠΌΠ΅Π²ΠΎΡ€ΠΊ-Π°.

Π€ΠΎΡ€ΠΌΡƒΠ»Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ сС ΡƒΡΡ€Π΅Π΄ΡΡ€Π΅Ρ’ΡƒΡ˜Π΅ Π½Π° изоловањС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° одвојСном Π½ΠΈΠ²ΠΎΡƒ ΠΎΠ΄ зависности ΠΎΠ΄ Π‘ΠΏΡ€ΠΈΠ½Π³ Π€Ρ€Π°ΠΌΠ΅Π²ΠΎΡ€ΠΊ-Π°.

Блој зависности, који Ρ‡ΠΈΠ½ΠΈ Π½Π°Ρ˜Π²Π΅Ρ›ΠΈ Π΄Π΅ΠΎ Π΄Π΅Π±Π΅Π»Π΅ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° сС само јСдном ΠΈ ΠΊΠ΅ΡˆΡƒΡ˜Π΅ Π½Π° хост систСму.

Π‘Π°ΠΌΠΎ Ρ‚Π°Π½Π°ΠΊ слој Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ сС ΠΏΠΎΠ²Π»Π°Ρ‡ΠΈ Ρ‚ΠΎΠΊΠΎΠΌ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΈ заказивања ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ јС ΠΏΡ€ΠΈΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΎΠ²ΠΎΠΌ Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌΡƒ:

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Π£ слСдСћим ΠΎΠ΄Π΅Ρ™Ρ†ΠΈΠΌΠ° Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ ΠΎΠ²Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½Π΅ сликС Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½Π΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ-Π°

Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ 2.3 ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° слојСвС Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ издваја Π΄Π΅Π»ΠΎΠ²Π΅ Π΄Π΅Π±Π΅Π»Π΅ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Ρƒ засСбнС слојСвС. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΡΠ»ΠΎΡ˜Π΅Π²ΠΈΡ‚ΠΎΡΡ‚ΠΈ јС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π° ΠΈ ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ Сксплицитно ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ МавСн Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠ°:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <layers>
      <enabled>true</enabled>
    </layers>
  </configuration> 
</plugin>

ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΡ›Π΅ΠΌΠΎ ΠΎΠ²Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΡ€Π²ΠΎ са Π‘ΡƒΠΈΠ»Π΄ΠΏΠ°Ρ†ΠΊ-ΠΎΠΌ, Π° Π·Π°Ρ‚ΠΈΠΌ са Π”ΠΎΡ†ΠΊΠ΅Ρ€-ΠΎΠΌ Ρƒ слСдСћим ΠΎΠ΄Π΅Ρ™Ρ†ΠΈΠΌΠ°.

Π₯ајдС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ build-imageМавСн Ρ†ΠΈΡ™ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°:

mvn spring-boot:build-image

Ако ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ Π”ΠΈΠ²Π΅ Π΄Π° бисмо Π²ΠΈΠ΄Π΅Π»ΠΈ слојСвС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚ΡƒΡ˜ΡƒΡ›ΠΎΡ˜ слици, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π΄Π° јС слој Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ (ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Ρ†Ρ€Π²Π΅Π½ΠΎΠΌ бојом) ΠΌΠ½ΠΎΠ³ΠΎ мањи Ρƒ опсСгу ΠΊΠΈΠ»ΠΎΠ±Π°Ρ˜Ρ‚Π° Ρƒ ΠΏΠΎΡ€Π΅Ρ’Π΅ΡšΡƒ са ΠΎΠ½ΠΈΠΌ ΡˆΡ‚ΠΎ смо Π΄ΠΎΠ±ΠΈΠ»ΠΈ користСћи Π΄Π΅Π±Π΅Π»ΠΈ ЈАР Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ… Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика Π·Π° Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½Π΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€-Π°

УмСсто Π΄Π° користимо МавСн ΠΈΠ»ΠΈ Π“Ρ€Π°Π΄Π»Π΅ Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ, Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ ΡΠ»ΠΎΡ˜Π΅Π²ΠΈΡ‚Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ЈАР слику са Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΎΠΌ.

Када користимо Π”ΠΎΡ†ΠΊΠ΅Ρ€, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠΎ Π΄Π²Π° Π΄ΠΎΠ΄Π°Ρ‚Π½Π° ΠΊΠΎΡ€Π°ΠΊΠ° Π΄Π° издвојимо слојСвС ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠΎ ΠΈΡ… Ρƒ ΠΊΠΎΠ½Π°Ρ‡Π½Ρƒ слику.

Π‘Π°Π΄Ρ€ΠΆΠ°Ρ˜ Ρ€Π΅Π·ΡƒΠ»Ρ‚ΡƒΡ˜ΡƒΡ›Π΅Π³ ЈАР-Π° Π½Π°ΠΊΠΎΠ½ ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ° користСћи МавСн са ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½ΠΈΠΌ слојСвањСм Ρ›Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΎΠ²Π°ΠΊΠΎ:

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

Излаз ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ Π΄ΠΎΠ΄Π°Ρ‚Π½ΠΈ ЈАР са ΠΈΠΌΠ΅Π½ΠΎΠΌ spring-boot-jarmode-layertoolsΠΈ layersfle.idxΡ„Π°Ρ˜Π». Ова Π΄ΠΎΠ΄Π°Ρ‚Π½Π° ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€ΡƒΠΆΠ° ΡΠ»ΠΎΡ˜Π΅Π²ΠΈΡ‚Π΅ могућности ΠΎΠ±Ρ€Π°Π΄Π΅, ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ јС описано Ρƒ слСдСћСм ΠΎΠ΄Π΅Ρ™ΠΊΡƒ.

ИздвајањС зависности ΠΎΠ΄ ΠΏΠΎΡ˜Π΅Π΄ΠΈΠ½Π°Ρ‡Π½ΠΈΡ… слојСва

Π”Π° бисмо Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈ издвојили слојСвС ΠΈΠ· нашСг ΡΠ»ΠΎΡ˜Π΅Π²ΠΈΡ‚ΠΎΠ³ ЈАР-Π°, користимо ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ систСма -Djarmode=layertoolsΠ·Π° ΠΏΠΎΡ‡Π΅Ρ‚Π°ΠΊ spring-boot-jarmode-layertoolsЈАР умСсто Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅:

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

Излаз ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ listextractΠΈ 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

КласС ЈАР ΡƒΡ‚ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Ρ‡Π°

snapshot-dependencies

Π±ΠΈΠ»ΠΎ ΠΊΠΎΡ˜Ρƒ зависност Ρ‡ΠΈΡ˜Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° садрТи БНАПБΠ₯ОВ

application

класС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ рСсурси

БлојСви су дСфинисани Ρƒ layers.idxΠ΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ рСдослСдом којим Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π΄ΠΎΠ΄Π°Ρ˜Ρƒ Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слику. Ови слојСви сС ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ˜Ρƒ Ρƒ хосту Π½Π°ΠΊΠΎΠ½ ΠΏΡ€Π²ΠΎΠ³ ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ°ΡšΠ° Ρ˜Π΅Ρ€ сС Π½Π΅ ΠΌΠ΅ΡšΠ°Ρ˜Ρƒ. ΠΠ° хост сС ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° само Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½ΠΈ слој Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΡˆΡ‚ΠΎ јС Π±Ρ€ΠΆΠ΅ Π·Π±ΠΎΠ³ смањСнС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ .

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° сликС са зависностима издвојСним Ρƒ засСбнС слојСвС

ΠšΠΎΠ½Π°Ρ‡Π½Ρƒ слику Ρ›Π΅ΠΌΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚ΠΈ Ρƒ Π΄Π²Π΅ Ρ„Π°Π·Π΅ користСћи ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π·Π² Π²ΠΈΡˆΠ΅ΡΡ‚Π΅ΠΏΠ΅Π½Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° . Π£ ΠΏΡ€Π²ΠΎΠΌ ΠΊΠΎΡ€Π°ΠΊΡƒ Ρ›Π΅ΠΌΠΎ ΠΈΠ·Π΄Π²ΠΎΡ˜ΠΈΡ‚ΠΈ зависности Π° Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΡ€Π°ΠΊΡƒ Ρ›Π΅ΠΌΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ΠΈ ΠΈΠ·Π²ΡƒΡ‡Π΅Π½Π΅ зависности Ρƒ ΠΊΠΎΠ½Π°Ρ‡Π½Ρƒ слику.

Π₯ајдС Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌΠΎ наш Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ Π·Π° Π²ΠΈΡˆΠ΅ΡΡ‚Π΅ΠΏΠ΅Π½Ρƒ Π³Ρ€Π°Π΄ΡšΡƒ:

# 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 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

МоТСмо Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π΄Π° јС Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° са Π˜Π”-ΠΎΠΌ сликС, Π° Π·Π°Ρ‚ΠΈΠΌ ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π°.

ΠšΠΎΠ½Π°Ρ‡Π½ΠΎ, ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π”ΠΈΠ²Π΅ ΠΊΠ°ΠΎ ΠΈ Ρ€Π°Π½ΠΈΡ˜Π΅ Π΄Π° бисмо ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Π»ΠΈ слојСвС ΡƒΠ½ΡƒΡ‚Π°Ρ€ гСнСрисанС Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС. МоТСмо Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ Π˜Π” сликС ΠΈΠ»ΠΈ ΠΎΠ·Π½Π°ΠΊΡƒ ΠΊΠ°ΠΎ ΡƒΠ»Π°Π· Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π”ΠΈΠ²Π΅:

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који садрТи зависности ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚Π΅ ΠΈΠ· Π΄Π΅Ρ™Π΅Π½ΠΎΠ³ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°.

Излаз

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ смо ΠΏΠΎΠ³Π»Π΅Π΄Π°Π»ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Π¦Π»ΠΎΡƒΠ΄-НативС Буилдпацкс-Π° Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ ΠΊΠΎΠ΄Π°. Ово јС Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΡƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€-Π° Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π½Π° ΡƒΠΎΠ±ΠΈΡ‡Π°Ρ˜Π΅Π½ Π½Π°Ρ‡ΠΈΠ½: ΠΏΡ€Π²ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π΄Π΅Π±Π΅Π»Π΅ ΠΈΠ·Π²Ρ€ΡˆΠ½Π΅ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, Π° Π·Π°Ρ‚ΠΈΠΌ јС паковањС Ρƒ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π½Π°Π²ΠΎΡ’Π΅ΡšΠ΅ΠΌ упутстава Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ.

Π’Π°ΠΊΠΎΡ’Π΅ смо Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ нашСг ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ смо ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ ΡΠ»ΠΎΡ˜Π΅Π²ΠΈΡ‚ΠΎΡΡ‚ΠΈ која ΠΏΠΎΠ²Π»Π°Ρ‡ΠΈ зависности Ρƒ засСбнС слојСвС који су ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ Π½Π° хосту, Π° Ρ‚Π°Π½Π°ΠΊ слој Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ сС ΡƒΡ‡ΠΈΡ‚Π°Π²Π° Ρƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΡšΠ° Ρƒ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈΠΌ машинама ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ сав ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½ Ρƒ Ρ‡Π»Π°Π½ΠΊΡƒ Π½Π° Π“ΠΈΡ‚Ρ…ΡƒΠ± .

Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅

Π•Π²ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ којС смо користили Ρƒ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ.

Π‘Ρ€ΠΈΡΠ°ΡšΠ΅ контСкста:

docker system prune -a

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅:

docker build -f <Docker file name> -t <tag> .

Ми Π³Ρ€Π°Π΄ΠΈΠΌΠΎ слику ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ ΠΊΠΎΠ΄Π° (Π±Π΅Π· Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Π°):

mvn spring-boot:build-image

ΠŸΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ слојСвС зависности. ΠŸΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅ сС Π΄Π° јС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° слојСвања ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π° Ρƒ спринг-Π±ΠΎΠΎΡ‚-ΠΌΠ°Π²Π΅Π½-ΠΏΠ»ΡƒΠ³ΠΈΠ½-Ρƒ:

java -Djarmode=layertools -jar application.jar list

Π•ΠΊΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°ΡšΠ΅ слојСва зависности. ΠŸΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ЈАР Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅ сС Π΄Π° јС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° слојСвања ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π° Ρƒ спринг-Π±ΠΎΠΎΡ‚-ΠΌΠ°Π²Π΅Π½-ΠΏΠ»ΡƒΠ³ΠΈΠ½-Ρƒ:

 java -Djarmode=layertools -jar application.jar extract

ΠŸΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ листу слика ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°

docker images

ΠŸΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ са Π»Π΅Π²Π΅ странС ΡƒΠ½ΡƒΡ‚Π°Ρ€ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° (ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅ сС Π΄Π° јС Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Ρ€ΠΎΡšΠ΅ΡšΠ΅ инсталирана):

dive <image ID or image tag>

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ