Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna
Ko nga ipu te huarahi pai ki te whakakakahu i tetahi tono me ona punaha rorohiko me nga punaha whakahaere, ka tukuna ki nga taiao rereke.
Kei roto i tenei tuhinga nga huarahi rereke ki te whakauru i tetahi tono Spring Boot:
te hanga i tetahi ahua Docker ma te whakamahi i te konae Docker,
te hanga whakaahua OCI mai i te puna ma te whakamahi Cloud-Native Buildpack,
me te arotautanga atahanga o te wa-waahi ma te wehewehe i nga waahanga o te JAR ki nga paparanga rereke ma te whakamahi i nga taputapu maha-tiera.
Tauira waehere
Kei te haere tahi tenei tuhinga me te tauira waehere mahi i runga i GitHub .
Nga kupu ipu
Ka timata tatou me nga kupu ipu i whakamahia i roto i te tuhinga:
Whakaahua ipu: kōnae he whakatakotoranga motuhake. Ka huri to maatau tono ki te ahua ipu ma te whakahaere i te taputapu hanga.
Putea: He tauira kawe o te ahua ipu.
Pūkaha ipu: Ko te tukanga daemon te kawenga mo te whakahaere i te ipu.
Kaihautu ipu: Ko te rorohiko kaihautu kei runga te miihini ipu.
Rehita ipu: Ko te waahi whanui i whakamahia hei whakaputa me te tohatoha i te ahua ipu.
OCI paerewa: Kaupapa Whakatuwhera Ipu (OCI) he maamaa, he hanganga whakahaere tuwhera i hangaia i roto i te Linux Foundation. Ko te OCI Image Specification e whakaatu ana i nga paerewa ahumahi mo te ahua ipu me nga whakatakotoranga wa mahi hei whakarite ka taea e nga miihini ipu katoa te whakahaere i nga whakaahua ipu i hangaia e tetahi taputapu hanga.
Hei whakauru i tetahi tono, ka takai i ta maatau tono ki te ahua ipu ka whakaputa i taua ahua ki tetahi rehita tiritahi. Ka tangohia e te wa whakahaere ipu tenei ahua mai i te rehita, ka wetewetehia, ka whakahaere i te tono ki roto.
Ko te Putanga 2.3 o te Spring Boot e whakarato ana i nga taputapu mo te hanga whakaahua OCI.
Docker Ko te whakatinanatanga ipu e tino whakamahia ana, a ka whakamahia e matou a Docker i roto i o maatau tauira, no reira ko nga tohutoro ipu katoa o muri mai i tenei tuhinga ka korero ki a Docker.
Te hanga i te ahua ipu ki te tikanga tuku iho
Ko te hanga whakaahua Docker mo nga tono Spring Boot he tino ngawari ma te taapiri i etahi tohutohu ki te konae Docker.
I te tuatahi ka waihangahia e matou he konae JAR ka taea te whakahaere, a, hei waahanga o nga tohutohu konae Docker, kape i te konae JAR ka taea ki runga ake o te ahua JRE turanga i muri i te tono i nga tautuhinga e tika ana.
Me hanga ta tatou tono Koanga i runga Puna Initializr me nga whakawhirinakitanga web, lombokи actuator. Kei te taapirihia e matou he kaiwhakahaere okiokinga hei whakarato i tetahi API GETtikanga.
Te hanga i te Dockerfile
Ka whakakiia e matou tenei tono ma te taapiri Dockerfile:
Kei roto i ta maatau konae Docker tetahi ahua taketake mai i adoptopenjdk, kei runga ake ka kape i ta maatau konae JAR ka whakatuwhera i te tauranga, 8080ka whakarongo ki nga tono.
Te hanga i te tono
Tuatahi me hanga e koe he tono ma te Maven, Gradle ranei. I konei ka whakamahia e matou a Maven:
mvn clean package
Ka hangaia he konae JAR ka taea te whakahaere mo te tono. Me huri tatou i tenei JAR ka taea te whakahaere ki te ahua Docker hei whakahaere i runga i te miihini Docker.
Te hanga pikitia ipu
Ka tukuna e matou tenei konae JAR ka taea ki te ahua Docker ma te whakahaere i te whakahau docker buildmai i te whaiaronga pakiaka kaupapa kei roto te Dockerfile i hangaia i mua:
docker build -t usersignup:v1 .
Ka taea e tatou te kite i to maatau ahua i te rarangi ma te whakamahi i te whakahau:
docker images
Ko te putanga o te whakahau i runga ake nei ko to maatau ahua usersignupme te ahua taketake, adoptopenjdkkua tohua i roto i ta maatau konae Docker.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Tirohia nga paparanga kei roto i te ahua ipu
Kia titiro tatou ki te puranga o nga papa o roto o te ahua. Ka whakamahia e matou taputapu ruku hei tiro i enei paparanga:
dive usersignup:v1
Anei tetahi waahanga o te putanga mai i te whakahau Dive:
Ka kite tatou, ko te paparanga tono he waahanga nui o te rahi o te ahua. E hiahia ana matou ki te whakaiti i te rahi o tenei paparanga i nga waahanga e whai ake nei hei waahanga o to maatau arotautanga.
Te hanga pikitia ipu ma te whakamahi i te Buildpack
Nga kohinga huihuinga (Poaka hanga) he kupu whaanui e whakamahia ana e nga momo tuku a Platform as a Service (PAAS) ki te hanga pikitia ipu mai i te waehere puna. I whakarewahia e Heroku i te tau 2011, a, mai i taua wa i tangohia e Cloud Foundry, Google App Engine, Gitlab, Knative me etahi atu.
Ko te painga o nga kohinga hanga kapua
Ko tetahi o nga painga nui o te whakamahi i te Buildpack ki te hanga whakaahua ko tera Ko nga huringa whirihoranga whakaahua ka taea te whakahaere i waenga (kaihanga) ka horahia ki nga tono katoa ma te whakamahi i te kaihanga.
Ko nga kohinga hanga i honoa ki te papa. Ko nga Cloud-Native Buildpacks e whakarato ana i te paerewa puta noa i nga papaaho ma te tautoko i te whakatakotoranga ahua OCI, e whakarite ana ka taea te whakahaere te ahua e te miihini Docker.
Ma te whakamahi i te mono Spring Boot
Ka hangaia e te Spring Boot nga whakaahua OCI mai i te puna ma te whakamahi i te Buildpack. Ka hangaia nga whakaahua ma te whakamahi bootBuildImagemahi (Gradle) ranei spring-boot:build-imagenga whaainga (Maven) me te whakaurunga Docker rohe.
Ka taea e taatau te whakarite i te ingoa o te ahua e hiahiatia ana hei pana ki te rehita Docker ma te tohu i te ingoa kei roto image tag:
Mai i te putanga ka kite tatou i tera paketo Cloud-Native buildpackwhakamahia hei hanga pikitia OCI mahi. Ka rite ki o mua, ka kite tatou i te ahua kua tohua hei ahua Docker ma te whakahaere i te whakahau:
I muri mai, ka whakahaerehia e matou te Jib mono ma te whakamahi i te whakahau Maven ki te hanga i te tono me te hanga pikitia ipu. Ka rite ki o mua, kaore matou e whakamahi ana i nga konae Docker i konei:
I muri i te mahi i te whakahau Maven i runga ake nei, ka whiwhi tatou i nga putanga e whai ake nei:
[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
Ko te putanga e whakaatu ana kua hangahia te ahua ipu me te whakanoho ki roto i te rehita.
Nga hihiko me nga tikanga mo te hanga whakaahua kua pai ake
E rua nga take matua mo te arotautanga:
Te whai hua: I roto i te punaha whakahaere ipu, ka tikina he ahua ipu mai i te rehita whakaahua ki te kaihautu e whakahaere ana i te miihini ipu. Ko tenei tukanga e kiia ana ko te whakamahere. Ko te toia o nga whakaahua nui mai i te rehitatanga ka roa nga wa whakarite i roto i nga punaha whakahiato ipu me nga waa hanga roa i roto i nga paipa CI.
Haumarutanga: Ko nga whakaahua nui ake he waahi nui ake mo nga whakaraerae.
Kei roto i te ahua Docker he paparanga papa, he tohu tohutohu kei roto i ta maatau Dockerfile. Ko ia paparanga he tohu o nga huringa o te paparanga o raro. Ka toia e matou he ahua Docker mai i te rehitatanga, ka toia ki roto i nga paparanga ka keteroki ki te kaihautu.
Ka whakamahia e te Spring Boot "JAR momona" i roto i hei hōputu tākai taunoa. Ka titiro tatou ki te JAR matotoru, ka kite tatou ko te tono he waahanga iti rawa o te JAR katoa. Koinei te waahanga ka huri i te nuinga o te waa. Ko te toenga kei roto ko nga whakawhirinakitanga Anga Puna.
Ko te tauira arotautanga e aro nui ana ki te wehe i te tono ki tetahi taumata motuhake mai i nga whakawhirinakitanga Anga Koanga.
Ko te paparanga whakawhirinaki, e hanga ana i te nuinga o te konae JAR matotoru, ka tangohia kotahi anake ka keteroki ki te punaha manaaki.
He papa angiangi anake o te tono ka toia i te wa e whakahou ana i te tono me te whakarite ipu. e whakaatuhia ana i tenei hoahoa:
I nga waahanga e whai ake nei, ka titiro tatou me pehea te hanga i enei whakaahua kua pai ake mo te tono Spring Boot.
Te Waihanga Atahanga Ipu Arotau mo te Taupānga Whakaara Puna Ma te whakamahi i te Buildpack
Ko te Spring Boot 2.3 e tautoko ana i te paparanga ma te tango i nga waahanga o te konae JAR matotoru ki nga paparanga motuhake. Kua monoa te ahuatanga paparanga ma te taunoa, me whakahoahoa ma te whakamahi i te mono Spring Boot Maven:
Ka whakamahia e matou tenei whirihoranga ki te hanga i ta maatau ahua ipu i te tuatahi me te Buildpack katahi me Docker i nga waahanga e whai ake nei.
Kia whakarewa tatou build-imageKo te whaainga maven mo te hanga pikitia ipu:
mvn spring-boot:build-image
Mena ka rere tatou i te Dive ki te kite i nga papa o te ahua ka puta, ka kite tatou he iti ake te paparanga tono (kua tuhia ki te whero) i roto i te awhe kiropaita ka whakaritea ki nga mea i riro mai ma te whakamahi i te whakatakotoranga JAR ngako:
Te Waihanga Atahanga Ipu Arotau mo te Taupānga Whakaara Puna Ma te whakamahi i te Docker
Engari ki te whakamahi i te mono Maven, Gradle ranei, ka taea ano e tatou te hanga i tetahi ahua Docker JAR paparanga me te konae Docker.
Ka whakamahia e matou a Docker, me mahi e rua nga waahanga taapiri hei tango i nga paparanga ka kape ki te ahua whakamutunga.
Ko nga ihirangi o te JAR ka puta i muri i te hanga ma te whakamahi i te Maven me te whakaahei paparanga ka penei te ahua:
Ko te putanga e whakaatu ana i tetahi atu JAR kua whakaingoatia spring-boot-jarmode-layertoolsи layersfle.idxkōnae. Ko tenei kōnae JAR taapiri e whakarato ana i nga kaha tukatuka paparanga, pera i te korero i te waahanga e whai ake nei.
Te tango i nga whakawhirinaki ki nga paparanga takitahi
Hei tiro me te tango i nga paparanga mai i a maatau JAR paparanga, ka whakamahia e matou te taonga punaha -Djarmode=layertoolsmo te timatanga spring-boot-jarmode-layertoolsJAR hei utu mo te tono:
Ma te whakahaere i tenei whakahau ka puta he putanga kei roto nga whiringa whakahau e waatea ana:
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
Ko te putanga e whakaatu ana i nga whakahau list, extractи helpс helphei taunoa. Me whakahaere te whakahau me te listkōwhiringa:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
Ka kite matou i te rarangi o nga whakawhirinaki ka taea te taapiri hei paparanga.
Paparanga taunoa:
Ingoa papa
Tuhinga
dependencies
he whakawhirinakitanga karekau he SNAPSHOT o tona putanga
spring-boot-loader
Nga Karaehe Kaihoko JAR
snapshot-dependencies
tetahi ti'aturinga kei roto i tona putanga SAPSHOT
application
akomanga tono me nga rauemi
Kua tautuhia nga paparanga ki layers.idxkōnae i roto i te raupapa me taapiri atu ki te ahua Docker. Ko enei paparanga kei te keteroki i roto i te kaihautu i muri i te tikinga tuatahi na te mea kaore e rereke. Ko te paparanga tono whakahou anake ka tangohia ki te kaihautu, he tere ake na te iti o te rahi .
Te hanga whakaahua me nga herenga ka tangohia ki nga paparanga motuhake
Ka hangahia e matou te ahua whakamutunga i roto i nga waahanga e rua ma te whakamahi i tetahi tikanga e kiia nei huihuinga maha-waahanga . I te taahiraa tuatahi ka tangohia e matou nga whakawhirinakitanga, i te waahanga tuarua ka kapehia e matou nga whakawhirinaki kua tangohia ki te ahua whakamutunga.
Me whakarereke i ta maatau Dockerfile mo te hanga maha-waahanga:
# 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"]
Ka tiakina e matou tenei whirihoranga ki tetahi konae motuhake - Dockerfile2.
Ka hangaia e matou te ahua Docker ma te whakamahi i te whakahau:
docker build -f Dockerfile2 -t usersignup:v1 .
I muri i te whakahaere i tenei whakahau ka whiwhi tatou i te putanga e whai ake nei:
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
Ka kite tatou ka hangaia he ahua Docker me te ID whakaahua ka tohua.
Ka mutu, ka whakahaerehia e matou te whakahau Dive pera i mua ki te tirotiro i nga papa o roto i te ahua Docker i hangaia. Ka taea e matou te whakarato i tetahi tohu whakaahua, tohu ranei hei whakauru ki te whakahau Dive:
dive userssignup:v1
Ka kitea e koe i roto i te putanga, ko te paparanga kei roto i te tono ko te 11 KB anake inaianei, a ko nga whakawhirinaki kei te keteroki ki nga paparanga motuhake.
Te tango i nga whakawhirinaki o roto ki nga paparanga takitahi
Ka taea e tatou te whakaiti ake i te rahi o te taumata tono ma te tango i tetahi o o tatou whakawhirinakitanga ritenga ki te taumata motuhake, kaua ki te kapi ki te tono ma te whakapuaki i roto ymlhe rite te ingoa o te konae layers.idx:
I roto i tenei kōnae layers.idxkua taapirihia e matou he ti'aturi ritenga kua whakaingoatia, io.myorgkei roto nga whakawhirinakitanga whakahaere i tikina mai i te putunga tiritahi.
mutunga
I roto i tenei tuhinga, i titiro matou ki te whakamahi Cloud-Native Buildpacks ki te hanga i tetahi ahua ipu mai i te waehere puna. He rereke tenei ki te whakamahi i a Docker ki te hanga i tetahi ahua ipu ki te ahua o mua: te hanga tuatahi i tetahi konae JAR ka taea te kawe, katahi ka takai ki roto i te ahua ipu ma te tohu i nga tohutohu kei te konae Docker.
I titiro ano matou ki te whakapai ake i ta maatau ipu ma te whakaahei i tetahi waahanga paparanga e kumea ana nga whakawhirinakitanga ki nga paparanga motuhake ka keteroki ki runga i te kaihautu me tetahi papa angiangi o te tono ka utaina i te wa whakarite i roto i nga miihini mahi o te ipu.
Ka kitea e koe nga waehere puna katoa i whakamahia i roto i te tuhinga i GitHub .
Tohutoro whakahau
Anei he rarangi tere o nga whakahau i whakamahia e matou i tenei tuhinga.
Horopaki whakawātea:
docker system prune -a
Te hanga pikitia ipu ma te whakamahi i te konae Docker:
docker build -f <Docker file name> -t <tag> .
Ka hangaia e matou te ahua ipu mai i te waehere puna (kaore he Dockerfile):
mvn spring-boot:build-image
Tirohia nga paparanga whakawhirinaki. I mua i te hanga i te konae JAR tono, me mohio kei te whakahohea te waahanga paparanga ki te puna-boot-maven-monomai:
java -Djarmode=layertools -jar application.jar list
Te tango i nga papa whakawhirinaki. I mua i te hanga i te konae JAR tono, me mohio kei te whakahohea te waahanga paparanga ki te puna-boot-maven-monomai: