Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

Is iad na coimeádáin an rogha modh chun feidhmchlár a phacáistiú lena spleáchais go léir ar bhogearraí agus ar chórais oibriúcháin agus ansin iad a sheachadadh chuig timpeallachtaí éagsúla.

Clúdaíonn an t-alt seo bealaí éagsúla chun feidhmchlár Spring Boot a choimeád:

  • ag cruthú íomhá Docker ag baint úsáide as comhad Docker,
  • íomhá OCI a chruthú ón bhfoinse ag úsáid Cloud-Native Buildpack,
  • agus leas iomlán a bhaint as íomhá am rite trí chodanna den JAR a scaradh i sraitheanna éagsúla ag baint úsáide as uirlisí ilchiseal.

 Sampla Cód

Tá sampla cód oibre ag gabháil leis an Airteagal seo ar GitHub .

Téarmaíocht coimeádán

Tosóimid leis an téarmaíocht coimeádáin a úsáidtear san alt:

  • Íomhá coimeádán: comhad de bhformáid ar leith. Déanfaimid ár n-iarratas a thiontú ina íomhá coimeádán tríd an uirlis tógála a rith.
  • Coimeádán: Sampla inrite den íomhá coimeádán.
  • Inneall coimeádán: An próiseas deamhan atá freagrach as an gcoimeádán a rith.
  • Óstach coimeádán: An ríomhaire ósta ar a ritheann an t-inneall coimeádán.
  • Clárlann coimeádán: An suíomh ginearálta a úsáidtear chun íomhá an choimeádáin a fhoilsiú agus a dháileadh.
  • OCI caighdeánachTionscnamh Coimeádán Oscailte (OCI) is struchtúr rialachais éadrom, oscailte é a foirmíodh laistigh den Fhondúireacht Linux. Sainmhíníonn Sonraíocht Íomhá OCI caighdeáin tionscail maidir le formáidí íomhá coimeádáin agus am rite lena chinntiú gur féidir le gach inneall coimeádán íomhánna coimeádáin a chruthaíonn aon uirlis tógála a reáchtáil.

Chun feidhmchlár a choimeád, fillteaimid ár bhfeidhmchlár in íomhá coimeádán agus foilsímid an íomhá sin i gclár comhroinnte. Aisghabhann an t-am rite coimeádán an íomhá seo ón gclárlann, díphacáil sé í, agus ritheann an feidhmchlár istigh inti.

Soláthraíonn Leagan 2.3 de Spring Boot forlíontáin chun íomhánna OCI a chruthú.

dhugaire Is é an cur i bhfeidhm coimeádán is coitianta a úsáidtear, agus úsáidimid Docker inár samplaí, mar sin déanfaidh gach tagairt coimeádán ina dhiaidh sin san Airteagal seo tagairt do Docker.

Ag tógáil íomhá coimeádán ar an mbealach traidisiúnta

Tá sé an-éasca íomhánna Docker a chruthú le haghaidh feidhmchláir Spring Boot trí roinnt treoracha a chur leis an gcomhad Docker.

Cruthaímid comhad JAR inrite ar dtús agus, mar chuid de threoracha an chomhaid Docker, cóipeáil an comhad JAR inrite ar bharr an bhuníomhá JRE tar éis na socruithe riachtanacha a chur i bhfeidhm.

Déanaimis ár n-iarratas Earraigh a chruthú ar Tús an Earraigh le spleáchais weblombokи actuator. Táimid ag cur rialtóir scíthe leis freisin chun API a sholáthar GETmodh.

Dockerfile a Chruthú

Coimeádaimid an feidhmchlár seo ansin trí chur leis Dockerfile:

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

Tá buníomhá inár gcomhad Docker ó adoptopenjdk, ar a bharr a chóipeáilimid ár gcomhad JAR agus ansin an port a oscailt, 8080a éistfidh le hiarratais.

Ag tógáil an iarratais

Ar dtús ní mór duit feidhmchlár a chruthú ag baint úsáide as Maven nó Gradle. Úsáidimid Maven anseo:

mvn clean package

Cruthaíonn sé seo comhad JAR inrite don fheidhmchlár. Ní mór dúinn an JAR inrite seo a thiontú ina íomhá Docker le rith ar an inneall Docker.

Íomhá coimeádán a chruthú

Ansin cuirimid an comhad JAR inrite seo isteach san íomhá Docker tríd an ordú a rith docker buildó fhréamh-eolaire an tionscadail ina bhfuil an Dockerfile a cruthaíodh níos luaithe:

docker build  -t usersignup:v1 .

Is féidir linn ár n-íomhá a fheiceáil sa liosta ag baint úsáide as an ordú:

docker images 

Áiríonn aschur an ordaithe thuas ár n-íomhá usersignupin éineacht leis an íomhá bhunúsach, adoptopenjdksonraithe inár gcomhad Docker.

REPOSITORY          TAG                 SIZE
usersignup          v1                  249MB
adoptopenjdk        11-jre-hotspot      229MB

Féach ar na sraitheanna taobh istigh d'íomhá coimeádán

Breathnaímid ar an gcruach sraitheanna taobh istigh den íomhá. Úsáidfimid инструмент  tumadh chun na sraitheanna seo a fheiceáil:

dive usersignup:v1

Seo cuid den aschur ón ordú Dive: 

Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

Mar is féidir linn a fheiceáil, is cuid shuntasach de mhéid na híomhá é ciseal an iarratais. Ba mhaith linn méid na ciseal seo a laghdú sna hailt seo a leanas mar chuid dár leas iomlán a bhaint.

Íomhá coimeádán a chruthú ag baint úsáide as Buildpack

Pacáistí tionóil (Pacáistí tógála) is téarma ginearálta é a úsáideann tairiscintí éagsúla Ardán mar Sheirbhís (PAAS) chun íomhá coimeádán a chruthú ón gcód foinse. Sheol Heroku é in 2011 agus tá glactha ag Cloud Foundry, Google App Engine, Gitlab, Knative agus go leor eile leis ó shin.

Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

An buntáiste a bhaint as pacáistí tógála scamall

Ceann de na príomhbhuntáistí a bhaineann le Buildpack a úsáid chun íomhánna a chruthú ná sin Is féidir athruithe cumraíochta íomhá a bhainistiú go lárnach (tógálaí) agus a iomadaíodh chuig gach feidhmchlár a úsáideann tógálaí.

Bhí na pacáistí tógála cúpláilte go docht leis an ardán. Soláthraíonn Cloud-Native Buildpacks caighdeánú ar fud ardáin trí thacú le formáid íomhá OCI, rud a chinntíonn gur féidir an íomhá a reáchtáil ag an inneall Docker.

Ag baint úsáide as an breiseán Spring Boot

Tógann an breiseán Spring Boot íomhánna OCI ón bhfoinse ag baint úsáide as Buildpack. Cruthaítear íomhánna ag baint úsáide as bootBuildImagetascanna (Gradle) nó spring-boot:build-imagespriocanna (Maven) agus suiteáil áitiúil Docker.

Is féidir linn ainm na híomhá a theastaíonn chun brú chuig an gclár Docker a shaincheapadh tríd an ainm a shonrú i 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>

A ligean ar úsáid Maven chun é a dhéanamh build-imagespriocanna chun feidhmchlár a chruthú agus íomhá coimeádán a chruthú. Níl aon Dockerfiles á n-úsáid againn faoi láthair.

mvn spring-boot:build-image

Beidh an toradh rud éigin mar seo:

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

Ón aschur feicimid é sin paketo Cloud-Native buildpacka úsáidtear chun íomhá OCI oibre a chruthú. Mar a bhí roimhe seo, is féidir linn an íomhá atá liostaithe mar íomhá Docker a fheiceáil tríd an ordú a rith:

docker images 

Conclúid:

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

Íomhá coimeádán a chruthú ag baint úsáide as Jib

Is breiseán cruthú íomhá ó Google é Jib a sholáthraíonn modh eile chun íomhá coimeádán a chruthú ón gcód foinseach.

Cumrú jib-maven-plugini pom.xml:

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

Ansin, reáchtáilimid an breiseán Jib ag baint úsáide as an t-ordú Maven chun an feidhmchlár a thógáil agus íomhá coimeádán a chruthú. Mar a bhí roimhe seo, níl aon chomhaid Docker á n-úsáid againn anseo:

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

Tar éis an t-ordú Maven thuas a fhorghníomhú, faigheann muid an t-aschur seo 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

Léiríonn an t-aschur go bhfuil an íomhá coimeádán cruthaithe agus curtha sa chlár.

Spreagthaí agus teicnící chun íomhánna optamaithe a chruthú

Tá dhá phríomhchúis againn le leas iomlán a bhaint as:

  • Táirgiúlacht: I gcóras orchestration coimeádán, déantar íomhá coimeádán a aisghabháil ón gclárlann íomhá chuig an ósta a ritheann an t-inneall coimeádán. Pleanáil a thugtar ar an bpróiseas seo. Nuair a tharraingítear íomhánna móra ón gclárlann bíonn amanna fada sceidealaithe i gcórais cheolchoirmeacha coimeádán agus amanna fada tógála i bpíblínte CI.
  • slándála: Tá réimse níos mó ag íomhánna níos mó le haghaidh leochaileachtaí.

Tá íomhá Docker comhdhéanta de chairn sraitheanna, agus léiríonn gach ceann acu treoir inár Dockerfile. Léiríonn gach ciseal deilt de na hathruithe sa bhunchiseal. Nuair a tharraingímid íomhá Docker ón gclárlann, tarraingítear i sraitheanna é agus cuirtear i dtaisce ar an óstach é.

Úsáideann Tosaithe Earraigh "saill JAR" in mar an fhormáid réamhshocraithe pacáistithe. Nuair a fhéachaimid ar an JAR tiubh, feicimid gur cuid an-bheag den JAR iomlán atá san iarratas. Seo an chuid is minicí a athraíonn. Tá an chuid eile comhdhéanta de spleáchais Chreat an Earraigh.

Díríonn an fhoirmle barrfheabhsaithe ar an bhfeidhmchlár a leithlisiú ar leibhéal ar leith ó spleáchais Chreat an Earraigh.

Ní dhéantar an ciseal spleáchais, arb é an chuid is mó den chomhad tiubh JAR é a íoslódáil ach uair amháin agus a thaisceadh ar an gcóras óstaigh.

Ní tharraingítear ach sraith tanaí den fheidhmchlár le linn nuashonruithe iarratais agus sceidealú coimeádáin. mar a thaispeántar sa léaráid seo:

Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

Sna hailt seo a leanas, féachfaimid ar conas na híomhánna optamaithe seo a chruthú le haghaidh feidhmchlár Tosaithe Earraigh.

Íomhá Coimeádán Optamaithe a Chruthú le haghaidh Feidhmchlár Tosaithe Earraigh ag Úsáid Buildpack

Tacaíonn Spring Boot 2.3 le cisealú trí chodanna de chomhad tiubh JAR a bhaint i sraitheanna ar leith. Tá an ghné cisealta díchumasaithe de réir réamhshocraithe agus ní mór í a chumasú go sainráite ag baint úsáide as an breiseán Spring Boot Maven:

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

Úsáidfimid an chumraíocht seo chun ár n-íomhá coimeádán a thógáil ar dtús le Buildpack agus ansin le Docker sna hailt seo a leanas.

A ligean ar a sheoladh build-imageSprioc Maven chun íomhá coimeádáin a chruthú:

mvn spring-boot:build-image

Má reáchtálann muid Dive chun na sraitheanna san íomhá mar thoradh air a fheiceáil, is féidir linn a fheiceáil go bhfuil an ciseal iarratais (a imlínítear i ndath dearg) i bhfad níos lú sa raon kilobyte i gcomparáid leis an méid a fuair muid ag baint úsáide as an bhformáid JAR tiubh:

Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

Íomhá Coimeádán Optamaithe a Chruthú le haghaidh Feidhmchlár Tosaithe Earraigh ag Úsáid Docker

In ionad breiseán Maven nó Gradle a úsáid, is féidir linn íomhá cisealach Docker JAR a chruthú le comhad Docker.

Nuair a úsáidimid Docker, ní mór dúinn dhá chéim bhreise a dhéanamh chun na sraitheanna a bhaint as agus iad a chóipeáil isteach san íomhá deiridh.

Beidh cuma mar seo ar inneachar an JAR a bheidh mar thoradh air tar éis tógáil ag baint úsáide as Maven agus an ciseal a chumasú:

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

Taispeánann an t-aschur JAR breise ainmnithe spring-boot-jarmode-layertoolsи layersfle.idxcomhad. Soláthraíonn an comhad JAR breise seo cumais phróiseála sraithe, mar a thuairiscítear sa chéad chuid eile.

Braitheann spleáchas ar shraitheanna aonair

Chun sraitheanna a fheiceáil agus a bhaint as ár JAR cisealta, úsáidimid maoin an chórais -Djarmode=layertoolsle haghaidh tosaithe spring-boot-jarmode-layertoolsJAR in ionad an fheidhmchláir:

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

Nuair a ritheann tú an t-ordú seo, cruthaítear aschur ina bhfuil na roghanna ordaithe atá ar fáil:

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

Taispeánann an t-aschur na horduithe listextractи helpс helpa bheith ar an réamhshocraithe. A ligean ar a reáchtáil an t-ordú le listrogha:

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

Feicimid liosta de na spleáchais is féidir a chur leis mar sraitheanna.

Sraitheanna réamhshocraithe:

Ainm sraithe

Ábhar

dependencies

spleáchas ar bith nach bhfuil SNAPSHOT ag a leagan

spring-boot-loader

Ranganna Luchtaithe JAR

snapshot-dependencies

spleáchas ar bith a bhfuil SNAPSHOT ina leagan

application

ranganna feidhmchláir agus acmhainní

Sainmhínítear sraitheanna i layers.idxcomhad san ord ba chóir iad a chur leis an íomhá Docker. Déantar na sraitheanna seo a thaisceadh san ósta tar éis an chéad aisghabhála toisc nach n-athraíonn siad. Ní dhéantar ach an ciseal feidhmchláir nuashonraithe a íoslódáil chuig an óstach, rud atá níos tapúla mar gheall ar an méid laghdaithe .

Ag tógáil íomhá le spleáchais a bhaintear i sraitheanna ar leith

Tógfaimid an íomhá deiridh i dhá chéim ag baint úsáide as modh ar a dtugtar tionól ilchéime . Sa chéad chéim bainfimid na spleáchais amach agus sa dara céim déanfaimid na spleáchais a bhaintear a chóipeáil isteach san íomhá deiridh.

Déanaimis ár Dockerfile a mhodhnú le haghaidh tógáil ilchéime:

# 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ábháilimid an chumraíocht seo i gcomhad ar leith - Dockerfile2.

Tógaimid an íomhá Docker ag baint úsáide as an ordú:

docker build -f Dockerfile2 -t usersignup:v1 .

Tar éis an t-ordú seo a rith faighimid an t-aschur seo 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

Is féidir linn a fheiceáil go gcruthaítear íomhá Docker le haitheantas íomhá agus ansin é a chlibeáil.

Ar deireadh, ritheann muid an t-ordú Léim mar a rinneadh cheana chun na sraitheanna taobh istigh den íomhá Docker a ghintear a iniúchadh. Is féidir linn ID íomhá nó clib a sholáthar mar ionchur don ordú Léim:

dive userssignup:v1

Mar a fheiceann tú san aschur, níl ach 11 KB sa chiseal ina bhfuil an feidhmchlár anois, agus tá spleáchais i dtaisce i sraitheanna ar leith. 

Íomhánna Duga Optamaithe a Thógáil le haghaidh Feidhmchlár Tosaithe Earraigh

Braitheann spleáchais inmheánacha ar shraitheanna aonair

Is féidir linn méid na sraithe feidhmchláir a laghdú tuilleadh trí aon cheann dár spleáchais saincheaptha a bhaint amach i sraith ar leith seachas iad a phacáistiú leis an bhfeidhmchlár trína dhearbhú i ymlcomhad den chineál céanna ainmnithe 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/"

Sa chomhad seo layers.idxchuireamar spleáchas saincheaptha leis ainmnithe, io.myorgina bhfuil spleáchais eagraíochta a fuarthas ó stór comhroinnte.

Aschur

San Airteagal seo, d'fhéachamar ar Cloud-Native Buildpacks a úsáid chun íomhá coimeádán a thógáil go díreach ó chód foinse. Is rogha eile é seo seachas Docker a úsáid chun íomhá coimeádán a chruthú ar an ngnáthbhealach: ar dtús comhad JAR inrite tiubh a chruthú agus ansin é a phacáistiú isteach i gcoimeádán íomhá trí threoracha a shonrú sa chomhad Docker.

D'fhéachamar freisin ar ár gcoimeádán a bharrfheabhsú trí ghné layering a chumasú a tharraingíonn spleáchais isteach i sraitheanna ar leith atá i dtaisce ar an óstach agus a luchtaítear sraith tanaí den fheidhmchlár ag am sceidealaithe in innill fhorghníomhaithe an choimeádáin.

Is féidir leat an cód foinse go léir a úsáidtear san alt a fháil ag Github .

Tagairt ordú

Seo achoimre tapa ar na horduithe a d'úsáideamar san Airteagal seo.

Imréitigh comhthéacs:

docker system prune -a

Íomhá coimeádán a chruthú le comhad Docker:

docker build -f <Docker file name> -t <tag> .

Tógaimid íomhá an choimeádáin ón gcód foinse (gan Dockerfile):

mvn spring-boot:build-image

Féach ar na sraitheanna spleáchais. Sula dtógfaidh tú comhad JAR an fheidhmchláir, cinntigh go bhfuil an ghné cisealta cumasaithe in spring-boot-maven-plugin:

java -Djarmode=layertools -jar application.jar list

Ag baint as sraitheanna spleáchais. Sula dtógfaidh tú comhad JAR an fheidhmchláir, cinntigh go bhfuil an ghné cisealta cumasaithe in spring-boot-maven-plugin:

 java -Djarmode=layertools -jar application.jar extract

Féach ar liosta íomhánna coimeádáin

docker images

Amharc ar an taobh clé taobh istigh den íomhá coimeádán (déan cinnte go bhfuil an uirlis tumadóireachta suiteáilte):

dive <image ID or image tag>

Foinse: will.com