рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдпрд╕рдХреЛ рд╕рдмреИ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд░ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрд╕рдБрдЧ рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░реНрдиреЗ рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдиреЗ рд░реБрдЪрд╛рдЗрдПрдХреЛ рдорд╛рдзреНрдпрдо рдмрдиреЗрдХреЛ рдЫред
рдпрд╕ рд▓реЗрдЦрд▓реЗ рд╡рд╕рдиреНрдд рдмреБрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬ рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:
- рдбрдХрд░ рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрдХрд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛,
- рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрд░реЛрддрдмрд╛рдЯ OCI рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ,
- рд░ рдмрд╣реБ-рд╕реНрддрд░реАрдп рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ JAR рдХреЛ рднрд╛рдЧрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рддрд╣рд╣рд░реВрдорд╛ рдЕрд▓рдЧ рдЧрд░реЗрд░ рд░рди-рдЯрд╛рдЗрдо рдЫрд╡рд┐ рдЕрдиреБрдХреВрд▓рдиред
рдирдореВрдирд╛ рдХреЛрдб
рдпреЛ рд▓реЗрдЦ рдХрд╛рдо рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЧ рдЫ
рдХрдиреНрдЯреЗрдирд░ рд╢рдмреНрджрд╛рд╡рд▓реА
рд╣рд╛рдореА рд▓реЗрдЦрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдХрдиреНрдЯреЗрдирд░ рд╢рдмреНрджрд╛рд╡рд▓реАрдХреЛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВ:
- рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдврд╛рдБрдЪрд╛рдХреЛ рдлрд╛рдЗрд▓ред рд╣рд╛рдореА рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдг рдЪрд▓рд╛рдПрд░ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВред
- рдХрдВрдЯреЗрдирд░: рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдгред
- рдХрдиреНрдЯреЗрдирд░ рдЗрдиреНрдЬрд┐рди: рдХрдиреНрдЯреЗрдирд░ рдЪрд▓рд╛рдЙрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдбреЗрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛ред
- рдХрдиреНрдЯреЗрдирд░ рд╣реЛрд╕реНрдЯ: рд╣реЛрд╕реНрдЯ рдХрдореНрдкреНрдпреБрдЯрд░ рдЬрд╕рдорд╛ рдХрдиреНрдЯреЗрдирд░ рдЗрдиреНрдЬрд┐рди рдЪрд▓реНрдЫред
- рдХрдиреНрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА: рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рдиред
- OCI рдорд╛рдирдХ:
рдЦреБрд▓рд╛ рдХрдиреНрдЯреЗрдирд░ рдкрд╣рд▓ (OCI) рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЙрдиреНрдбреЗрд╢рди рднрд┐рддреНрд░ рдмрдирд╛рдЗрдПрдХреЛ рдПрдХ рд╣рд▓реНрдХрд╛, рдЦреБрд▓рд╛ рд╢рд╛рд╕рди рд╕рдВрд░рдЪрдирд╛ рд╣реЛред OCI рдЫрд╡рд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рд▓реЗ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд░ рд░рдирдЯрд╛рдЗрдо рдврд╛рдБрдЪрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрджреНрдпреЛрдЧ рдорд╛рдкрджрдгреНрдбрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ рдХрд┐ рд╕рдмреИ рдХрдиреНрдЯреЗрдирд░ рдЗрдиреНрдЬрд┐рдирд╣рд░реВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдгрджреНрд╡рд╛рд░рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐рд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫрдиреНред
рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐рдорд╛ рдмреЗрд░реНрдЫреМрдВ рд░ рддреНрдпреЛ рдЫрд╡рд┐ рд╕рд╛рдЭрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫреМрдВред рдХрдиреНрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдорд▓реЗ рдпреЛ рдЫрд╡рд┐рд▓рд╛рдИ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдмрд╛рдЯ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ, рдпрд╕рд▓рд╛рдИ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░реНрдЫ, рд░ рдпрд╕рдХреЛ рднрд┐рддреНрд░рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдЙрдБрдЫред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреБрдЯрдХреЛ рд╕рдВрд╕реНрдХрд░рдг реи.рей рд▓реЗ OCI рдЫрд╡рд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░рд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ
рд╡рд╕рдиреНрдд рдмреБрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдбрдХрд░ рдлрд╛рдЗрд▓рдорд╛ рдХреЗрд╣реА рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдердкреЗрд░ рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫред
рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп JAR рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рд░, рдбрдХрд░ рдлрд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реЗрдкрдЫрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп JAR рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЖрдзрд╛рд░ JRE рдЫрд╡рд┐рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫреМрдВред
рд╣рд╛рдореНрд░реЛ рд╡рд╕рдиреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ web
, lombok
╨╕ 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
, рдЬрд╕рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ JAR рдлрд╛рдЗрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫреМрдВ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдкреЛрд░реНрдЯ рдЦреЛрд▓реНрдЫреМрдВ, 8080
рдЬрд╕рд▓реЗ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕реБрдиреНрдиреЗрдЫред
рдЖрд╡реЗрджрди рдирд┐рд░реНрдорд╛рдг
рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ Maven рд╡рд╛ Gradle рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╣рд╛рдБ рд╣рд╛рдореА Maven рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ:
mvn clean package
рдпрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп JAR рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред рд╣рд╛рдореАрд▓реЗ рдпреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп JAR рд▓рд╛рдИ рдбрдХрд░ рдЗрдиреНрдЬрд┐рдирдорд╛ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░ рдЫрд╡рд┐рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореАрд▓реЗ рдпреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп JAR рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрд░ рдбрдХрд░ рдЫрд╡рд┐рдорд╛ рд░рд╛рдЦреНрдпреМрдВ 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
рдпрд╣рд╛рдБ рдбрд╛рдЗрдн рдЖрджреЗрд╢рдмрд╛рдЯ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдЕрдВрд╢ рд╣реЛ:
рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд╣рд▓реЗ рдЫрд╡рд┐ рдЖрдХрд╛рд░рдХреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдмрдирд╛рдЙрдБрдЫред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдХреВрд▓рдирдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рдирд┐рдореНрди рдЦрдгреНрдбрд╣рд░реВрдорд╛ рдпрд╕ рддрд╣рдХреЛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
Buildpack рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдХреНрд▓рд╛рдЙрдб рдирд┐рд░реНрдорд╛рдг рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рдлрд╛рдЗрджрд╛
рдЫрд╡рд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рдлрд╛рдЗрджрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛ рдЫрд╡рд┐ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдХреЗрдиреНрджреНрд░реАрдп рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рдмрд┐рд▓реНрдбрд░) рд░ рдмрд┐рд▓реНрдбрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдмреИ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдкреНрд░рдЪрд╛рд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдирд┐рд░реНрдорд╛рдг рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдХрдбрд╛ рд░реВрдкрдорд╛ рдЬреЛрдбрд┐рдПрдХрд╛ рдерд┐рдПред рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХреНрд╕рд▓реЗ OCI рдЫрд╡рд┐ рдврд╛рдБрдЪрд╛рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реЗрд░ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рдорд╛рдирдХреАрдХрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдЫрд╡рд┐ рдбрдХрд░ рдЗрдиреНрдЬрд┐рдирджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред
рд╡рд╕рдиреНрдд рдмреБрдЯ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреБрдЯ рдкреНрд▓рдЧрдЗрдирд▓реЗ рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрд░реЛрддрдмрд╛рдЯ OCI рдЫрд╡рд┐рд╣рд░реВ рдмрдирд╛рдЙрдБрдЫред рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ bootBuildImage
рдХрд╛рд░реНрдпрд╣рд░реВ (рдЧреНрд░реЗрдбрд▓) рд╡рд╛ spring-boot:build-image
рд▓рдХреНрд╖реНрдп (Maven) рд░ рд╕реНрдерд╛рдиреАрдп рдбрдХрд░ рд╕реНрдерд╛рдкрдирд╛ред
рд╣рд╛рдореА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдбрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдкреБрд╢ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫрд╡рд┐рдХреЛ рдирд╛рдо рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред 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 images
рдирд┐рд╖реНрдХрд░реНрд╖:
REPOSITORY SIZE
paketobuildpacks/run 84.3MB
gcr.io/paketo-buildpacks/builder 652MB
pratikdas/usersignup 257MB
Jib рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдЬрд┐рдм рдЧреБрдЧрд▓рдмрд╛рдЯ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд▓рдЧрдЗрди рд╣реЛ рдЬрд╕рд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдбрдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ jib-maven-plugin
pom.xml рдорд╛:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдПрдк рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд░ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди Maven рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Jib рдкреНрд▓рдЧрдЗрди рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рдкрд╣рд┐рд▓реЗ рдЬрд╕реНрддреИ, рд╣рд╛рдореА рдпрд╣рд╛рдБ рдХреБрдиреИ рдкрдирд┐ рдбрдХрд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиреМрдВ:
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 рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВрдорд╛ рд▓рд╛рдореЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рд╣реБрдиреНрдЫред
- рд╕реБрд░рдХреНрд╖рд╛: рдареВрд▓рд╛ рдЫрд╡рд┐рд╣рд░реВрдорд╛ рдкрдирд┐ рдХрдордЬреЛрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдареВрд▓реЛ рдХреНрд╖реЗрддреНрд░ рд╣реБрдиреНрдЫред
рдбрдХрд░ рдЫрд╡рд┐рд▓реЗ рддрд╣рд╣рд░реВрдХреЛ рд╕реНрдЯреНрдпрд╛рдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдЬрд╕рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рд╣рд╛рдореНрд░реЛ рдбрдХрд░рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджреЗрд╢рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред рдкреНрд░рддреНрдпреЗрдХ рддрд╣рд▓реЗ рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рддрд╣рдорд╛ рднрдПрдХрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред рдЬрдм рд╣рд╛рдореА рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдмрд╛рдЯ рдбрдХрд░ рдЫрд╡рд┐ рддрд╛рдиреНрдЫреМрдВ, рдпреЛ рддрд╣рд╣рд░реВрдорд╛ рддрд╛рдирд┐рдиреНрдЫ рд░ рд╣реЛрд╕реНрдЯрдорд╛ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдиреНрдЫред
рд╡рд╕рдиреНрдд рдмреБрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ
рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рд╕реВрддреНрд░рд▓реЗ рд╡рд╕рдиреНрдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдмрд╛рдЯ рдЫреБрдЯреНрдЯреИ рд╕реНрддрд░рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЕрд▓рдЧ рдЧрд░реНрдиреЗ рд╡рд░рдкрд░ рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрджрдЫред
рдирд┐рд░реНрднрд░рддрд╛ рддрд╣, рдЬрд╕рд▓реЗ рдореЛрдЯреЛ JAR рдлрд╛рдЗрд▓рдХреЛ рдереЛрдХ рдмрдирд╛рдЙрдБрдЫ, рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдиреНрдЫ рд░ рд╣реЛрд╕реНрдЯ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдиреНрдЫред
рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЕрдкрдбреЗрдЯ рд░ рдХрдиреНрдЯреЗрдирд░ рд╢реЗрдбреНрдпреБрд▓рд┐рдЩрдХреЛ рдмреЗрд▓рд╛рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рдкрд╛рддрд▓реЛ рддрд╣ рдорд╛рддреНрд░ рддрд╛рдирд┐рдиреНрдЫред рдпрд╕ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рд░реВрдкрдорд╛:
рдирд┐рдореНрди рдЦрдгреНрдбрд╣рд░реВрдорд╛, рд╣рд╛рдореА рд╡рд╕рдиреНрдд рдмреБрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдпреА рдЕрдиреБрдХреВрд▓рд┐рдд рдЫрд╡рд┐рд╣рд░реВ рдХрд╕рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗрдЫреМрдВред
Buildpack рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╕рдиреНрдд рдмреБрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
Spring Boot 2.3 рд▓реЗ рдмрд╛рдХреНрд▓реЛ JAR рдлрд╛рдЗрд▓рдХрд╛ рднрд╛рдЧрд╣рд░реВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╣рд╣рд░реВрдорд╛ рдирд┐рдХрд╛рд▓реЗрд░ рд▓реЗрдпрд░рд┐рдЩрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рд▓реЗрдпрд░рд┐рдЩ рд╕реБрд╡рд┐рдзрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреБрдЯ рдорд╛рднреЗрди рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо рд╣реБрдиреБрдкрд░реНрдЫ:
<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
рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдирддрд┐рдЬрд╛рдХреЛ рдЫрд╡рд┐рдорд╛ рддрд╣рд╣рд░реВ рд╣реЗрд░реНрди рдбрд╛рдЗрдн рдЪрд▓рд╛рдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рддрд╣ (рд░рд╛рддреЛрдорд╛ рд░реЗрдЦрд╛рдВрдХрд┐рдд) рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рджрд╛рдпрд░рд╛рдорд╛ рд╣рд╛рдореАрд▓реЗ рдмрд╛рдХреНрд▓реЛ JAR рдврд╛рдБрдЪрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдЫ:
рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╕рдиреНрдд рдмреБрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
Maven рд╡рд╛ Gradle рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рд╣рд╛рдореА рдбрдХрд░ рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рдПрдХ рд╕реНрддрд░рд┐рдд рдбрдХрд░ JAR рдЫрд╡рд┐ рдкрдирд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рдЬрдм рд╣рд╛рдореА рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рд╣рд╛рдореАрд▓реЗ рддрд╣рд╣рд░реВ рдирд┐рдХрд╛рд▓реНрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрдиреНрддрд┐рдо рдЫрд╡рд┐рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рджреБрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдгрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рд▓реЗрдпрд░рд┐рдЩ рд╕рдХреНрд╖рдо рднрдПрдХреЛ рдорд╛рднреЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░реЗрдкрдЫрд┐ рдирддрд┐рдЬрд╛рдХреЛ JAR рдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫрдиреН:
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 рдЫрд╡рд┐ рдорд╛ рдердкрд┐рдиреБ рдкрд░реНрдЫред рдпреА рддрд╣рд╣рд░реВ рдкрд╣рд┐рд▓реЛ рдкреБрди: рдкреНрд░рд╛рдкреНрддрд┐ рдкрдЫрд┐ рд╣реЛрд╕реНрдЯрдорд╛ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИрдирдиреНред рдХреЗрд╡рд▓ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд╣ рд╣реЛрд╕реНрдЯрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдЖрдХрд╛рд░ рдШрдЯреЗрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЫрд┐рдЯреЛ рдЫ .
рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╣рд╣рд░реВрдорд╛ рдирд┐рдХрд╛рд▓рд┐рдПрдХрд╛ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрд╕рдБрдЧ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ
рднрдирд┐рдиреЗ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рдореА рджреБрдИ рдЪрд░рдгрд╣рд░реВрдорд╛ рдЕрдиреНрддрд┐рдо рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗрдЫреМрдВ
рдмрд╣реБ-рдЪрд░рдг рдирд┐рд░реНрдорд╛рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рдбрдХрд░рдлрд╛рдЗрд▓ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реМрдВ:
# 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 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
рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдкреБрдирдГрдкреНрд░рд╛рдкреНрдд рд╕рдВрдЧрдарди рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ред
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдпрд╕ рд▓реЗрдЦрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдбрдмрд╛рдЯ рд╕реАрдзрд╛ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╣реЗрд░реЗрдХрд╛ рдЫреМрдВред рдпреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░рд┐рдХрд╛рд▓реЗ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд┐рдХрд▓реНрдк рд╣реЛ: рдкрд╣рд┐рд▓реЗ рдмрд╛рдХреНрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп JAR рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╕рдкрдЫрд┐ рдбрдХрд░ рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐рдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рд╣рд╛рдореАрд▓реЗ рд▓реЗрдпрд░рд┐рдЩ рд╕реБрд╡рд┐рдзрд╛ рд╕рдХреНрд╖рдо рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рдХрдиреНрдЯреЗрдирд░рд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдХреБрд░рд╛рдорд╛ рдкрдирд┐ рд╣реЗрд░реНтАНрдпреМрдВ рдЬрд╕рд▓реЗ рд╣реЛрд╕реНрдЯрдорд╛ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдПрдХрд╛ рдЕрд▓рдЧ рддрд╣рд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рддрд╛рдиреНрджрдЫ рд░ рдХрдиреНрдЯреЗрдирд░рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрдиреНрдЬрд┐рдирд╣рд░реВрдорд╛ рд╕рдордп рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдкрд╛рддрд▓реЛ рддрд╣ рд▓реЛрдб рд╣реБрдиреНрдЫред
рддрдкрд╛рдИрд▓реЗ рд▓реЗрдЦрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╕рдмреИ рд╕реНрд░реЛрдд рдХреЛрдбрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рдЖрджреЗрд╢ рд╕рдиреНрджрд░реНрдн
рд╣рд╛рдореАрд▓реЗ рдпрд╕ рд▓реЗрдЦрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХрд╛ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рджреНрд░реБрдд рд░рдирдбрд╛рдЙрди рдпрд╣рд╛рдБ рдЫред
рд╕рдиреНрджрд░реНрдн рдХреНрд▓рд┐рдпрд░рд┐рдЩ:
docker system prune -a
рдбрдХрд░ рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ:
docker build -f <Docker file name> -t <tag> .
рд╣рд╛рдореА рд╕реНрд░реЛрдд рдХреЛрдбрдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░ рдЫрд╡рд┐ рдмрдирд╛рдЙрдБрдЫреМрдВ (рдбрдХрд░рдлрд╛рдЗрд▓ рдмрд┐рдирд╛):
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