Kupanga Zithunzi Zapamwamba za Docker Kuti Mugwiritse Ntchito Boot Spring
Zotengera zakhala njira yomwe imakonda kuyika pulogalamu ndi mapulogalamu ake onse ndi kudalira kwamakina ogwiritsira ntchito ndikuzipereka kumadera osiyanasiyana.
Nkhaniyi ikufotokoza njira zosiyanasiyana zosungira pulogalamu ya Spring Boot:
kupanga chithunzi cha Docker pogwiritsa ntchito fayilo ya Docker,
kupanga chithunzi cha OCI kuchokera kugwero pogwiritsa ntchito Cloud-Native Buildpack,
ndi kukhathamiritsa kwa zithunzi za nthawi yothamanga polekanitsa magawo a JAR kukhala magawo osiyanasiyana pogwiritsa ntchito zida zamitundu yambiri.
Kodi Chitsanzo
Nkhaniyi ikuphatikizidwa ndi chitsanzo cha code code pa GitHub .
Container terminology
Tiyamba ndi mawu a chidebe omwe agwiritsidwa ntchito m'nkhaniyi:
Chithunzi cha Container: fayilo yamtundu wina. Tidzasintha pulogalamu yathu kukhala chithunzi cha chidebe pogwiritsa ntchito chida chomanga.
Chotsitsa: Chitsanzo chotheka cha chithunzi cha chidebe.
Injini ya Container: Njira ya daemon yomwe imayang'anira chidebecho.
Container host: Kompyuta yolandila yomwe injini ya chidebe imayendera.
Container registry: Malo omwe amagwiritsidwa ntchito kusindikiza ndi kugawa chithunzi cha chidebecho.
OCI muyezo: Open Container Initiative (OCI) ndi dongosolo lopepuka, lotseguka lokhazikitsidwa mkati mwa Linux Foundation. The OCI Image Specification imatanthawuza miyezo yamakampani yamawonekedwe a chidebe ndi mawonekedwe a nthawi yoyendetsa kuti awonetsetse kuti ma injini onse amatha kuyendetsa zithunzi zamachidebe zopangidwa ndi chida chilichonse chomangira.
Kupanga zithunzi za Docker pamapulogalamu a Spring Boot ndikosavuta kwambiri powonjezera malangizo angapo pafayilo ya Docker.
Timayamba kupanga fayilo ya JAR yomwe ingathe kuchitika ndipo, monga gawo la malangizo a fayilo ya Docker, koperani fayilo ya JAR pamwamba pa chithunzi choyambira cha JRE mutagwiritsa ntchito zofunikira.
Tiyeni tipange pulogalamu yathu ya Spring Spring Initializr ndi zodalira web, lombokΠΈ actuator. Tikuwonjezeranso chowongolera kuti tipereke API GETnjira.
Fayilo yathu ya Docker ili ndi chithunzi choyambira adoptopenjdk, pamwamba pake timakopera fayilo yathu ya JAR ndikutsegula doko, 8080amene adzamvera zopempha.
Izi zimapanga fayilo ya JAR yomwe ingagwiritsidwe ntchito. Tiyenera kusintha JAR yotheka iyi kukhala chithunzi cha Docker kuti tiyende pa injini ya Docker.
Kupanga chithunzi cha chidebe
Kenako timayika fayilo iyi ya JAR mu chithunzi cha Docker poyendetsa lamulo docker buildkuchokera ku chikwatu cha polojekiti yomwe ili ndi Dockerfile yomwe idapangidwa kale:
Zotsatira za lamulo ili pamwambazi zikuphatikizapo chithunzi chathu usersignuppamodzi ndi chithunzi choyambira, adoptopenjdkzafotokozedwa mu fayilo yathu ya Docker.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Onani zigawo mkati mwa chithunzi cha chidebe
Tiyeni tione mulu wa zigawo mkati mwa fano. Tidzagwiritsa ntchito chida kudumpha kuti muwone zigawo izi:
dive usersignup:v1
Nayi gawo lazotulutsa kuchokera ku lamulo la Dive:
Monga tikuonera, gawo logwiritsira ntchito limapanga gawo lalikulu la kukula kwa fano. Tikufuna kuchepetsa kukula kwa gawoli m'magawo otsatirawa ngati gawo la kukhathamiritsa kwathu.
Kupanga chithunzi cha chidebe pogwiritsa ntchito Buildpack
Phukusi la msonkhano (Zomangamanga) ndi mawu wamba omwe amagwiritsidwa ntchito ndi nsanja zosiyanasiyana monga Service (PAAS) zopereka kuti apange chithunzi cham'chidebe kuchokera ku code code. Idakhazikitsidwa ndi Heroku mu 2011 ndipo idakhazikitsidwa ndi Cloud Foundry, Google App Engine, Gitlab, Knative ndi ena angapo.
Pambuyo popereka lamulo la Maven pamwambapa, timapeza zotsatirazi:
[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
Zotsatira zikuwonetsa kuti chithunzi cha chidebecho chapangidwa ndikuyikidwa mu registry.
Zolimbikitsa ndi njira zopangira zithunzi zokongoletsedwa bwino
Tili ndi zifukwa ziwiri zazikulu zokwaniritsira:
Kukonzekera: Mu kachitidwe ka chidebe choyimba, chithunzi cha chidebe chimatengedwa kuchokera ku registry ya zithunzi kupita kwa wolandira omwe akuyendetsa injini ya chidebe. Njira imeneyi imatchedwa kukonzekera. Kukoka zithunzi zazikulu kuchokera ku registry kumabweretsa nthawi yayitali yokonzekera m'makina oimba ndi nthawi yayitali yomanga mapaipi a CI.
Chitetezo: Zithunzi zazikuluzikulu zilinso ndi malo okulirapo osatetezeka.
Chithunzi cha Docker chimakhala ndi mulu wa zigawo, zomwe zimayimira malangizo mu Dockerfile yathu. Chigawo chilichonse chimayimira delta ya zosintha zomwe zili pansi pake. Tikakoka chithunzi cha Docker kuchokera ku registry, chimakokedwa m'magawo ndikusungidwa pa wolandirayo.
Spring Boot imagwiritsa ntchito "mafuta JAR" mu monga mtundu wokhazikika wapackage. Tikayang'ana JAR wandiweyani, timawona kuti kugwiritsa ntchito kumapanga gawo laling'ono kwambiri la JAR yonse. Ichi ndi gawo lomwe limasintha nthawi zambiri. Zotsalazo zimakhala ndi zodalira za Spring Framework.
Njira yokwaniritsira imakhazikika pakupatula pulogalamuyo pamlingo wosiyana ndi kudalira kwa Spring Framework.
Chigawo chodalira, chomwe chimapanga kuchuluka kwa fayilo ya JAR yokhuthala, imatsitsidwa kamodzi kokha ndikusungidwa pamakina osungira.
Kagawo kakang'ono kokha ka pulogalamuyi ndi komwe kamakokedwa panthawi yosintha ntchito komanso kukonza zotengera. monga zikuwonekera pachithunzichi:
Spring Boot 2.3 imathandizira kusanjika pochotsa magawo a fayilo ya JAR yakuda mu zigawo zosiyana. Chosanjikizacho chimayimitsidwa mwachisawawa ndipo chiyenera kuthandizidwa momveka bwino pogwiritsa ntchito pulogalamu yowonjezera ya Spring Boot Maven:
Zotsatira zikuwonetsa JAR yowonjezera yotchedwa spring-boot-jarmode-layertoolsΠΈ layersfle.idxwapamwamba. Fayilo yowonjezera ya JAR iyi imapereka kuthekera kosinthira, monga tafotokozera mgawo lotsatira.
Kuchotsa zidalira pa aliyense zigawo
Kuti muwone ndikuchotsa zigawo kuchokera ku JAR yathu yosanjikiza, timagwiritsa ntchito katundu wamakina -Djarmode=layertoolskwa poyambira spring-boot-jarmode-layertoolsJAR m'malo mwa kugwiritsa ntchito:
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
# 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"]
Timasunga izi mu fayilo ina - Dockerfile2.
Timamanga chithunzi cha Docker pogwiritsa ntchito lamulo:
docker build -f Dockerfile2 -t usersignup:v1 .
Pambuyo poyendetsa lamulo ili timapeza zotsatirazi:
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
Titha kuwona kuti chithunzi cha Docker chimapangidwa ndi chithunzi cha ID kenako ndikumangidwa.
Pomaliza, timayendetsa lamulo la Dive monga kale kuti tiyang'ane zigawo zomwe zili mkati mwa chithunzi chopangidwa ndi Docker. Titha kupereka chithunzithunzi cha ID kapena tag ngati cholowetsa ku lamulo la Dive:
dive userssignup:v1
Monga mukuwonera pazotulutsa, wosanjikiza womwe uli ndi pulogalamuyi ndi 11 KB yokha, ndipo zodalira zimasungidwa m'magawo osiyanasiyana.
Kuchotsa zodalira zamkati pamagulu amodzi
Titha kuchepetsanso kukula kwa gawo logwiritsira ntchito pochotsa zodalira zathu zilizonse kukhala gawo lina m'malo moziyika ndi pulogalamuyo pozilengeza mu ymlfayilo yofananira yotchedwa layers.idx:
Mu fayilo iyi layers.idxtawonjezera kudalira komwe kumatchedwa, io.myorgzomwe zili ndi zidalira pa bungwe zomwe zatengedwa kuchokera kunkhokwe yogawana nawo.
Pomaliza
M'nkhaniyi, tidayang'ana kugwiritsa ntchito Cloud-Native Buildpacks kuti tipange chithunzi cha chidebe mwachindunji kuchokera ku code code. Iyi ndi njira ina yogwiritsira ntchito Docker kupanga chithunzi cha chidebe monga mwachizolowezi: choyamba pangani fayilo ya JAR yokhazikika ndikuyiyika mu chidebe pofotokoza malangizo mu fayilo ya Docker.