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:
Vula Inyathelo leSikhongozeli (OCI) Lubukhaphukhaphu, ubume bolawulo obuvulekileyo obusekwe kwiSiseko seLinux. I-OCI Image Specification ichaza imigangatho yoshishino yomfanekiso wesikhongozeli kunye neefomati zexesha lokuqhuba ukuqinisekisa ukuba zonke ii-injini zesikhongozeli zinokuqhuba imifanekiso yesikhongozeli eyenziwe nasiphi na isixhobo 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.
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 web
, lombok
ΠΈ actuator
. Kwakhona songeza isilawuli sokuphumla ukubonelela nge-API GET
indlela.
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, 8080
eya kuphulaphula izicelo.
Ukwakha isicelo
Okokuqala kufuneka wenze isicelo usebenzisa iMaven okanye iGradle. Apha sisebenzisa iMaven:
mvn clean package
Oku 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 build
ukusuka 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 usersignup
kunye nomfanekiso osisiseko, adoptopenjdk
ichazwe kwifayile yethu yeDocker.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Jonga iileya ngaphakathi komfanekiso wesikhongozeli
Makhe sijonge kwinqwaba yeeleya ngaphakathi komfanekiso. Siza kusebenzisa
dive usersignup:v1
Nantsi 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
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 bootBuildImage
imisebenzi (Gradle) okanye spring-boot:build-image
iithagethi (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-image
iinjongo zokwenza isicelo kunye nokudala umfanekiso wesikhongozeli. Asisebenzisi naziphi na iiDockerfiles ngeli xesha.
mvn spring-boot:build-image
Isiphumo 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 buildpack
isetyenziselwa 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 257MB
Ukwenza umfanekiso wesikhongozeli usebenzisa iJib
I-Jib yiplagi yokudala umfanekiso evela kuGoogle ebonelela ngenye indlela yokwenza umfanekiso wesikhongozeli kwikhowudi yomthombo.
Ukuqwalasela jib-maven-plugin
kwi 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:v1
Emva 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% complete
Imveliso 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
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-image
Ithagethi kaMaven yokwenza umfanekiso wesikhongozeli:
mvn spring-boot:build-image
Ukuba 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.idx
Imveliso ibonisa i-JAR eyongezelelweyo ebizwa ngegama spring-boot-jarmode-layertools
ΠΈ layersfle.idx
ifayile. 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=layertools
ukuqala spring-boot-jarmode-layertools
JAR endaweni yesicelo:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar
Ukwenza 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 command
Imveliso ibonisa imiyalelo list
, extract
ΠΈ help
Ρ help
ibe yintsilelo. Masiqhube umyalelo nge list
ukhetho:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application
Sibona 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.idx
ifayile 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
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:v1
Siyabona 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:v1
Njengoko 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 yml
ifayile 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.idx
songeze ukuxhomekeka kwesiko okubizwa ngegama, io.myorg
equlethe 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 -a
Ukwenza umfanekiso wesikhongozeli usebenzisa ifayile yeDocker:
docker build -f <Docker file name> -t <tag> .
Sakha umfanekiso wesikhongozeli kwikhowudi yomthombo (ngaphandle kweDockerfile):
mvn spring-boot:build-image
Jonga imigangatho yokuxhomekeka. Ngaphambi kokwakha ifayile ye-JAR yesicelo, qiniseka ukuba indawo yokubeka iyasebenza kwi-spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar list
Ukutsalwa kokuxhomekeka. Ngaphambi kokwakha ifayile ye-JAR yesicelo, qiniseka ukuba indawo yokubeka iyasebenza kwi-spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar extract
Jonga uluhlu lwemifanekiso yesikhongozeli
docker images
Jonga ngasekhohlo ngaphakathi komfanekiso wesikhongozeli (qinisekisa ukuba isixhobo sokuntywila sifakiwe):
dive <image ID or image tag>
umthombo: www.habr.com