ProHoster > Blog > Rianachd > Togail Ìomhaighean Docker Optimized airson Iarrtas Boot Spring
Togail Ìomhaighean Docker Optimized airson Iarrtas Boot Spring
Tha soithichean air a thighinn gu bhith mar an dòigh as fheàrr air tagradh a phacadh leis a h-uile eisimeileachd air bathar-bog agus siostam obrachaidh agus an uairsin gan lìbhrigeadh gu diofar àrainneachdan.
Tha an artaigil seo a’ còmhdach diofar dhòighean air tagradh Spring Boot a chumail:
a 'togail ìomhaigh docker a' cleachdadh dockerfile,
togail ìomhaigh OCI bhon stòr a’ cleachdadh Cloud-Native Buildpack,
agus optimization ìomhaigh aig àm ruith le bhith a’ sgaradh pàirtean JAR gu diofar ìrean a’ cleachdadh innealan le sreathan.
Eisimpleir còd
An cois an artaigil seo tha eisimpleir còd obrach air GitHub .
Briathrachas container
Tòisichidh sinn leis a’ bhriathrachas container a thathar a’ cleachdadh tron artaigil:
Dealbh container: faidhle de chruth sònraichte. Bidh sinn ag atharrachadh an tagradh againn gu ìomhaigh container le bhith a’ ruith an inneal togail.
Container: Eisimpleir so-ghnìomhaichte den ìomhaigh container.
Inneal gleidhidh: Am pròiseas daemon le uallach airson an soitheach a ruith.
Neach-gleidhidh container: An inneal aoigheachd air a bheil an einnsean container a’ ruith.
Clàradh container: An t-àite coitcheann a thathar a 'cleachdadh airson an ìomhaigh container fhoillseachadh agus a sgaoileadh.
OCI àbhaisteach: Iomairt Bogsa Fosgailte (OCI) na fhrèam riaghlaidh aotrom, stòr fosgailte a chaidh a chruthachadh leis an Linux Foundation. Tha Sònrachadh Ìomhaigh OCI a’ mìneachadh inbhean gnìomhachais airson cruthan ìomhaigh container agus an ùine ruith gus dèanamh cinnteach gun urrainn dha na h-einnseanan soithich uile ìomhaighean soithich a chruthachadh le inneal togail sam bith.
Gus tagradh a chuir a-steach, bidh sinn a’ pasgadh an tagradh againn ann an ìomhaigh soithich agus a’ foillseachadh an ìomhaigh sin don chlàr phoblach. Bidh ùine ruith an t-soithich a’ faighinn an ìomhaigh seo air ais bhon chlàr, ga dì-phapadh, agus a’ ruith an aplacaid na bhroinn.
Tha dreach 2.3 de Spring Boot a’ toirt seachad plugins airson ìomhaighean OCI a thogail.
Docker am buileachadh soithichean as cumanta, agus bidh sinn a’ cleachdadh Docker anns na h-eisimpleirean againn, agus mar sin bidh a h-uile iomradh air soithichean às deidh sin san artaigil seo a’ toirt iomradh air Docker.
A’ togail ìomhaigh container san dòigh thraidiseanta
Tha e gu math furasta a bhith a’ togail ìomhaighean Docker airson tagraidhean Spring Boot le bhith a’ cur beagan stiùiridh ris an Dockerfile agad.
Bidh sinn an-toiseach a’ cruthachadh JAR so-ghnìomhaichte agus, mar phàirt de stiùireadh Dockerfile, dèan lethbhreac den JAR so-ghnìomhaichte air mullach ìomhaigh bunaiteach JRE às deidh dhuinn na gnàthachadh riatanach a chuir an sàs.
Nach cruthaich sinn ar tagradh Earrach air adhart Tòiseachadh an Earraich le eisimeileachd web, lombokи actuator. Bidh sinn cuideachd a’ cur rianadair fois ris gus API a thoirt seachad GETdòigh-obrach.
A 'cruthachadh dockerfile
Bidh sinn an uairsin a’ cur an tagradh seo ann an soitheach le bhith a’ cur ris Dockerfile:
Anns an Dockerfile againn tha ìomhaigh bhunaiteach, bho adoptopenjdk, a bharrachd air an sin bidh sinn a’ dèanamh lethbhreac den fhaidhle JAR againn agus an uairsin a ’fosgladh a’ phort, 8080a dh’èisteas ri iarrtasan.
Co-chruinneachadh tagraidh
An toiseach feumaidh tu tagradh a chruthachadh a’ cleachdadh Maven no Gradle. An seo tha sinn a 'cleachdadh Maven:
mvn clean package
Bidh seo a’ cruthachadh faidhle JAR so-ghnìomhaichte airson an tagraidh. Feumaidh sinn an JAR so-ghnìomhaichte seo a thionndadh gu ìomhaigh Docker gus a ruith air einnsean Docker.
Cruthaich dealbh container
Bidh sinn an uairsin a’ cur an gnìomh JAR seo a-steach don ìomhaigh Docker le bhith a’ ruith an àithne docker buildbho eòlaire freumh a’ phròiseict anns a bheil an Dockerfile a chaidh a chruthachadh na bu thràithe:
docker build -t usersignup:v1 .
Chì sinn an ìomhaigh againn san liosta leis an àithne:
docker images
Tha toradh na h-àithne gu h-àrd a’ toirt a-steach an ìomhaigh againn usersignupmaille ris an dealbh bhunaiteach, adoptopenjdkair a shònrachadh anns an Dockerfile againn.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Seall sreathan taobh a-staigh ìomhaigh container
Bheir sinn sùil air a’ chruach de shreathan taobh a-staigh an ìomhaigh. Cleachdaidh sinn ionnstramaid dàibheadh, gus na sreathan seo fhaicinn:
dive usersignup:v1
Seo pàirt de thoradh an àithne Dive:
Mar a chì sinn, tha còmhdach an tagraidh na phàirt chudromach de mheud an ìomhaigh. Tha sinn airson meud an ìre seo a lughdachadh anns na h-earrannan a leanas mar phàirt den optimization againn.
A’ togail ìomhaigh container le Buildpack
Pacaidean cruinneachaidh (Pacaichean togail) na theirm coitcheann air a chleachdadh le diofar thabhartasan Àrd-ùrlar mar Sheirbheis (PAAS) gus ìomhaigh soitheach a chruthachadh bho chòd stòr. Chaidh a chuir air bhog le Heroku ann an 2011 agus bhon uair sin chaidh gabhail ris le Cloud Foundry, Google App Engine, Gitlab, Knative agus beagan eile.
Buannachd pacaidean togail Cloud
Is e aon de na prìomh bhuannachdan bho bhith a’ cleachdadh Buildpack gus ìomhaighean a thogail faodar atharrachaidhean rèiteachaidh ìomhaigh a riaghladh sa mheadhan (neach-togail) agus an gluasad gu gach tagradh a’ cleachdadh an neach-togail.
Bha na pacaidean togail ceangailte gu dlùth ris an àrd-ùrlar. Bidh Cloud-Native Buildpacks a’ toirt seachad cunbhalachadh thar àrd-ùrlaran le bhith a’ toirt taic do chruth ìomhaigh OCI, a nì cinnteach gum faod an ìomhaigh a bhith air a ruith leis an einnsean Docker.
A’ cleachdadh am plugan Spring Boot
Bidh am plugan Spring Boot a ’togail ìomhaighean OCI bhon stòr a’ cleachdadh Buildpack. Tha dealbhan air an cruthachadh a’ cleachdadh bootBuildImagegnìomhan (Gradle) no spring-boot:build-imagetargaid (Maven) agus stàladh Docker ionadail.
Is urrainn dhuinn ainm na h-ìomhaigh a dh’ fheumas sinn a phutadh gu clàr an Docker a ghnàthachadh le bhith a’ sònrachadh an ainm ann image tag:
Cleachdamaid Maven airson a chur gu bàs build-imageamasan airson tagradh a chruthachadh agus ìomhaigh container a chruthachadh. Chan eil sinn a’ cleachdadh Dockerfiles sam bith an-dràsta.
Bhon toradh, chì sinn sin paketo Cloud-Native buildpackair a chleachdadh gus ìomhaigh OCI obrach a chruthachadh. Mar a bha roimhe, chì sinn an ìomhaigh air a liostadh mar ìomhaigh Docker le bhith a’ ruith an àithne:
An uairsin, bidh sinn a ’ruith am plugan Jib a’ cleachdadh an àithne Maven gus an tagradh a thogail agus ìomhaigh an t-soithich a chruthachadh. Mar a bha roimhe, chan eil sinn a’ cleachdadh Dockerfiles sam bith an seo:
Às deidh dhuinn an àithne Maven gu h-àrd a chuir an gnìomh, gheibh sinn an toradh a leanas:
[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
Tha an toradh a’ sealltainn gun deach ìomhaigh an t-soithich a chruthachadh agus a chuir sa chlàr.
Brosnachaidhean agus dòighean airson ìomhaighean làn-leasaichte a chruthachadh
Tha dà phrìomh adhbhar againn airson optimachadh:
Coileanadh: Ann an siostam orchestration container, tha ìomhaigh container air a shlaodadh bhon chlàr ìomhaigh chun aoigh a tha a ’ruith einnsean an t-soithich. Canar planadh ris a’ phròiseas seo. Le bhith a’ tarraing ìomhaighean mòra bhon chlàr thig amannan clàraidh fada ann an siostaman orchestration container agus amannan togail fada ann am pìoban CI.
Tha ìomhaigh Docker air a dhèanamh suas de chruach de shreathan, gach fear a’ riochdachadh aithris anns an Dockerfile againn. Tha gach còmhdach a’ riochdachadh delta nan atharrachaidhean anns an t-sreath bhunasach. Nuair a tharraingeas sinn dealbh Docker bhon chlàr, thèid a tharraing ann an sreathan agus a thasgadh air an òstair.
Cleachdaidhean Spring Boot "fat JAR" a-steach mar an cruth pacaidh bunaiteach. Nuair a choimheadas sinn air JAR reamhar, chì sinn gur e pàirt glè bheag den JAR gu lèir a th’ anns an tagradh. Is e seo am pàirt as motha a dh’ atharraicheas. Tha an còrr a’ gabhail a-steach eisimeileachd Frèam an Earraich.
Tha am foirmle optimization stèidhichte air a bhith a’ dealachadh an tagraidh aig ìre air leth bho eisimeileachd Spring Framework.
Chan eil an ìre eisimeileachd a tha mar a’ mhòr-chuid den fhaidhle tiugh JAR air a luchdachadh sìos ach aon turas agus air a thasgadh air an t-siostam aoigheachd.
Chan eil ach sreath tana den aplacaid air a shlaodadh rè ùrachadh app agus clàradh shoithichean, mar a chithear san diagram seo:
Anns na h-earrannan a leanas, seallaidh sinn ri mar a chruthaicheas tu na h-ìomhaighean làn-leasaichte sin airson tagradh Spring Boot.
A’ togail ìomhaigh gleidhidh Optimized airson Iarrtas Boot Spring le Buildpack
Bidh Spring Boot 2.3 a’ toirt taic do laigheadh le bhith a’ toirt a-mach pàirtean de fhaidhle JAR tiugh gu sreathan fa leth. Tha am feart còmhdachaidh ciorramach gu bunaiteach agus feumar a chomasachadh gu sònraichte le bhith a’ cleachdadh am plugan Spring Boot Maven:
Cleachdaidh sinn an rèiteachadh seo gus an ìomhaigh container againn a thogail an toiseach le Buildpack agus an uairsin le Docker anns na h-earrannan a leanas.
Ruithidh sinn build-imageTargaid Maven gus ìomhaigh container a chruthachadh:
mvn spring-boot:build-image
Ma ruitheas sinn Dive gus na sreathan san ìomhaigh a thig às fhaicinn, chì sinn gu bheil an ìre tagraidh (air a chuairteachadh ann an dearg) mòran nas lugha anns an raon kilobyte an taca ris na fhuair sinn a’ cleachdadh an cruth JAR tiugh:
A’ togail ìomhaigh gleidhidh Optimized airson Iarrtas Boot Spring le Docker
An àite a bhith a’ cleachdadh plugan Maven no Gradle, is urrainn dhuinn cuideachd ìomhaigh Docker JAR le còmhdach a chruthachadh le faidhle Docker.
Nuair a chleachdas sinn Docker, feumaidh sinn dà cheum a bharrachd a ghabhail gus na sreathan a thoirt a-mach agus an lethbhreac a-steach don ìomhaigh dheireannach.
Bidh susbaint an JAR a thig às an dèidh togail le Maven le còmhdach air a chomasachadh a’ coimhead mar seo:
Tha an toradh a’ sealltainn JAR a bharrachd ainmichte spring-boot-jarmode-layertoolsи layersfle.idxfaidhle. Tha am faidhle JAR a bharrachd seo a’ toirt seachad comasan laighe, mar a tha air a mhìneachadh san ath earrann.
Thoir a-mach eisimeileachd air sreathan fa leth
Gus sreathan fhaicinn agus a thoirt a-mach às an JAR sreathach againn, bidh sinn a’ cleachdadh seilbh an t-siostaim -Djarmode=layertoolsairson tòiseachadh spring-boot-jarmode-layertoolsJAR an àite an tagraidh:
Le bhith a’ ruith an àithne seo bheir sin a-mach toradh anns a bheil na roghainnean àithne a tha rim faighinn:
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
Tha an toradh a’ sealltainn nan òrduighean list, extractи helpс helpbi mar an àbhaist. Rachamaid an àithne le listroghainn:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
Chì sinn liosta de eisimeileachd a dh'fhaodar a chur ris mar shreathan.
Sreathan gu bunaiteach:
Ainm sreath
Clàr-innse
dependencies
eisimeileachd sam bith aig nach eil SNAPSHOT ann an dreach
spring-boot-loader
Clasaichean luchdaidh JAR luchdadh a-nuas
snapshot-dependencies
eisimeileachd sam bith anns a bheil SNAPSHOT ann an dreach
application
clasaichean tagraidh agus goireasan
Tha sreathan air an comharrachadh ann an layers.idxfaidhle san òrdugh anns am bu chòir an cur ri ìomhaigh Docker. Tha na sreathan sin air an tasgadh air an òstair às deidh a’ chiad lorg oir chan eil iad ag atharrachadh. Chan eil ach an ìre tagraidh ùraichte air a luchdachadh sìos chun òstair, a tha nas luaithe air sgàth meud nas lugha .
A 'togail ìomhaigh le eisimeileachd air a thoirt a-steach do shreathan fa leth
Togaidh sinn an dealbh mu dheireadh ann an dà cheum a’ cleachdadh modh ris an canar co-chruinneachadh ioma-ìre . Anns a’ chiad cheum bheir sinn a-mach na h-eisimeileachd agus anns an dàrna ceum nì sinn leth-bhreac de na h-eisimeileachd a chaidh a thoirt a-steach don chuairt dheireannaich.
Nach atharraich sinn ar Dockerfile airson togail ioma-ìre:
# 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"]
Sàbhailidh sinn an rèiteachadh seo ann am faidhle air leth - Dockerfile2.
Bidh sinn a’ togail ìomhaigh Docker a’ cleachdadh an àithne:
docker build -f Dockerfile2 -t usersignup:v1 .
Às deidh dhuinn an àithne seo a chuir an gnìomh, gheibh sinn an toradh a leanas:
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
Chì sinn gu bheil ìomhaigh an Docker air a chruthachadh le ID ìomhaigh agus an uairsin air a tagadh.
Mu dheireadh, bidh sinn a ’ruith an àithne Dive mar a bha roimhe gus sùil a thoirt air na sreathan taobh a-staigh an ìomhaigh Docker a chaidh a chruthachadh. Is urrainn dhuinn ID ìomhaigh no taga a thoirt a-steach don àithne Dive:
dive userssignup:v1
Mar a chì thu bhon toradh, chan eil anns an ìre anns a bheil an tagradh a-nis ach 11 KB agus tha na h-eisimeileachd air an tasgadh ann an sreathan fa leth.
Thoir a-mach eisimeileachd a-staigh air sreathan fa leth
Is urrainn dhuinn meud an t-sreath tagraidh a lughdachadh tuilleadh le bhith a’ toirt a-mach gin de na cleachdaidhean àbhaisteach againn gu còmhdach air leth an àite am pacadh leis an tagradh le bhith gan cur an cèill ann an ymlfaidhle coltach ris air ainmeachadh layers.idx:
Anns an fhaidhle seo layers.idxtha sinn air eisimeileachd gnàthaichte ainmeachadh, io.myorganns a bheil eisimeileachd buidhne air fhaighinn air ais bhon stòr-dàta co-roinnte.
co-dhùnadh
San artaigil seo, choimhead sinn air cleachdadh Cloud-Native Buildpacks gus ìomhaigh soitheach a thogail gu dìreach bhon stòr. Is e seo roghainn eile seach a bhith a’ cleachdadh Docker gus ìomhaigh container a chruthachadh san dòigh àbhaisteach: an toiseach, thèid faidhle JAR tiugh a ghabhas coileanadh a chruthachadh agus an uairsin a phacaigeadh a-steach do ìomhaigh container le bhith a ’sònrachadh an stiùireadh anns an Dockerfile.
Choimhead sinn cuideachd air a bhith a’ dèanamh an fheum as fheàrr den t-soitheach againn le bhith a’ toirt a-steach feart còmhdachaidh a bhios a’ toirt a-mach eisimeileachd a-steach do shreathan fa leth a tha air an tasgadh air an òstair agus tha còmhdach tagraidh tana air a luchdachadh aig àm clàraidh ann an einnseanan cur gu bàs an t-soithich.
Gheibh thu a h-uile còd tùsail a chaidh a chleachdadh san artaigil aig GitHub .
Iomradh àithne
Seo geàrr-chunntas de na h-òrdughan a chleachd sinn san artaigil seo airson iomradh sgiobalta.
Glanadh co-theacsa:
docker system prune -a
A’ togail ìomhaigh container le Dockerfile:
docker build -f <Docker file name> -t <tag> .
Tog ìomhaigh container bhon stòr (às aonais Dockerfile):
mvn spring-boot:build-image
Thoir sùil air ìrean eisimeileachd. Mus tèid am faidhle jar tagraidh a thogail, dèan cinnteach gu bheil am feart laighe air a chomasachadh anns an spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar list
Thoir a-mach sreathan eisimeileachd. Mus tèid am faidhle jar tagraidh a thogail, dèan cinnteach gu bheil am feart laighe air a chomasachadh anns an spring-boot-maven-plugin: