เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบฑเบเบ‚เบญเบ‡เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบตเบŠเบญเบšเปเบงเปเบฅเบฐเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ•เบปเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบปเปˆเบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบเบงเบกเป€เบญเบปเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot:

  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เป‚เบ”เบเปƒเบŠเป‰เป„เบŸเบฅเปŒ Docker,
  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš OCI เบˆเบฒเบเปเบซเบผเปˆเบ‡เป‚เบ”เบเปƒเบŠเป‰ Cloud-Native Buildpack,
  • เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฎเบนเบšเบžเบฒเบšเปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™เป‚เบ”เบเบเบฒเบ™เปเบเบเบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡ JAR เบญเบญเบเป€เบ›เบฑเบ™เบŠเบฑเป‰เบ™เบ•เปˆเบฒเบ‡เป†เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบซเบผเบฒเบเบŠเบฑเป‰เบ™.

 เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”

เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ เปƒเบ™ GitHub .

เบ„เบณเบชเบฑเบšเบเปˆเบฝเบงเบเบฑเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเบšเบšเบฑเบ™เบˆเบธเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก:

  • เบฎเบนเบšเบžเบฒเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต: เป„เบŸเบฅเปŒเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบชเบฐเป€เบžเบฒเบฐ. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เปˆเบฝเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบฑเบ™เบฎเบนเบšเบšเบฑเบ™เบˆเบธเป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเป‰เบฒเบ‡.
  • Container: เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ‚เบญเบ‡เบฎเบนเบšเบšเบฑเบ™เบˆเบธ.
  • เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบšเบฑเบ™เบˆเบธ: เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ daemon เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเปˆเบ™เบšเบฑเบ™เบˆเบธ.
  • เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต: เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‚เบฎเบชเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบšเบฑเบ™เบˆเบธเบšเบฑเบ™เบˆเบธเปเบฅเปˆเบ™.
  • เบ—เบฐเบšเบฝเบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต: เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบœเบตเบเปเบœเปˆ เปเบฅเบฐเปเบˆเบเบขเบฒเบเบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธ.
  • เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ OCIOpen Container Initiative (OCI) เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบเบฒเบ™เบ›เบปเบเบ„เบญเบ‡เปเบšเบšเป€เบ›เบตเบ”เบ—เบตเปˆเบกเบตเบ™เป‰เบณเปœเบฑเบเป€เบšเบปเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เบกเบนเบ™เบ™เบดเบ—เบด Linux. OCI Image Specification เบเปเบฒเบ™เบปเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเบžเบฒเบš container เปเบฅเบฐเบฎเบนเบšเปเบšเบš runtime เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ container เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเบนเบšเบžเบฒเบš container เบ—เบตเปˆเบชเป‰เบฒเบ‡เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ”เป†.

เป€เบžเบทเปˆเบญเบšเบฑเบ™เบˆเบธเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบซเปเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบฎเบนเบšเบšเบฑเบ™เบˆเบธเปเบฅเบฐเป€เบœเบตเบเปเบœเปˆเบฎเบนเบšเบžเบฒเบšเบ™เบฑเป‰เบ™เป„เบ›เบซเบฒเบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™. เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบšเบฑเบ™เบˆเบธเบšเบฑเบ™เบˆเบธเป€เบญเบปเบฒเบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เบกเบฒเบˆเบฒเบเบฅเบตเบˆเบดเบ”เบŠเบต, เบ–เบญเบ”เบกเบฑเบ™เบญเบญเบ, เปเบฅเบฐเปเบฅเปˆเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบžเบฒเบเปƒเบ™เบกเบฑเบ™.

เป€เบงเบตเบŠเบฑเบ™ 2.3 เบ‚เบญเบ‡ Spring Boot เบชเบฐเปœเบญเบ‡เบ›เบฅเบฑเบเบญเบดเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš OCI.

Docker เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ Docker เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡ container เบ•เปเปˆเป„เบ›เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบซเบกเบฒเบเป€เบ–เบดเบ‡ Docker.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ•เบฒเบกเปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบซเบผเบฒเบเป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเปƒเบชเปˆเป„เบŸเบฅเปŒ Docker.

เบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ JAR เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปเบฅเบฐ, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒ Docker, เบ„เบฑเบ”เบฅเบญเบเป„เบŸเบฅเปŒ JAR เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš JRE เบžเบทเป‰เบ™เบ–เบฒเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

เปƒเบซเป‰เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบžเบฒเบเบฎเบฝเบ™ spring เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบš Spring Initializr เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบžเบดเปˆเบ‡โ€‹เบžเบฒโ€‹เบญเบฒโ€‹เป„เบชโ€‹ weblombokะธ 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เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบต Dockerfile เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰:

docker build  -t usersignup:v1 .

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡:

docker images 

เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ usersignupเบžเป‰เบญเบกโ€‹เบเบฑเบšโ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹, adoptopenjdkเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒ Docker เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

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

เป€เบšเบดเปˆเบ‡เบŠเบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เบฎเบนเบšเบšเบฑเบ™เบˆเบธ

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™ stack เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เปƒเบ™เบฎเบนเบš. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ เป€เบ„เบทเปˆเบญเบ‡เบกเบท  เบ”เบณเบ™เป‰เบณ เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบŠเบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰:

dive usersignup:v1

เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡ Dive: 

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบŠเบฑเป‰เบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ–เบดเบ‡เบชเปˆเบงเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบฎเบนเบšเบžเบฒเบš. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ™เบตเป‰เปƒเบ™เบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเป‚เบ”เบเปƒเบŠเป‰ Buildpack

เบŠเบธเบ”เบ›เบฐเบเบญเบš (Buildpacks) เป€เบ›เบฑเบ™เบ„เปเบฒเบชเบฑเบšเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบ Platform as a Service (PAAS) เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš container เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ”เบ Heroku เปƒเบ™เบ›เบต 2011 เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเป‚เบ”เบ Cloud Foundry, Google App Engine, Gitlab, Knative เปเบฅเบฐเบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ cloud build

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Buildpack เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™เบงเปˆเบฒ เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เบชเบนเบ™โ€‹เบเบฒเบ‡ (เบœเบนเป‰โ€‹เบชเป‰เบฒเบ‡โ€‹) เปเบฅเบฐโ€‹เปเบœเปˆโ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เป„เบ›โ€‹เบ—เบธเบโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ builderโ€‹.

เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบชเบปเบกเบ—เบปเบšเบขเปˆเบฒเบ‡เปเบซเบ™เป‰เบ™เบซเบ™เบฒเบเบฑเบšเป€เบงเบ—เบต. Cloud-Native Buildpacks เบชเบฐเบซเบ™เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบ—เบปเปˆเบงเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเป‚เบ”เบเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฎเบนเบšเปเบšเบšเบฎเบนเบšเบžเบฒเบš OCI, เป€เบŠเบดเปˆเบ‡เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Docker.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ plugin Spring Boot

plugin 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 เป€เบ›เบฑเบ™ plugin เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบˆเบฒเบ 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 plugin เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Maven เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เป„เบŸเบฅเปŒ Docker เปƒเบ”เป†เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰:

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

เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ Maven เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

[INFO] Containerizing application to pratikdas/usersignup:v1...
.
.
[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, io.pratik.users.UsersignupApplication]
[INFO] 
[INFO] Built and pushed image as pratikdas/usersignup:v1
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบฅเบตเบˆเบดเบ”เบŠเบต.

เปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเปเบฅเบฐเป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”

เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เป€เบซเบ”เบœเบปเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš:

  • เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™: เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบชเบฑเปˆเบ‡เบšเบฑเบ™เบˆเบธเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเบˆเบฐเบ–เบทเบเบ”เบถเบ‡เบกเบฒเบˆเบฒเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบฎเบนเบšเบžเบฒเบšเป„เบ›เบซเบฒเป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ—เบตเปˆเปเบฅเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบšเบฑเบ™เบˆเบธ. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™. เบเบฒเบ™เบ”เบถเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบˆเบฒเบเบ—เบฐเบšเบฝเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบงเบฅเบฒเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบเบฒเบงเปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™ orchestration เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเปเบฅเบฐเป€เบงเบฅเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบเบฒเบงเปƒเบ™เบ—เปเปˆ CI.
  • เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž: เบฎเบนเบšเบžเบฒเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบเบฑเบ‡เบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบšเบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ.

เบฎเบนเบšเบžเบฒเบš Docker เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบผเบฒเบเบŠเบฑเป‰เบ™, เป€เบŠเบดเปˆเบ‡เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™ Dockerfile เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปเบ•เปˆเบฅเบฐเบŠเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡ delta เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบŠเบฑเป‰เบ™เบ—เบตเปˆเบ•เบดเบ”เบžเบฑเบ™. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ”เบถเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบญเบญเบเบˆเบฒเบเบฅเบตเบˆเบดเบ”เบŠเบต, เบกเบฑเบ™เบ–เบทเบเบ”เบถเบ‡เป€เบ›เบฑเบ™เบŠเบฑเป‰เบ™เป†เปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป‚เบฎเบ”.

Spring Boot เปƒเบŠเป‰ "JAR เป„เบ‚เบกเบฑเบ™" เปƒเบ™ เป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡ JAR เปœเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ™เป‰เบญเบเป†เบ‚เบญเบ‡ JAR เบ—เบฑเบ‡เปเบปเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบทเป‰เบญเบเป†. เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบฅเบทเบญเปเบกเปˆเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบญเบšเบžเบฒเบเบฎเบฝเบ™ spring.

เบชเบนเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบกเปˆเบ™เบˆเบธเบ”เบชเบนเบ™เบเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบˆเบฒเบ Spring Framework dependencies.

เบŠเบฑเป‰เบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒ JAR เบ—เบตเปˆเบซเบ™เบฒ, เบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ”เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเปเบฅเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเป‚เบฎเบ”.

เบžเบฝเบ‡เปเบ•เปˆเบšเบฒเบ‡เบŠเบฑเป‰เบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ–เบทเบเบ”เบถเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบšเบฑเบ™เบˆเบธ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เปเบœเบ™เบงเบฒเบ”เบ™เบตเป‰:

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot เป‚เบ”เบเปƒเบŠเป‰ Buildpack

Spring Boot 2.3 เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบˆเบฑเบ”เบŠเบฑเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบชเบฐเบเบฑเบ”เป€เบญเบปเบฒเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ JAR เบซเบ™เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบฑเป‰เบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบŠเบฑเป‰เบ™เปเบกเปˆเบ™เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เปเบฅเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰ plugin 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 เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot เป‚เบ”เบเปƒเบŠเป‰ Docker

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ Maven เบซเบผเบท Gradle plugin, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš 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-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

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ listextractะธ helpั helpเป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เปƒเบซเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฑเบš listเบ—เบฒเบ‡เป€เบฅเบทเบญเบ:

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application

เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ dependencies เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเป€เบ›เบฑเบ™เบŠเบฑเป‰เบ™.

เบŠเบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

เบŠเบทเปˆเบŠเบฑเป‰เบ™

เป€เบ™เบทเป‰เบญเปƒเบ™

dependencies

เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบ”เป†เบเปเบ•เบฒเบกเบ—เบตเปˆเบชเบฐเบšเบฑเบšเบšเปเปˆเบกเบต SNAPSHOT

spring-boot-loader

เบซเป‰เบญเบ‡เบฎเบฝเบ™ JAR Loader

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 เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบทเบ tagged.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ Dive เบ„เบทเป€เบเบปเปˆเบฒเป€เบžเบทเปˆเบญเบเบงเบ”เบเบฒเบŠเบฑเป‰เบ™เบ•เปˆเบฒเบ‡เป†เบžเบฒเบเปƒเบ™เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡ ID เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบซเบผเบทโ€‹เป‚เบ„เบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡ Diveโ€‹:

dive userssignup:v1

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เบŠเบฑเป‰เบ™เบ—เบตเปˆเบกเบตเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ 11 KB, เปเบฅเบฐเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบŠเบฑเป‰เบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. 

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Spring Boot

เบชเบฐเบเบฑเบ”เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบŠเบฑเป‰เบ™

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบ”เบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป‚เบ”เบเบเบฒเบ™เบชเบฐเบเบฑเบ”เป€เบญเบปเบฒเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบšเบšเบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบฑเป‰เบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบซเบธเป‰เบกเบซเปเปˆเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป‚เบ”เบเบเบฒเบ™เบ›เบฐเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™ 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.

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบžเบฒเบŠเบฐเบ™เบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบŠเบฑเป‰เบ™เบ—เบตเปˆเบ”เบถเบ‡เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบฑเป‰เบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ—เบตเปˆเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป‚เบฎเบ”เปเบฅเบฐเบŠเบฑเป‰เบ™เบšเบฒเบ‡เป†เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ–เบทเบเป‚เบซเบฅเบ”เปƒเบ™เป€เบงเบฅเบฒเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ–เบฑเบ‡.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบขเบนเปˆเบ—เบตเปˆ GitHub .

เบ„เปเบฒเบชเบฑเปˆเบ‡เบญเป‰เบฒเบ‡เบญเบตเบ‡

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบซเบผเบธเบšเบซเบเปเป‰เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบเบฒเบ™เบฅเบถเบšเบฅเป‰เบฒเบ‡เบšเปเบฅเบดเบšเบปเบ”:

docker system prune -a

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเป‚เบ”เบเปƒเบŠเป‰เป„เบŸเบฅเปŒ Docker:

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

เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเบˆเบฒเบเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ (เป‚เบ”เบเบšเปเปˆเบกเบต Dockerfile):

mvn spring-boot:build-image

เป€เบšเบดเปˆเบ‡เบŠเบฑเป‰เบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช. เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ JAR เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบเบฒเบ™เบงเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปƒเบ™ spring-boot-maven-plugin:

java -Djarmode=layertools -jar application.jar list

เบชเบฐเบเบฑเบ”เบŠเบฑเป‰เบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช. เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ JAR เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบเบฒเบ™เบงเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปƒเบ™ spring-boot-maven-plugin:

 java -Djarmode=layertools -jar application.jar extract

เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธ

docker images

เป€เบšเบดเปˆเบ‡เบ—เบฒเบ‡เบŠเป‰เบฒเบเบžเบฒเบเปƒเบ™เบฎเบนเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต (เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ”เปเบฒเบ™เป‰เปเบฒ):

dive <image ID or image tag>

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com