Containers yave nzira yakasarudzika yekurongedza application neayo ese software uye inoshanda sisitimu inotsamira uye wozoendesa kune akasiyana nharaunda.
Ichi chinyorwa chinovhara nzira dzakasiyana dzekuisa mukati meChitubu Boot application:
- kuvaka chifananidzo chedocker uchishandisa dockerfile,
- kuvaka mufananidzo weOCI kubva kunobva uchishandisa Cloud-Native Buildpack,
- uye optimization yemufananidzo panguva yekumhanya nekuparadzanisa zvikamu zveJAR mumatanho akasiyana uchishandisa maturusi akaiswa.
Code Muenzaniso
Ichi chinyorwa chinoperekedzwa nemuenzaniso wekodhi yekushanda
Container terminology
Tichatanga ne terminology yemidziyo inoshandiswa mukati mechinyorwa ichi:
- Mufananidzo wemudziyo: faira remhando chaiyo. Isu tinoshandura application yedu kuita mufananidzo wemudziyo nekumhanyisa chishandiso chekuvaka.
- Mudziyo: Muenzaniso unogoneka wemufananidzo wemudziyo.
- Injini yemidziyo: Iyo daemon maitiro ane basa rekumhanyisa mudziyo.
- Container host: Muchina wekugamuchira uyo injini yemidziyo iri kushanda.
- Container registry: Nzvimbo yakajairika inoshandiswa kushambadza uye kugovera mufananidzo wemudziyo.
- OCI standard:
Vhura Container Initiative (OCI) isingaremi, yakavhurika-sosi manejimendi system yakaumbwa neLinux Foundation. Iyo OCI Image Tsanangudzo inotsanangura indasitiri zviyero zvemafomati emifananidzo uye nguva yekumhanyisa kuona kuti ese maenjini emidziyo anogona kumhanyisa mifananidzo yemidziyo yakagadzirwa nechero chishandiso chekuvaka.
Kuti tiise application, tinoputira application yedu mumudziyo mufananidzo uye tinoshambadza iwo mufananidzo kune yeruzhinji registry. Iyo mudziyo runtime inotora iyi chifananidzo kubva kurejista, inoiburitsa, uye inomhanyisa application mukati mayo.
Shanduro 2.3 yeSpring Boot inopa plugins yekuvaka OCI mifananidzo.
Kuvaka mufananidzo wemudziyo nenzira yechinyakare
Kuvaka Docker mifananidzo yeChitubu Boot application iri nyore kwazvo nekuwedzera mashoma mirairo kuDockerfile yako.
Isu tinotanga kugadzira JAR inogoneka uye, sechikamu cheDockerfile mirairo, kopira iyo inotepfenyura JAR pamusoro peiyo base JRE mufananidzo mushure mekushandisa inodiwa maitiro.
Ngatigadzire yedu Chitubu application pa web
, lombok
ΠΈ actuator
. Isu tinowedzerawo kuzorora controller kuti tipe API nayo GET
nzira.
Kugadzira Dockerfile
Isu tozoisa iyi application mumudziyo nekuwedzera Dockerfile
:
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]
Yedu Dockerfile ine base mufananidzo, kubva adoptopenjdk
, pamusoro payo isu tinokopa yedu JAR faira tozovhura chiteshi, 8080
iyo inoteerera zvikumbiro.
Application assembly
Kutanga iwe unofanirwa kugadzira application uchishandisa Maven kana Gradle. Pano tiri kushandisa Maven:
mvn clean package
Izvi zvinogadzira faira reJAR rinogoneka rekushandisa. Isu tinofanirwa kushandura iyi inogoneka JAR kuita Docker mufananidzo kuti umhanye paDocker injini.
Gadzira mufananidzo wemudziyo
Isu tobva taisa iyi JAR inogoneka muDocker mufananidzo nekumhanyisa rairo docker build
kubva kumudzi weprojekiti dhairekitori ine Dockerfile yakagadzirwa kare:
docker build -t usersignup:v1 .
Tinogona kuona mufananidzo wedu mune runyorwa nemurairo:
docker images
Kubuda kwemurairo wepamusoro kunosanganisira mufananidzo wedu usersignup
pamwe chete nemufananidzo wekutanga, adoptopenjdk
yakatsanangurwa muDockerfile yedu.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Ona mitsara mukati memufananidzo wemudziyo
Ngatitarisei kune akaturikidzana mukati memufananidzo. Tichashandisa
dive usersignup:v1
Hechino chikamu chekubuda kweiyo Dive command:
Sezvatinoona, iyo application layer inoita chikamu chakakosha chehukuru hwemufananidzo. Tinoda kudzikisa saizi yeiyi layer muzvikamu zvinotevera sechikamu chekugadzirisa kwedu.
Kuvaka mufananidzo wemudziyo neBuildpack
Kubatsira kwe Cloud Build Packages
Imwe yemabhenefiti makuru ekushandisa Buildpack kuvaka mifananidzo ndeyekuti shanduko yegadziriso yemufananidzo inogona kutariswa nechepakati (muvaki) uye kuparidzirwa kune ese maapplication uchishandisa muvaki.
Mapasuru ekuvaka aive akanyatsosungirirwa pachikuva. Cloud-Native Buildpacks inopa kumira pamapuratifomu nekutsigira iyo OCI mufananidzo fomati, iyo inova nechokwadi chekuti chifananidzo chinogona kumhanyiswa neDocker injini.
Kushandisa Spring Boot Plugin
Iyo Spring Boot plugin inovaka OCI mifananidzo kubva kunobva uchishandisa Buildpack. Mifananidzo inogadzirwa uchishandisa bootBuildImage
mabasa (Gradle) kana spring-boot:build-image
chinangwa (Maven) uye yemuno Docker kuisirwa.
Isu tinogona kugadzirisa zita remufananidzo watinoda kusundira kuDocker registry nekutsanangura zita mukati 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>
Ngatishandisei Maven kuita build-image
zvinangwa zvekugadzira application uye kugadzira mufananidzo wemudziyo. Isu hatisi kushandisa chero Dockerfiles parizvino.
mvn spring-boot:build-image
Mhedzisiro ichava chinhu chakadai:
[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'
Kubva pane zvakabuda, tinozviona paketo Cloud-Native buildpack
inoshandiswa kugadzira mufananidzo unoshanda weOCI. Sekare, isu tinogona kuona mufananidzo wakanyorwa seDocker mufananidzo nekumhanyisa murairo:
docker images
Mhedziso:
REPOSITORY SIZE
paketobuildpacks/run 84.3MB
gcr.io/paketo-buildpacks/builder 652MB
pratikdas/usersignup 257MB
Kugadzira mufananidzo weContainer neJib
Jib ipikicha yekunyora mifananidzo kubva kuGoogle inopa imwe nzira yekugadzira mufananidzo wemudziyo kubva kunobva.
Tsika jib-maven-plugin
mune pom.xml:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
Tevere, isu tinomhanyisa Jib plugin tichishandisa iyo Maven kuraira kuvaka iyo application uye kugadzira iyo mudziyo mufananidzo. Sekare, hatisi kushandisa chero Dockerfiles pano:
mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1
Mushure mekuita murairo weMaven uri pamusoro, tinowana zvinotevera:
[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
Izvo zvinobuda zvinoratidza kuti mufananidzo wemudziyo wakagadzirwa uye wakaiswa mune registry.
Zvinokurudzira uye nzira dzekugadzira yakagadziridzwa mifananidzo
Tine zvikonzero zviviri zvakakosha zvekugadzirisa:
- Kubudirira: Mumudziyo we orchestration system, mufananidzo wemudziyo unodhonzwa kubva ku registry yemufananidzo kuenda kumugadziri achimhanyisa injini yemidziyo. Iyi nzira inonzi kuronga. Kudhonza mifananidzo mikuru kubva ku registry kunoguma nekureba yekuronga nguva mumudziyo orchestration masisitimu uye nguva refu yekuvaka mumapaipi eCI.
- Chengetedzo: mifananidzo mikuru inewo nzvimbo yakakura yekusagadzikana.
Mufananidzo weDocker unogadzirwa neakaturikidzana, imwe neimwe ichimiririra chirevo muDockerfile yedu. Mutsara wega wega unomiririra delta yekuchinja muchikamu chepasi. Kana isu tikadhonza mufananidzo weDocker kubva kurejista, inodhonzwa mumatanho uye yakavharirwa pane iyo host.
Spring Boot inoshandisa
Iyo optimization formula yakatarisana nekutsaura iyo application padanho rakasiyana kubva kuSpring Framework zvinoenderana.
Iyo yekutsamira layer inoumba iyo yakawanda yeiyo gobvu JAR faira inotorwa kamwe chete uye yakavharirwa pane iyo host system.
Chete chitete cheapp chinodhonzwa panguva yekuvandudzwa kweapp uye kuronga kwemidziyo, sezvinoratidzwa mumufananidzo uyu:
Muzvikamu zvinotevera, isu tichatarisa maitiro ekugadzira aya akakwenenzverwa mifananidzo yeChitubu Boot application.
Kuvaka Yakagadziridzwa Container Image yeChitubu Boot Chikumbiro neBuildpack
Spring Boot 2.3 inotsigira kuiswa nekubvisa zvikamu zveiyo gobvu JAR faira muzvikamu zvakasiyana. Iyo yekumisikidza inovharwa nekusarudzika uye inoda kugoneswa zvakajeka uchishandisa iyo Spring Boot Maven plugin:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
</plugin>
Isu tichashandisa iyi gadziriso kuvaka yedu mudziyo mufananidzo kutanga neBuildpack uyezve neDocker muzvikamu zvinotevera.
Ngatimhanyei build-image
Maven chinangwa chekugadzira mufananidzo wemudziyo:
mvn spring-boot:build-image
Kana tikamhanya Dive kuti tione matinji mumufananidzo unobuda, isu tinogona kuona kuti iyo application layer (yakatsanangurwa mutsvuku) idiki kwazvo mu kilobyte renji zvichienzaniswa nezvatakawana tichishandisa mafuta JAR fomati:
Kuvaka Yakakwenenzverwa Container Mufananidzo weChitubu Boot Chikumbiro neDocker
Panzvimbo pekushandisa Maven kana Gradle plugin, isu tinogona zvakare kugadzira yakaturikidzana Docker JAR mufananidzo neDocker faira.
Kana isu tikashandisa Docker, isu tinofanirwa kutora matanho maviri ekuwedzera kubvisa maseru uye kuakopa mumufananidzo wekupedzisira.
Zviri mukati meJAR yakaguma mushure mekuvaka neMaven ine layering inogoneswa inotaridzika seizvi:
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
Izvo zvinobuda zvinoratidza imwe JAR yakanzi spring-boot-jarmode-layertools
ΠΈ layersfle.idx
file. Iyi yekuwedzera JAR faira inopa kugona kwekuisa, sekutsanangurwa kwazvino muchikamu chinotevera.
Bvisa zvinotsamira pazvikamu zvakasiyana
Kuti utarise uye ubvise zvidimbu kubva kune yedu yakaturikidzana JAR, isu tinoshandisa sisitimu chivakwa -Djarmode=layertools
kwekutanga spring-boot-jarmode-layertools
JAR pachinzvimbo chekushandisa:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar
Kumhanya murairo uyu kunoburitsa chinobuda chine sarudzo dzekuraira dziripo:
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
Zvakabuda zvinoratidza mirairo list
, extract
ΠΈ help
Ρ help
kuva default. Ngatimhanyei murairo ne list
sarudzo:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application
Isu tinoona runyoro rwekutsamira iyo inogona kuwedzerwa sezvikamu.
Layer by default:
Layer name
Zviri mukati
dependencies
chero kutsamira iyo shanduro isina SNAPSHOT
spring-boot-loader
JAR Loader Makirasi
snapshot-dependencies
chero kutsamira ine vhezheni ine SNAPSHOT
application
makirasi ekushandisa uye zviwanikwa
Matanho anotsanangurwa mukati layers.idx
faira muhurongwa hwavanofanira kuwedzerwa kumufananidzo weDocker. Aya maturu akavharirwa pane anotambira mushure mekutora kwekutanga nekuti haachinje. Iyo chete yakagadziridzwa application layer inotorwa kune iyo host, iyo inokurumidza nekuda kwekuderedzwa saizi .
Kuvaka chifananidzo chine zvinotsamira zvakabviswa muzvikamu zvakasiyana
Tichavaka chifananidzo chekupedzisira mumatanho maviri tichishandisa nzira inonzi
Ngatigadzirise yedu Dockerfile yeakawanda-nhanho kuvaka:
# 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"]
Isu tinochengetedza iyi gadziriso mune yakaparadzana faira - Dockerfile2
.
Isu tinovaka iyo Docker mufananidzo tichishandisa iwo murairo:
docker build -f Dockerfile2 -t usersignup:v1 .
Mushure mekuita murairo uyu, tinowana zvinotevera:
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
Isu tinogona kuona kuti iyo Docker mufananidzo unogadzirwa nemufananidzo ID uye wobva wamaka.
Chekupedzisira, isu tinomhanyisa Dive rairo sepakutanga kuti titarise maseru mukati meyakagadzirwa Docker mufananidzo. Tinogona kupa ID yemufananidzo kana tag sekuisa kune iyo Dive command:
dive userssignup:v1
Sezvauri kuona kubva pane zvakabuda, iyo layer ine application yave 11 KB chete uye zvinotsamira zvakachengetwa muzvikamu zvakasiyana.
Kutora kutsamira kwemukati pane zvidimbu zvega
Isu tinokwanisa kudzoreredza saizi yedhizaini yekushandisa nekubvisa chero yetsika yedu inotsamira mune yakaparadzana layer pane kurongedza nekushandisa nekuzvizivisa mukati. yml
faira rakafanana rine zita 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/"
Mune iyi faira layers.idx
tawedzera tsika yekutsamira inonzi, io.myorg
ine zvinovigwa nesangano zvakatorwa kubva kune yakagovaniswa repository.
mhedziso
Muchikamu chino, takatarisa kushandisa Cloud-Native Buildpacks kuvaka mufananidzo wemudziyo wakananga kubva kunobva. Iyi ndiyo imwe nzira yekushandisa Docker kugadzira mufananidzo wemudziyo nenzira yakajairwa: kutanga, gobvu rinoitwa reJAR faira rinogadzirwa rozoiswa mumufananidzo wemudziyo nekutsanangura mirairo muDockerfile.
Isu takatarisawo kukwirisa mudziyo wedu nekubatanidza chinhu chekuisa chinoburitsa zvinotsamira muzvikamu zvakaparadzana zvakavharirwa pane anotambira uye nhete yekunyorera inoiswa panguva yekuronga mumajini ekuuraya emudziyo.
Unogona kuwana ese kodhi kodhi yakashandiswa muchinyorwa pa
Command Reference
Heino pfupiso yemirairo yatakashandisa muchinyorwa chino kuti utarise nekukurumidza.
Context clearing:
docker system prune -a
Kuvaka mufananidzo wemudziyo une Dockerfile:
docker build -f <Docker file name> -t <tag> .
Vaka mufananidzo wemudziyo kubva kunobva (pasina Dockerfile):
mvn spring-boot:build-image
Ona kutsamira zvikamu. Usati wavaka faira rejagi rekushandisa, ita shuwa kuti iyo yekumisikidza inogoneswa muchirimo-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar list
Bvisa zvidimbu zvekutsamira. Usati wavaka faira rejagi rekushandisa, ita shuwa kuti iyo yekumisikidza inogoneswa muchirimo-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar extract
Kuona Rondedzero Yemifananidzo YemuContainer
docker images
Tarisa kuruboshwe mukati memufananidzo wemudziyo (ita shuwa kuti dive mudziyo wakaiswa):
dive <image ID or image tag>
Source: www.habr.com