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 paerewaKaupapa 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 weblombokи 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:

FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]

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: 

Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna

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.

Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna

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:

<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>

Me whakamahi a Maven ki te mahi build-imagewhainga mo te hanga tono me te hanga pikitia ipu. Kaore matou e whakamahi ana i nga Dockerfiles i tenei wa.

mvn spring-boot:build-image

Ko te hua ka penei:

[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'

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:

docker images 

Whakamutunga:

REPOSITORY                             SIZE
paketobuildpacks/run                  84.3MB
gcr.io/paketo-buildpacks/builder      652MB
pratikdas/usersignup                  257MB

Te hanga pikitia ipu ma te whakamahi Jib

Ko Jib he taputapu hanga whakaahua mai i a Google e whakarato ana i tetahi tikanga rereke mo te hanga pikitia ipu mai i te waehere puna.

Te whakarite jib-maven-plugini roto i te pom.xml:

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>

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:

mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1

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:

Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna

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:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <layers>
      <enabled>true</enabled>
    </layers>
  </configuration> 
</plugin>

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:

Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna

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:

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

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:

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar

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 listextractи helpс helphei taunoa. Me whakahaere te whakahau me te listkōwhiringa:

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application

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. 

Waihanga Atahanga Docker Arotau mo te Taupānga Whakaara Puna

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:

- "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/"

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:

 java -Djarmode=layertools -jar application.jar extract

Tirohia te rarangi o nga whakaahua ipu

docker images

Tiro ki te taha maui i roto i te ahua ipu (kia mohio kua whakauruhia te taputapu ruku):

dive <image ID or image tag>

Source: will.com