ProHoster > Blog > Pulega > Fausia ata o Docker sili ona lelei mo se Spring Boot Application
Fausia ata o Docker sili ona lelei mo se Spring Boot Application
O koneteina ua avea ma auala sili ona lelei e afifiina ai se talosaga ma ana polokalama faakomepiuta ma fa'agaioiga faiga fa'alagolago ona tu'uina atu lea i siosiomaga eseese.
O lenei tusiga e aofia ai auala eseese e faʻapipiʻi ai se talosaga Spring Boot:
fatuina o se ata Docker e faʻaaoga ai se faila Docker,
fatuina o se ata OCI mai le punavai e faʻaaoga ai le Cloud-Native Buildpack,
ma fa'ata'ita'iga fa'ata'ita'i taimi e ala i le tu'u'ese'ese o vaega o le JAR i fa'avae eseese e fa'aaoga ai meafaigaluega e tele-tier.
Fa'ata'ita'iga code
O lenei tusiga o loʻo faʻatasi ma se faʻataʻitaʻiga code galue i luga ole GitHub .
Fa'aupuga o pusa
O le a tatou amata i le container terminology o loʻo faʻaaogaina i le tusiga:
Ata o koneteina: faila o se faatulagaga patino. O le a matou faaliliuina a matou talosaga i se ata atigipusa e ala i le faʻaogaina o le meafaigaluega faufale.
Pusa: O se fa'ata'ita'iga fa'atinoina o le ata o le koneteina.
Inisinia pusa: O le faiga o le daemon e nafa ma le faʻaogaina o le koneteina.
Fale fa'aputu: Le komepiuta talimalo o loʻo faʻaogaina ai le afi pusa.
Resitala pusa: Le nofoaga lautele na faʻaaogaina e faʻasalalau ma tufatufa ai le ata o pusa.
OCI tulaga: Tatala Container Initiative (OCI) ose fa'atonuga mama, matala fa'apulepule fa'avae i totonu ole Linux Foundation. O le OCI Image Specification o loʻo faʻamalamalamaina tulaga faʻapitoa mo ata atigipusa ma faʻasologa taimi e faʻamautinoa ai e mafai e masini pusa uma ona faʻatautaia ata o pusa na faia e soʻo se meafaigaluega faufale.
Ina ia fa'aputuina se talosaga, matou te afifiina la matou talosaga i se ata fa'akomupiuta ma fa'asalalau lea ata i se resitala fa'asoa. O le taimi fa'agasolo o koneteina e toe aumai le ata lea mai le resitala, tatala, ma fa'agasolo le talosaga i totonu.
Fa'aliliuga 2.3 o Spring Boot e tu'uina atu fa'apipi'i mo le fa'atupuina o ata OCI.
Docker o le faʻaaogaina o koneteina e masani ona faʻaaogaina, ma matou te faʻaogaina le Docker i a matou faʻataʻitaʻiga, o lea o faʻamatalaga uma o pusa i totonu o lenei tusiga o le a faasino ia Docker.
Fausia se ata atigipusa i le auala masani
Fausia ata Docker mo Spring Boot talosaga e matua faigofie lava i le faʻaopoopoina o nai faʻatonuga i le faila Docker.
Matou te fatuina muamua se faila JAR e mafai ona faʻaaogaina ma, o se vaega o le faila faila a Docker, kopi le faila JAR faʻapipiʻi i luga o le ata JRE faavae pe a uma ona faʻaogaina tulaga talafeagai.
Se'i fai la tatou talosaga Spring i luga Spring Initializr ma fa'alagolago web, lombokи actuator. O loʻo matou faʻaopoopoina foʻi se pule malolo e tuʻuina atu ai se API GETauala.
Fausia se Dockerfile
Ona matou teuina lea o lenei talosaga e ala i le faaopoopo Dockerfile:
O la matou faila Docker o loʻo i ai se ata faʻavae mai adoptopenjdk, i luga o le mea matou te kopiina le faila JAR ona tatala lea o le taulaga, 8080lea o le a faalogo mo talosaga.
Fausia le talosaga
Muamua e tatau ona e fatuina se talosaga e faʻaaoga ai Maven poʻo Gradle. O iinei matou te faʻaaogaina Maven:
mvn clean package
Ole mea lea e faia ai se faila JAR fa'atinoina mo le talosaga. Matou te manaʻomia le faʻaliliuina o lenei JAR faʻatinoina i se ata Docker e taʻavale i luga o le Docker engine.
Fausia se ata o pusa
Ona matou tuʻuina lea o le faila JAR faʻaaogaina i le ata Docker e ala i le faʻatonuina o le poloaiga docker buildmai le lisi autu o le poloketi o loʻo i ai le Dockerfile na faia muamua:
docker build -t usersignup:v1 .
E mafai ona tatou vaʻai i la tatou ata i le lisi e faʻaaoga ai le poloaiga:
docker images
O le gaioiga o le poloaiga i luga e aofia ai la tatou ata usersignupfaatasi ai ma le ata faavae, adoptopenjdkfaʻamaonia i la matou faila Docker.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
Va'ai laulau i totonu o se ata koneteina
Se'i o tatou va'ai i le fa'aputuga o fa'alava i totonu o le ata. O le a matou faʻaaogaina mea faifaaili maulu e va'ai i laulau nei:
dive usersignup:v1
O se vaega lenei o le gaioiga mai le Dive command:
E pei ona mafai ona tatou vaʻaia, o le faʻapipiʻi talosaga e faia ai se vaega taua o le tele o ata. Matou te mananaʻo e faʻaititia le tele o lenei laulau i vaega o loʻo mulimuli mai o se vaega o la matou faʻataʻitaʻiga.
Fausia se ata atigipusa e faʻaaoga ai le Buildpack
Fonotaga afifi (Buildpacks) o se faaupuga lautele e faʻaaogaina e le tele o Platform as a Service (PAAS) ofo e fatu ai se ata atigipusa mai le code source. Na faʻalauiloaina e Heroku i le 2011 ma talu mai lena taimi na faʻaaogaina e Cloud Foundry, Google App Engine, Gitlab, Knative ma le tele o isi.
Le lelei o afifi fausia ao
O se tasi o faʻamanuiaga autu o le faʻaaogaina o le Buildpack e fatu ai ata o lena E mafai ona pulea fa'atotonugalemu suiga fa'atulagaina o ata (fausiaina) ma fa'asalalau i talosaga uma e fa'aoga ai le faufale.
O afifi faufale sa fa'apipi'i lelei i le tulaga. Cloud-Native Buildpacks e tuʻuina atu faʻasalalauga i luga o faʻasalalauga e ala i le lagolagoina o le ata o le OCI, lea e faʻamautinoa ai e mafai ona faʻatautaia le ata e le Docker engine.
Fa'aaogaina o le Spring Boot plugin
O le Spring Boot plugin e fausia ai ata OCI mai le puna e faʻaaoga ai le Buildpack. E faia ata e fa'aoga ai bootBuildImagegaluega (Gradle) po'o spring-boot:build-imagesini (Maven) ma faʻapipiʻi Docker i le lotoifale.
E mafai ona matou faʻavasegaina le igoa o le ata e manaʻomia e tulei i le Docker resitala e ala i le faʻamaonia o le igoa i totonu image tag:
Tatou faaaoga Maven e fai ai build-imagesini mo le fatuina o se talosaga ma le fatuina o se ata atigipusa. Matou te le faʻaaogaina soʻo se Dockerfiles i le taimi nei.
Mai le fa'aaliga ua tatou va'ai i ai paketo Cloud-Native buildpackfaʻaaoga e fatu ai se ata OCI galue. E pei o le taimi muamua, e mafai ona tatou vaʻai i le ata o loʻo lisiina o se ata Docker e ala i le faʻatonuina o le poloaiga:
Le isi, matou te faʻaogaina le Jib plugin e faʻaaoga ai le Maven poloaiga e fausia ai le talosaga ma fatuina se ata atigipusa. E pei o le taimi muamua, matou te le o faʻaogaina soʻo se Docker faila iinei:
A maeʻa ona faʻatinoina le poloaiga a Maven o loʻo i luga, matou te maua le gaioiga lea:
[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
O le gaioiga o loʻo faʻaalia ai na faia le ata o pusa ma tuʻu i totonu o le resitala.
Fa'aosofiaga ma metotia mo le fatuina o ata sili ona lelei
E lua a matou mafuaaga autu mo le faʻaleleia atili:
Gaioiga: I totonu o se faiga faʻapipiʻi koneteina, e maua mai se ata atigipusa mai le resitara ata i le tagata talimalo o loʻo faʻaogaina le afi pusa. O lenei faiga e ta'ua o le fuafuaina. O le tosoina o ata tetele mai le resitala e maua ai taimi umi o taimi faatulagaina i totonu o pusa faʻapipiʻi faiga ma umi taimi fau i paipa CI.
Puipuiga: O ata tetele e iai fo'i se vaega tele mo fa'aletonu.
O se ata Docker e aofia ai se faaputuga o laulau, o ia mea taitasi e fai ma sui o se faʻatonuga i la matou Dockerfile. O vaega ta'itasi o lo'o fa'atusalia ai se delta o suiga i le fa'avae pito i lalo. A matou tosoina se ata Docker mai le resitala, e tosoina i luga o laulau ma faʻapipiʻi i luga o le talimalo.
Fa'aoga Spring Boot "JAR ga'o" i e pei o le tulaga fa'apipi'i fa'aletonu. A tatou vaʻavaʻai i le JAR mafiafia, tatou te iloa o le talosaga e faia ai se vaega itiiti o le JAR atoa. O le vaega lea e sui soo. O le vaega o totoe e aofia ai le Spring Framework fa'alagolago.
Ole fua fa'atatau e fa'atotonugalemu ile fa'aesea ole talosaga ile tulaga ese mai Spring Framework fa'alagolago.
O le faʻalagolago i luga ole laiga, lea e fausia ai le tele o le faila JAR mafiafia, e naʻo le tasi e sii mai ma teu i luga o le polokalama talimalo.
Na'o se vaega manifinifi o le talosaga e toso i le taimi o fa'afouga o talosaga ma le fa'atulagaina o pusa. e pei ona faaalia i lenei ata:
I vaega o loʻo mulimuli mai, o le a tatou vaʻavaʻai pe faʻapefea ona fatuina nei ata sili ona lelei mo se talosaga Spring Boot.
Fausiaina o se Ata Fa'atosina Fa'alelei mo se Talosaga Fa'ato'aga e Fa'aaoga ai le Buildpack
O le Spring Boot 2.3 e lagolagoina le fa'apipi'iina e ala i le su'eina o vaega o se faila mafiafia JAR i fa'a eseese. O le vaega faʻapipiʻi e le mafai ona faʻaogaina ma e tatau ona faʻaalia manino e faʻaaoga ai le Spring Boot Maven plugin:
O le a matou faʻaogaina lenei faʻatulagaga e fausia muamua ai le matou atigipusa ata ma Buildpack ona sosoo ai lea ma Docker i vaega nei.
Tatou amata build-imageMaven sini mo le fatuina o ata atigipusa:
mvn spring-boot:build-image
Afai tatou te tamoʻe le Dive e vaʻai i luga o le ata o loʻo i ai, e mafai ona tatou vaʻaia o le laupepa talosaga (faʻamatala i le mumu) e sili atu ona laʻititi i le kilobyte range pe a faʻatusatusa i mea na matou maua i le faʻaogaina o le JAR format:
Fausiaina o se Ata Fa'atosina lelei mo se Talosaga Fa'ato'aga Fa'aoga Fa'aaoga Docker
Nai lo le faʻaaogaina o se Maven poʻo Gradle plugin, e mafai foi ona tatou fatuina se ata Docker JAR faʻapipiʻi ma se faila Docker.
A matou faʻaogaina Docker, matou te manaʻomia le faia o ni laasaga faaopoopo se lua e faʻapipiʻi ai laulau ma kopi i le ata mulimuli.
O mea o loʻo maua i le JAR pe a maeʻa le fausiaina o le Maven ma faʻaogaina le faʻaogaina o le a pei o lenei:
O lo'o fa'aalia e le fa'aaliga se isi JAR ua ta'ua spring-boot-jarmode-layertoolsи layersfle.idxfaila. O lenei faila JAR fa'aopoopo e tu'uina atu ai agava'a fa'apipi'i, e pei ona fa'amatalaina i le isi vaega.
Ave'esea fa'alagolago i luga ole laiga ta'itasi
Ina ia va'ai ma fa'apipi'i 'ese'ese mai le matou JAR fa'apipi'i, matou te fa'aogaina le meatotino -Djarmode=layertoolsmo le amataga spring-boot-jarmode-layertoolsJAR nai lo le talosaga:
O le faʻatinoina o lenei faʻatonuga e maua ai le gaioiga o loʻo i ai avanoa faʻatonuga avanoa:
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
O le fa'aaliga o lo'o fa'aalia ai fa'atonuga list, extractи helpс helpavea ma faaletonu. Tatou fa'agasolo le fa'atonuga ma listfilifiliga:
java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
Matou te vaʻai i se lisi o faʻalagolago e mafai ona faʻaopoopoina o ni laulau.
Laega fa'aletonu:
Igoa apa
Mataupu
dependencies
so'o se fa'alagolago e lē o iai le SNAPSHOT
spring-boot-loader
Vasega JAR Loader
snapshot-dependencies
so'o se fa'alagolago o lona fa'amatalaga o lo'o iai le SNAPSHOT
application
vasega talosaga ma punaoa
Lays ua faauigaina i layers.idxfaila i le faasologa e tatau ona faʻaopoopoina i le ata Docker. O nei laulau e teu i totonu o le talimalo pe a maeʻa le toe maua muamua aua latou te le suia. Na'o le fa'afou fa'apolokalame fa'apipi'i e la'u mai i le talimalo, lea e vave ona fa'aitiitia le tele .
Fausiaina o se ata ma fa'alagolago e fa'apipi'iina i ni fa'avae eseese
O le a matou fausia le ata mulimuli i ni vaega se lua e faʻaaoga ai se metotia e taʻua fa'apotopotoga fa'atele . I le laasaga muamua o le a tatou faʻapipiʻi faʻalagolago ma i le laasaga lona lua o le a tatou kopiina ai faʻalagolago i le ata mulimuli.
Sei o tatou suia a tatou Dockerfile mo se fausaga e tele:
# 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"]
Matou te faʻasaoina lenei faʻatulagaga i se faila ese - Dockerfile2.
Matou te fausia le ata Docker e faʻaaoga ai le poloaiga:
docker build -f Dockerfile2 -t usersignup:v1 .
A maeʻa le faʻatonuina o lenei poloaiga matou te maua le gaioiga lea:
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
E mafai ona tatou vaʻaia o se ata Docker ua faia ma se ID ata ona faʻailogaina.
Ma le mea mulimuli, matou te faʻatautaia le Dive command e pei ona muamua e asiasia laulau i totonu o le ata Docker na gaosia. E mafai ona matou tuʻuina atu se ID ata poʻo se pine e fai ma faʻaoga i le Dive command:
dive userssignup:v1
E pei ona mafai ona e vaʻai i le gaioiga, o le laulau o loʻo i ai le talosaga ua naʻo le 11 KB, ma o faʻalagolago o loʻo faʻapipiʻiina i ni vaega eseese.
Ave'esea fa'alagolago i totonu i luga ole laiga ta'itasi
E mafai ona tatou fa'aititia atili le tele o le vaega o talosaga e ala i le aveesea o so'o se a tatou fa'alagolago fa'ale-aganu'u i se isi vaega nai lo le afifiina i le talosaga e ala i le fa'ailoaina i totonu. ymlfaila tutusa e igoa layers.idx:
I lenei faila layers.idxua matou fa'aopoopoina se fa'alagolago fa'ale-aganu'u e igoa, io.myorgo lo'o iai fa'alapotopotoga fa'alagolago na maua mai i se fa'amaumauga fa'asoa.
iʻuga
I lenei tusiga, na matou vaʻavaʻai i le faʻaaogaina o Cloud-Native Buildpacks e fausia ai se ata atigipusa saʻo mai le code source. O se isi mea lea i le faʻaaogaina o Docker e fatu ai se ata atigipusa i le auala masani: muamua fatuina se faila JAR mafiafia faʻapipiʻi ona faʻapipiʻiina lea i totonu o se ata atigipusa e ala i le faʻamaonia o faatonuga i le faila Docker.
Na matou vaʻavaʻai foʻi i le faʻaleleia atili o la matou koneteina e ala i le faʻatagaina o se vaega faʻapipiʻi e tosoina ai faʻalagolago i ni laulau eseese o loʻo teuina i luga o le talimalo ma o se vaega manifinifi o le talosaga e utaina i le taimi faʻatulagaina i masini faʻataunuʻu o le koneteina.
E mafai ona e mauaina uma le source code o loʻo faʻaaogaina i le tusiga i Github .
Fa'asinoga poloa'iga
Ole fa'asologa vave lea o fa'atonuga na matou fa'aogaina i lenei tusiga.
Fa'amama fa'amatalaga:
docker system prune -a
Fausia se ata atigipusa e faʻaaoga ai se faila Docker:
docker build -f <Docker file name> -t <tag> .
Matou te fausia le ata atigipusa mai le code source (e aunoa ma Dockerfile):
mvn spring-boot:build-image
Va'ai laulau fa'alagolago. Aʻo leʻi fauina le faila JAR talosaga, ia mautinoa o loʻo mafai ona faʻaogaina le faʻaogaina i le spring-boot-maven-plugin:
java -Djarmode=layertools -jar application.jar list
Ave'esega fa'alagolago. Aʻo leʻi fauina le faila JAR talosaga, ia mautinoa o loʻo mafai ona faʻaogaina le faʻaogaina i le spring-boot-maven-plugin: