Imigqomo iye yaba yindlela ekhethwayo yokupakisha isicelo kunye nayo yonke isoftware yayo kunye nokuxhomekeka kwenkqubo yokusebenza kwaye emva koko ihanjiswe kwiindawo ezahlukeneyo.
Eli nqaku ligubungela iindlela ezahlukeneyo zokufaka isicelo seSpring Boot:
- ukwenza umfanekiso weDocker usebenzisa ifayile yeDocker,
- ukwenza umfanekiso we-OCI kumthombo usebenzisa i-Cloud-Native Buildpack,
- kunye nexesha lokuqhuba umfanekiso wokuphucula ngokuhlula iinxalenye ze-JAR kwimigangatho eyahlukeneyo usebenzisa izixhobo ezininzi.
Umzekelo wekhowudi
Eli nqaku lihamba kunye nomzekelo wekhowudi yokusebenza .
Isigama sesikhongozeli
Siza kuqala ngesigama sesikhongozeli esisetyenziswe kwinqaku:
- Umfanekiso wesikhongozeli: ifayile yohlobo oluthile. Siza kuguqula isicelo sethu sibe ngumfanekiso wesikhongozeli ngokuqhuba isixhobo sokwakha.
- Isikhongozelo: Umzekelo ophunyeziweyo womfanekiso wesikhongozeli.
- Injini yesikhongozeli: Inkqubo yedaemon enoxanduva lokuqhuba isikhongozeli.
- Umamkeli wesikhongozeli: Ikhompyuter yenginginya apho injini yesikhongozeli isebenza khona.
- Ubhaliso lwesikhongozeli: Indawo jikelele esetyenziselwa ukupapasha nokusasaza umfanekiso wesikhongozeli.
- OCI umgangatho: - lulwakhiwo lolawulo olukhaphukhaphu noluvulekileyo olwenziwe ngaphakathi komgaqo-nkqubo Linux Isiseko. Inkcazo yoMfanekiso we-OCI ichaza imigangatho yoshishino yeefomathi zomfanekiso wesikhongozeli kunye namaxesha okusebenza ukuqinisekisa ukuba zonke iinjini zesikhongozeli zinokusebenzisa imifanekiso yesikhongozeli eyenziwe sisixhobo sokwakha.
Ukufakela isicelo, sisonga isicelo sethu kumfanekiso wesikhongozeli kwaye sipapashe loo mfanekiso kwirejista ekwabelwana ngayo. Ixesha lokuqhuba lesikhongozeli lifumana lo mfanekiso kwirejista, iwukhuphe, kwaye iqhube isicelo ngaphakathi kwayo.
Inguqulo ye-2.3 ye-Spring Boot ibonelela ngeeplagi zokwenza imifanekiso ye-OCI.
sesona sikhongozeli sisetyenziswa kakhulu, kwaye sisebenzisa iDocker kwimizekelo yethu, ke zonke iireferensi zesikhongozeli ezilandelayo kweli nqaku ziya kubhekisa kwiDocker.
Ukwakha umfanekiso wesikhongozeli ngendlela yemveli
Ukwenza imifanekiso yeDocker kwizicelo ze-Spring Boot kulula kakhulu ngokongeza imiyalelo embalwa kwifayile yeDocker.
Siqala ngokudala ifayile yeJAR ephunyezwayo kwaye, njengenxalenye yemiyalelo yefayile yeDocker, khuphela ifayile yeJAR ephunyezwayo ngaphezulu kwesiseko somfanekiso weJRE emva kokufaka useto oluyimfuneko.
Masidale usetyenziso lwethu lwaseNtwasahlobo ngokuxhomekeka web, lombokи actuator. Kwakhona songeza isilawuli sokuphumla ukubonelela nge-API GETindlela.
Ukwenza iDockerfile
Emva koko sifaka esi sicelo ngokudibanisa Dockerfile:
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]Ifayile yethu yeDocker inomfanekiso osisiseko ovela adoptopenjdk, ngaphezulu apho sikhuphela ifayile yethu yeJAR kwaye emva koko sivule izibuko, 8080eya kuphulaphula izicelo.
Ukwakha isicelo
Okokuqala kufuneka wenze isicelo usebenzisa iMaven okanye iGradle. Apha sisebenzisa iMaven:
mvn clean packageOku kwenza ifayile yeJAR ephunyeziweyo yesicelo. Kufuneka siguqule le JAR ephunyezwayo ibe ngumfanekiso weDocker ukuze usebenze kwi-injini yeDocker.
Ukwenza umfanekiso wesikhongozeli
Emva koko sibeka le fayile yeJAR ephunyezwayo kumfanekiso weDocker ngokuqhuba umyalelo docker buildukusuka kulawulo lweengcambu zeprojekthi equlethe iDockerfile eyenziwe ngaphambili:
docker build -t usersignup:v1 .Sinokubona umfanekiso wethu kuluhlu sisebenzisa umyalelo:
docker images Imveliso yalo myalelo ungasentla ibandakanya umfanekiso wethu usersignupkunye nomfanekiso osisiseko, adoptopenjdkichazwe kwifayile yethu yeDocker.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MBJonga iileya ngaphakathi komfanekiso wesikhongozeli
Makhe sijonge kwinqwaba yeeleya ngaphakathi komfanekiso. Siza kusebenzisa ukujonga olu maleko:
dive usersignup:v1Nantsi inxalenye yesiphumo esivela kumyalelo weDive:

Njengoko sibona, umaleko wesicelo wenza inxalenye ebalulekileyo yobukhulu bomfanekiso. Sifuna ukunciphisa ubungakanani bolu maleko kumacandelo alandelayo njengenxalenye yolungiselelo lwethu.
Ukwenza umfanekiso wesikhongozeli usebenzisa i-Buildpack
() ligama eliqhelekileyo elisetyenziswa yiPlatform eyahlukeneyo njengeNkonzo (i-PAAS) iminikelo yokudala umfanekiso wesikhongozeli kwikhowudi yomthombo. Yasungulwa nguHeroku ngo-2011 kwaye sele yamkelwa yi-Cloud Foundry, i-Google App Engine, i-Gitlab, i-Knative kunye nabanye abaninzi.

Inzuzo yeepakethe zokwakha ilifu
Enye yeenzuzo eziphambili zokusebenzisa i-Buildpack ukwenza imifanekiso kukuba Utshintsho loqwalaselo lomfanekiso lunokulawulwa embindini (umakhi) kwaye lusasazwe kuzo zonke izicelo kusetyenziswa umakhi.
Iipasile zokwakha zadityaniswa ngokuqinileyo eqongeni. I-Cloud-Native Buildpacks ibonelela ngokusemgangathweni kuwo onke amaqonga ngokuxhasa ifomathi ye-OCI yomfanekiso, eqinisekisa ukuba umfanekiso unokuqhutywa yi-injini ye-Docker.
Ukusebenzisa iplagi ye-Spring Boot
Iplagi ye-Spring Boot yakha imifanekiso ye-OCI ukusuka kumthombo usebenzisa i-Buildpack. Imifanekiso yenziwa kusetyenziswa bootBuildImageimisebenzi (Gradle) okanye spring-boot:build-imageiithagethi (Maven) kunye nofakelo lweDocker yendawo.
Sinokwenza ngokwezifiso igama lomfanekiso ofunekayo ukutyhala kwirejista yeDocker ngokuchaza igama ngaphakathi 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>Masisebenzise iMaven ukuyenza build-imageiinjongo zokwenza isicelo kunye nokudala umfanekiso wesikhongozeli. Asisebenzisi naziphi na iiDockerfiles ngeli xesha.
mvn spring-boot:build-imageIsiphumo siya kuba yinto efana nale:
[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'Ukusuka kwimveliso sibona oko paketo Cloud-Native buildpackisetyenziselwa ukwenza umfanekiso osebenzayo we-OCI. Njengangaphambili, sinokubona umfanekiso odweliswe njengomfanekiso weDocker ngokuqhuba umyalelo:
docker images Isiphelo:
REPOSITORY SIZE
paketobuildpacks/run 84.3MB
gcr.io/paketo-buildpacks/builder 652MB
pratikdas/usersignup 257MBUkwenza umfanekiso wesikhongozeli usebenzisa iJib
I-Jib yiplagi yokudala umfanekiso evela kuGoogle ebonelela ngenye indlela yokwenza umfanekiso wesikhongozeli kwikhowudi yomthombo.
Ukuqwalasela jib-maven-pluginkwi pom.xml:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>Emva koko, siqhuba i-plugin ye-Jib usebenzisa umyalelo we-Maven ukwakha isicelo kunye nokwenza umfanekiso wesikhongozeli. Njengangaphambili, asisebenzisi naziphi na iifayile zeDocker apha:
mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1Emva kokwenza lo myalelo ungasentla weMaven, sifumana oku kulandelayo:
[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% completeImveliso ibonisa ukuba umfanekiso wesikhongozeli senziwe kwaye ubekwe kwirejista.
Iimpembelelo kunye nobuchule bokwenza imifanekiso ephuculweyo
Sinezizathu ezibini eziphambili zokulungiselela:
- Imveliso: Kwisixokelelwano se-orchestration yesikhongozeli, umfanekiso wesikhongozeli uyafunyanwa kwirejistri yomfanekiso ukuya kumamkeli osebenzisa i-injini yesikhongozeli. Le nkqubo ibizwa ngokuba kukucwangcisa. Ukutsalwa kwemifanekiso emikhulu kwirejistri kukhokelela kwixesha elide lokucwangciswa kwiinkqubo ze-orchestration yesikhongozeli kunye namaxesha amade okwakha kwimibhobho yeCI.
- Khu seleko: Imifanekiso emikhulu nayo inendawo enkulu yobuthathaka.
Umfanekiso weDocker uqulathe uthotho lweeleya, nganye kuzo imele umyalelo kwiDockerfile yethu. Umaleko ngamnye umele idelta yotshintsho kumaleko angaphantsi. Xa sitsala umfanekiso weDocker kwirejista, itsalwa ngokwemigangatho kwaye igcinwe kwi-host host.
I-Spring Boot isebenzisa njengefomathi yokupakisha engagqibekanga. Xa sijonga i-JAR eshinyeneyo, sibona ukuba isicelo senza inxalenye encinci ye-JAR yonke. Le yinxenye etshintsha rhoqo. Intsalela iqulathe ukuxhomekeka kwiNkqubo-sikhokelo yeNtwasahlobo.
Ifomula yokuphucula igxile ekubekeni bucala isicelo kwinqanaba elahlukileyo kuxhomekeko lweSikhokelo seNtwasahlobo.
Umaleko wokuxhomekeka, owenza isambuku sefayile eshinyeneyo ye-JAR, ikhutshelwa kube kanye kuphela kwaye igcinwe kwi-cache kwindlela yokusingatha.
Kuphela umaleko omncinci wesicelo utsalwa ngexesha lohlaziyo lwesicelo kunye nokucwangciswa kwesikhongozeli. njengoko kubonisiwe kulo mzobo:

Kula macandelo alandelayo, siza kujonga indlela yokwenza le mifanekiso ilungiselelwe isicelo seSpring Boot.
Ukwenza uMfanekiso weSikhongozeli oLungileyo kwiSicelo sokuQalwa kweNtwasahlobo usebenzisa i-Buildpack
I-Spring Boot 2.3 ixhasa ukwaluka ngokukhupha iinxalenye zefayile eshinyeneyo ye-JAR ibe ngamaleko ahlukeneyo. Uphawu lomaleko luvaliwe ngokungagqibekanga kwaye kufuneka luvulwe ngokucacileyo kusetyenziswa iplagi yeSpring Boot Maven:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
</plugin>Siza kusebenzisa olu lungelelwaniso ukwakha umfanekiso wethu wesikhongozeli kuqala nge-Buildpack emva koko nge-Docker kula macandelo alandelayo.
Masiqalise build-imageIthagethi kaMaven yokwenza umfanekiso wesikhongozeli:
mvn spring-boot:build-imageUkuba siqhuba i-Dive ukuze sibone iileya kumfanekiso oyisiphumo, siyabona ukuba umaleko wesicelo (ochazwe ngobomvu) umncinci kakhulu kuluhlu lwekhilobhayithi xa kuthelekiswa noko sikufumeneyo sisebenzisa ifomathi eshinyeneyo ye-JAR:

Ukwenza uMfanekiso weSikhongozeli oLungileyo kwiSicelo seSibhobho seNtwasahlobo usebenzisa iDocker
Endaweni yokusebenzisa iplagi ye-Maven okanye ye-Gradle, singenza kwakhona umfanekiso we-Docker JAR owenziweyo kunye nefayile ye-Docker.
Xa sisebenzisa iDocker, kufuneka senze amanyathelo amabini ongezelelweyo ukukhupha iileya kwaye sizikhuphele kumfanekiso wokugqibela.
Imixholo yesiphumo se-JAR emva kokwakha usebenzisa iMaven enolwaleko olunikwe amandla iya kujongeka ngolu hlobo:
META-INF/
.
BOOT-INF/lib/
.
BOOT-INF/lib/spring-boot-jarmode-layertools-2.3.3.RELEASE.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idxImveliso ibonisa i-JAR eyongezelelweyo ebizwa ngegama spring-boot-jarmode-layertoolsи layersfle.idxifayile. Le fayile ye-JAR eyongezelelweyo ibonelela ngezakhono zokucwangcisa, njengoko kuchaziwe kwicandelo elilandelayo.
Ukutsala ukuxhomekeka kwiileya zomntu ngamnye
Ukujonga kunye nokukhupha iileya kwi-JAR yethu eyakhiweyo, sisebenzisa ipropathi yenkqubo -Djarmode=layertoolsukuqala spring-boot-jarmode-layertoolsJAR endaweni yesicelo:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jarUkwenza lo myalelo kuvelisa imveliso equlethe iinketho zomyalelo ezikhoyo:
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 commandImveliso ibonisa imiyalelo list, extractи helpс helpibe yintsilelo. Masiqhube umyalelo nge listukhetho:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar listdependencies
spring-boot-loader
snapshot-dependencies
applicationSibona uluhlu lwezinto ezixhomekeke kuzo ezinokuthi zongezwe njengomaleko.
Izaleko ezihlala zikhona:
Igama leleya
Iziqulatho
dependencies
Nakuphi na ukuxhomekeka ekuguqulelweni kwayo kungaqulathanga SNAPSHOT
spring-boot-loader
Iiklasi zokulayishwa kweJAR
snapshot-dependencies
Nakuphi na ukuxhomekeka oguqulelo luqulathe ISIFANEKO
application
iiklasi zesicelo kunye nezibonelelo
Iileya zichazwe kwi layers.idxifayile ngokulandelelana kufuneka yongezwe kumfanekiso weDocker. Ezi maleko zigcinwe kwi-host emva kokufunyanwa kokuqala kuba azitshintshi. Kuphela umaleko wesicelo ohlaziyiweyo ukhutshelwa kumsingathi, okhawulezayo ngenxa yobungakanani obuncitshisiweyo .
Ukwakha umfanekiso kunye nokuxhomekeka okhutshwe kwiileya ezahlukeneyo
Siya kwakha umfanekiso wokugqibela kwizigaba ezibini usebenzisa indlela ebizwa . Kwinqanaba lokuqala siya kukhupha ukuxhomekeka kwaye kwisinyathelo sesibini siya kukopisha ukuxhomekeka okukhutshiweyo kumfanekiso wokugqibela.
Masiyilungise iDockerfile yethu yolwakhiwo lwamanqanaba amaninzi:
# 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"]Sigcina olu qwalaselo kwifayile eyahlukileyo - Dockerfile2.
Sakha umfanekiso weDocker sisebenzisa umyalelo:
docker build -f Dockerfile2 -t usersignup:v1 .Emva kokuqhuba lo myalelo sifumana oku kulandelayo:
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:v1Siyabona ukuba umfanekiso weDocker wenziwa nge-ID yomfanekiso kwaye emva koko uthegiwe.
Okokugqibela, siqhuba umyalelo weDive njengangaphambili ukujonga umaleko ngaphakathi komfanekiso weDocker owenziweyo. Singanikezela ngesazisi somfanekiso okanye ithegi njengegalelo kumyalelo weDive:
dive userssignup:v1Njengoko ubona kwisiphumo, umaleko oqulethe isicelo ngoku kuphela yi-11 KB, kwaye ukuxhomekeka kugcinwe kwi-cache kumacandelo ahlukeneyo.

Ukukhupha ukuxhomekeka kwangaphakathi kwiileya zomntu ngamnye
Singaphinda sinciphise ubungakanani benqanaba lesicelo ngokukhupha nakuphi na ukuxhomekeka kwethu kwisiko kwinqanaba elahlukileyo endaweni yokuyipakisha ngesicelo ngokuyibhengeza ymlifayile efanayo enegama 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/"Kule fayile layers.idxsongeze ukuxhomekeka kwesiko okubizwa ngegama, io.myorgequlethe ukuxhomekeka kombutho ofunyenwe kwindawo yokugcina ekwabelwanayo.
isiphelo
Kweli nqaku, sijonge ukusebenzisa i-Cloud-Native Buildpacks ukwakha umfanekiso wesikhongozeli ngqo kwikhowudi yomthombo. Le yenye indlela yokusebenzisa iDocker ukwenza umfanekiso wesikhongozeli ngendlela eqhelekileyo: kuqala wenze ifayile yeJAR ephunyeziweyo kwaye emva koko uyipakishe kumfanekiso wesikhongozeli ngokuchaza imiyalelo kwifayile yeDocker.
Sikwajonge ekwandiseni isikhongozeli sethu ngokwenza uphawu lokwaleko olutsalela ukuxhomekeka kwiimaleko ezahlukeneyo ezigcinwe kwi-host kwaye umaleko obhityileyo wesicelo ulayishwe ngexesha lokucwangciswa kwiinjini zokusebenzisa isikhongozeli.
Ungafumana yonke ikhowudi yemvelaphi esetyenziswe kwinqaku .
Isalathiso somyalelo
Nantsi inkcazo ekhawulezayo yemiyalelo esiyisebenzisileyo kweli nqaku.
Ukucoca umxholo:
docker system prune -aUkwenza umfanekiso wesikhongozeli usebenzisa ifayile yeDocker:
docker build -f <Docker file name> -t <tag> .Sakha umfanekiso wesikhongozeli kwikhowudi yomthombo (ngaphandle kweDockerfile):
mvn spring-boot:build-imageJonga imigangatho yokuxhomekeka. Ngaphambi kokwakha ifayile ye-JAR yesicelo, qiniseka ukuba indawo yokubeka iyasebenza kwi-spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar listUkutsalwa kokuxhomekeka. Ngaphambi kokwakha ifayile ye-JAR yesicelo, qiniseka ukuba indawo yokubeka iyasebenza kwi-spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar extractJonga uluhlu lwemifanekiso yesikhongozeli
docker imagesJonga ngasekhohlo ngaphakathi komfanekiso wesikhongozeli (qinisekisa ukuba isixhobo sokuntywila sifakiwe):
dive <image ID or image tag>umthombo: www.habr.com
