Me kërkesën tonë, Habr krijoi një hub dhe na vjen mirë që publikojmë publikimin e parë aty. Abonohuni!
Kubernetes është thjesht. Pse bankat më paguajnë shumë për punën time në këtë fushë, ndërsa çdo kush mund ta mësojë këtë teknologji për disa orë?
NĂ«se dyshoni se Kubernetes mund tĂ« mĂ«sohet kaq shpejt â ju lutem, provoni ta bĂ«ni vetĂ«. PikĂ«risht, duke zotĂ«ruar kĂ«tĂ« material, do tĂ« jeni nĂ« gjendje tĂ« lançoni njĂ« aplikacion tĂ« bazuar nĂ« mikroshĂ«rbime nĂ« njĂ« grup Kubernetes. Mund ta garantoj kĂ«tĂ«, sepse me kĂ«tĂ« metodologji, e cila Ă«shtĂ« pĂ«rdorur kĂ«tu, unĂ« i mĂ«soj klientĂ«t tanĂ« si tĂ« punojnĂ« me Kubernetes. ĂfarĂ« e ndan kĂ«tĂ« udhĂ«zues nga tĂ« tjerĂ«t? NĂ« tĂ« vĂ«rtetĂ« â shumĂ« gjĂ«ra. NjĂ«soj si shumica e materialeve tĂ« tilla, ata fillojnĂ« me shpjegimin e gjĂ«rave tĂ« thjeshta â koncepteve tĂ« Kubernetes dhe veçorive tĂ« komandĂ«s kubectl. AutorĂ«t e kĂ«tyre materialeve mendojnĂ« se lexuesi i tyre Ă«shtĂ« i njohur me zhvillimin e aplikacioneve, me mikroshĂ«rbimet dhe me konteinerĂ«t Docker. Ne do tĂ« ndjekim njĂ« rrugĂ« tjetĂ«r. SĂ« pari, do t'i tregojmĂ« se si tĂ« lançoni njĂ« aplikacion tĂ« bazuar nĂ« mikroshĂ«rbime nĂ« kompjuterin tuaj. MĂ« pas do tĂ« shqyrtojmĂ« ndĂ«rtimin e imazheve tĂ« konteinerĂ«ve pĂ«r secilin mikroshĂ«rbim. Pas kĂ«saj, do tĂ« njohim Kubernetes dhe do tĂ« shqyrtojmĂ« lançimin e aplikacionit tĂ« bazuar nĂ« mikroshĂ«rbime nĂ« njĂ« grup tĂ« menaxhuar nga Kubernetes.
Ky qasje, me afrim gradual ndaj Kubernetes, do t'i japë një thellësi kuptimi situatës që i nevojitet një personi të zakonshëm për të kuptuar se si e thjeshtë është gjithçka në Kubernetes. Kubernetes është, pa dyshim, një teknologji e thjeshtë, nëse dikush që dëshiron ta mësojë e di se ku dhe si përdoret ajo.
Tani, pa fjalë të tepërta, le të fillojmë punën dhe të flasim për aplikacionin me të cilin do të punojmë.
Aplikacioni Eksperimental
Aplikacioni ynë do të kryejë vetëm një funksion. Ai merr si input një fjali, dhe më pas, duke përdorur mjete analize teksti, bën analizën e emocioneve (sentiment analysis) të asaj fjali, duke marrë një vlerësim të qëndrimit emocional të autorit ndaj një objekti të caktuar.
Ja si duket dritarja kryesore e këtij aplikacioni.

Aplikacioni web për analizën e emocioneve të teksteve
Nga pikëpamja teknike, aplikacioni përbëhet nga tre mikroshërbime, secili prej të cilëve zgjidh një grup të caktuar detyrash:
- SA-Frontend â serveri web Nginx, i cili shĂ«rben skedarĂ«t statikĂ« tĂ« React.
- SA-WebApp â aplikacioni web, i shkruar nĂ« Java, i cili trajton kĂ«rkesat nga frontend-i.
- SA-Logic â aplikacioni Python qĂ« kryen analizĂ«n e emocioneve tĂ« tekstit.
ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se mikroshĂ«rbimet nuk ekzistojnĂ« nĂ« izolim. Ato realizojnĂ« idenĂ« e "ndarjes sĂ« detyrave", por ato gjithashtu duhet tĂ« bashkĂ«punojnĂ« me njĂ«ra-tjetrĂ«n.

Fluxet e të dhënave në aplikacion
Në diagramin e mësipërm mund të shihni fazat e numëruara të punës së sistemit, që ilustrojnë fluxet e të dhënave në aplikacion. Le t'i shqyrtojmë ato:
- Shfletuesi kërkon nga serveri një skedar
index.html(i cili, nga ana e tij, shkarkon paketën e aplikacionit React). - Përdoruesi interagoon me aplikacionin, e cila shkakton një kërkesë në aplikacionin web të bazuar në Spring.
- Aplikacioni web redirekton kërkesën për analizimin e tekstit në aplikacionin Python.
- Aplikacioni Python kryen analizën e emocioneve të tekstit dhe kthen rezultatin si përgjigje për kërkesën.
- Aplikacioni Spring dërgon përgjigjen në aplikacionin React (dhe ai, nga ana e tij, tregon rezultatin e analizës së tekstit për përdoruesin).
Kodi për të gjitha këto aplikacione mund të gjendet . Ju rekomandoj që tani të kopjoni këtë repository për vete, pasi para nesh na presin shumë eksperimente interesante me të.
Lançimi i aplikacionit të bazuar në mikroshërbime në kompjuterin lokal
PĂ«r tĂ« bĂ«rĂ« qĂ« aplikacioni tĂ« funksionojĂ«, na nevojitet tĂ« lançojmĂ« tĂ« tre mikroshĂ«rbimet. Le tĂ« fillojmĂ« me atĂ« mĂ« tĂ« bukur nga ta â aplikacionin frontend.
âKonfigurimi i React pĂ«r zhvillim lokal
Për të lançuar aplikacionin React, duhet të instaloni platformën Node.js dhe NPM në kompjuterin tuaj. Pasi të keni bërë këtë, kaloni, duke përdorur terminalin, në folderin e projektit sa-frontend dhe ekzekutoni komandën e mëposhtme:
npm install Duke ekzekutuar këtë komandë, në folderin node_modules do të shkarkohen varësitë e aplikacionit React, për të cilat ka shënime në skedarin package.json. Pasi të ketë përfunduar shkarkimi i varësive, në të njëjtin folder ekzekutoni këtë komandë:
npm start Kjo është gjithçka. Tani aplikacioni React është lançuar, dhe mund ta aksesoni, duke shkuar në shfletues në adresën localhost:3000. Mund të bëni disa ndryshime në kodin e tij. Efekti i këtyre ndryshimeve do ta shihni menjëherë në shfletues. Kjo është e mundur falë asaj që quhet "ndërrim i nxehtë" të moduleve. Kështu, zhvillimi i frontend-it bëhet një aktivitet i thjeshtë dhe i këndshëm.
âPĂ«rgatitja e aplikacionit React pĂ«r prodhim
PĂ«r qĂ«llime reale tĂ« pĂ«rdorimit tĂ« aplikacionit React, na nevojitet qĂ« ta transformojmĂ« atĂ« nĂ« njĂ« grup skedash statike dhe tâua ofrojmĂ« ato klientĂ«ve duke pĂ«rdorur njĂ« server web.
Për të ndërtuar aplikacionin React, përsëri, duke përdorur terminalin, kaloni në dosjen sa-frontend dhe ekzekutoni komandën e mëposhtme:
npm run build Kjo do të krijojë në dosjen e projektit një direktorium ndërto. Aty do të përmbahen të gjithë skedarët statikë të nevojshëm për funksionimin e aplikacionit React.
âMenaxhimi i skedave Statike me Nginx
Së pari, duhet të instaloni dhe të filloni serverin web Nginx. mund ta shkarkoni dhe të gjeni udhëzime për instalimin dhe fillimin. Pastaj duhet të kopjoni përmbajtjen e dosjes sa-frontend/build në dosjen [your_nginx_installation_dir]/html.
Me këtë qasje, skedari i gjeneruar gjatë ndërtimit të aplikacionit React index.html do të jetë i disponibilizuar në adresën [your_nginx_installation_dir]/html/index.html. Ky është skedari që, për parazgjedhje, serveri Nginx e ofron kur i qaset. Serveri është i konfiguruar për të dëgjuar në portin 80, por mund ta konfigurosh ashtu si dëshiron, duke e redaktuar skedarin [your_nginx_installation_dir]/conf/nginx.conf.
Tani hapni shfletuesin dhe shkoni në adresën localhost:80. Do të shihni faqen e aplikacionit React.

Aplikacioni React, i menaxhuar nga serveri Nginx
NĂ«se tani shkruani diçka nĂ« fushĂ«n Type your sentence dhe klikoni nĂ« butonin Send â nuk do tĂ« ndodhĂ« asgjĂ«. Por, nĂ«se shikoni nĂ« konsolĂ«, aty mund tĂ« shihni mesazhe gabimesh. NĂ« mĂ«nyrĂ« qĂ« tĂ« kuptojmĂ« se ku ndodhin kĂ«to gabime, do ta analizojmĂ« kodin e aplikacionit.
âAnaliza e Kodit tĂ« Aplikacionit tĂ« Frontend-it
Duke parĂ« kodin e skedarit App.js, mund tĂ« shohim se kur shtypet butoni Send thirr njĂ« metodĂ« analyzeSentence(). Kodi i kĂ«tij metodi Ă«shtĂ« renditur mĂ« poshtĂ«. Vini re se çdo rresht qĂ« ka njĂ« koment tĂ« tipit # ĐĐŸĐŒĐ”Ń, ka njĂ« shpjegim tĂ« dhĂ«nĂ« mĂ« poshtĂ« kodit. Dhe po ashtu do tĂ« analizojmĂ« edhe fragmente tjera tĂ« kodit.
analyzeSentence() {
   fetch('http://localhost:8080/sentiment', {  // #1
       method: 'POST',
       headers: {
           'Content-Type': 'application/json'
       },
       body: JSON.stringify({
                      sentence: this.textField.getValue()})// #2
   })
       .then(response => response.json())
       .then(data => this.setState(data));  // #3
}1. URL-ja, në të cilën kryhet kërkesa POST. Supozohet se në këtë adresë ndodhet aplikacioni që pret kërkesa të tilla.
2.Trupi i kërkesës, i dërguar në aplikacion. Ja një shembull i trupit të kërkesës:
{
   sentence: "I like yogobella!"
} 3.Kur marrim pĂ«rgjigje ndaj kĂ«rkesĂ«s, pĂ«rditĂ«sohet gjendja e komponentit. Kjo shkakton rinovimin e komponentit. NĂ«se marrim tĂ« dhĂ«na (dmth â njĂ« objekt JSON qĂ« pĂ«rmban tĂ« dhĂ«nat e futura dhe vlerĂ«simin e llogaritur tĂ« tekstit), ne do ta nxjerrim komponentin Polarity, pasi do tĂ« pĂ«rmbushen kushtet pĂ«rkatĂ«se. Ja si e pĂ«rshkruajmĂ« komponentin:
const polarityComponent = this.state.polarity !== undefined ?
   <Polarity sentence={this.state.sentence}
             polarity={this.state.polarity}/> :
   null; Kodi, siç duket, duket krejt funksional. ĂfarĂ« po shkon keq? NĂ«se mendoni se nĂ« adresĂ«n ku aplikacioni tenton tĂ« dĂ«rgojĂ« kĂ«rkesĂ«n POST, nuk ka asgjĂ« qĂ« mund ta pranojĂ« dhe ta pĂ«rpunojĂ« atĂ«, do tĂ« jeni plotĂ«sisht tĂ« drejtĂ«. Pra, pĂ«r tĂ« trajtuar kĂ«rkesat qĂ« vijnĂ« nĂ« adresĂ«n http://localhost:8080/sentiment, na nevojitet tĂ« nisim njĂ« aplikacion web, tĂ« bazuar nĂ« Spring.

Na nevojitet një aplikacion Spring, i aftë të pranojë kërkesën POST
âKonfigurimi i Aplikacionit Web, tĂ« Bazuar nĂ« Spring
PĂ«r tĂ« nisur njĂ« aplikacion Spring, do tâju nevojitet JDK8 dhe Maven dhe variablat e duhura mjedisi tĂ« konfiguruara. Pasi tĂ« keni instaluar tĂ« gjitha kĂ«to, mund tĂ« vazhdoni me projektin tonĂ«.
âGrumbullimi i Aplikacionit nĂ« njĂ« skedar jar
Kaloni, me anë të terminalit, në dosjen sa-webapp dhe shkruani komandën e mëposhtme:
mvn install Pas ekzekutimit të kësaj komande, në dosjen sa-webapp do të krijohet një direktorium target. Këtu do të gjeni aplikacionin Java, të paketuar në një skedar jar, të paraqitur nga skedari sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
âNisja e Aplikacionit Java
Kaloni në dosjen target dhe nisni aplikacionin me komandën e mëposhtme:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jarGjatë ekzekutimit të kësaj komande, do të ndodhi një gabim. Për të filluar rregullimin e tij, mund ta analizojmë informacionin për përjashtimin në të dhënat e gjurmës së stack-ut:
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}" Për ne, ajo që ka më shumë rëndësi është përmendja e pamundësisë për të zbuluar vlerën sa.logic.api.url. Le të analizojmë kodin ku ndodh gabimi.
âAnaliza e kodit tĂ« aplikacionit Java
Ja nje fragment kodi ku ndodh gabimi.
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}- NĂ« S
entimentControllerka një fushësaLogicApiUrl. Vlera e saj vendoset me pronënsa.logic.api.url. - Vargu
saLogicApiUrle cila konkatenohet me vlerën/analyse/sentiment. Të dyja formojnë adresën për të realizuar thirrjen në mikrosherbimin që kryen analizën e tekstit.
âCaktimi i vlerĂ«s sĂ« pronĂ«s
Në Spring, burimi standard i vlerave të pronave është skedari application.properties, i cili mund të gjendet në adresën sa-webapp/src/main/resources. Por përdorimi i tij nuk është mënyra e vetme për të caktuar vlerat e pronave. Këtë mund ta bëjmë edhe me një komandë të tillë:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URLVlera e kësaj prone duhet të tregojë adresën e aplikacionit tonë Python.
Duke e konfiguruar atë, i japim informacion aplikacionit web Spring se ku duhet të dergojë kërkesat për analizën e tekstit.
Për të mos e komplikuar situatën, do të vendosim që aplikacioni Python do të jetë në dispozicion në adresën localhost:5000 dhe do të përpiqemi të mos e harrojmë këtë. Ndërkohë, komanda për të nisur aplikacionin Spring do të duket kështu:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 
Sistemi ynë u mungon aplikacioni Python
Tani na mbetet vetëm të nisim aplikacionin Python dhe sistemi do të funksionojë siç pritej.
âKonfigurimi i aplikacionit Python
Për të nisim aplikacionin Python, duhet të keni të instaluar Python 3 dhe Pip, dhe duhet që variablat përkatës të jenë të konfiguruar siç duhet.
âInstalimi i varĂ«sive
Shkoni në dosjen e projektit sa-logic/sa dhe ekzekutoni komandat e mëposhtme:
python -m pip install -r requirements.txt
python -m textblob.download_corporaâNisja e aplikacionit
Pas instalimit të varësive, jemi gati të nisim aplikacionin:
python sentiment_analysis.pyPas ekzekutimit të kësaj komande do të na njoftojnë se:
* Duke funksionuar në http://0.0.0.0:5000/ (Shtypni CTRL+C për të dalë) Kjo tregon se aplikacioni është nisur dhe pret kërkesa në adresën localhost:5000/
âHulumtimi i kodit
Le të shqyrtojmë kodin e aplikacionit Python për të kuptuar se si ai reagon ndaj kërkesave:
from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__) #1
@app.route("/analyse/sentiment", methods=['POST']) #2
def analyse_sentiment():
sentence = request.get_json()['sentence'] #3
polarity = TextBlob(sentence).sentences[0].polarity #4
return jsonify( #5
sentence=sentence,
polarity=polarity
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) #6- Inicializimi i objektit
Flask. - Caktimi i adresës për kryerjen e POST-requests.
- Nxjerrja e pronës
sentencenga trupi i kërkesës. - Inicializimi i objektit anonim
TextBlobdhe marrja e vlerëspolaritypër_SENTENCE_ që ka ardhur e para në trupin e kërkesës (në rastin tonë është një fjali e vetme që dërgohet për analizë). - Kthimi i përgjigjes, në trupin e të cilës përfshihet teksti i fjalës dhe treguesi i llogaritur për të.
polarity. - Nisja e aplikacionit Flask, i cili do të jetë në dispozicion në adresën
0.0.0.0:5000(mund ta kontaktoni edhe duke përdorur ndonjë strukturë silocalhost:5000).
Tani mikrosherbimet, nga të cilat përbëhet aplikacioni, janë nisur. Ato janë konfiguruar për të bashkëpunuar me njëra-tjetrën. Këtu është si duket skema e aplikacionit në këtë fazë të funksionimit.

Të gjitha mikrosherbimet, nga të cilat përbëhet aplikacioni, janë të gatshme për të punuar.
Tani, para se tĂ« vazhdojmĂ«, hapni aplikacionin React nĂ« shfletues dhe provoni tĂ« analizoni ndonjĂ« fjalĂ« me ndihmĂ«n e tij. NĂ«se gjithçka Ă«shtĂ« bĂ«rĂ« siç duhet â pas shtypjes sĂ« butonit Send do tĂ« shihni nĂ«n fushĂ«n e tekstit rezultatet e analizĂ«s.
Në seksionin e ardhshëm do të flasim se si t'i nisni mikrosherbimet tona në konteinerë Docker. Kjo është e nevojshme për të përgatitur aplikacionin për nisje në klasterin Kubernetes.
Kontainerët Docker
â janĂ« njĂ« sistem pĂ«r automatizimin e shpĂ«rndarjes, shkallĂ«zimit dhe menaxhimit tĂ« aplikacioneve tĂ« kontenerizuara. Quhet gjithashtu "orchestrator i konteinerĂ«ve" (container orchestrator). NĂ«se Kubernetes punon me konteinerĂ«, na duhet qĂ« para se tĂ« pĂ«rdorim kĂ«tĂ« sistem, sĂ« pari tĂ« sigurojmĂ« kĂ«ta konteinerĂ«. Por fillimisht le tĂ« flasim se çfarĂ« janĂ« konteinerĂ«t. Mbase, pĂ«rgjigjja mĂ« e mirĂ« pĂ«r pyetjen se çfarĂ« Ă«shtĂ« kjo, mund tĂ« gjendet nĂ« nĂ« Docker:
Pamja e kontenierit është një paketë e lehtë, autonome dhe ekzekutueshme që përmban një aplikacion, e cila përfshin gjithçka të nevojshme për ta nisur atë: kodin e aplikacionit, mjedisin e ekzekutimit, mjetet dhe bibliotekat sistemike, si dhe konfigurimet. Programet e kontenierizuara mund të përdoren në mjedise Linux dhe Windows, dhe gjithmonë do të funksionojnë njësoj pavarësisht nga infrastruktura.
Kjo do të thotë se kontenierët mund të ekzekutohen në çdo kompjuter, përfshirë serverat e prodhimit, dhe në çdo mjedis aplikacionet e përfshira do të punojnë njësoj.
PĂ«r tĂ« eksploruar veçoritĂ« e kontenierĂ«ve dhe pĂ«r tâi krahasuar ato me metoda tĂ« tjera tĂ« ekzekutimit tĂ« aplikacioneve, le tĂ« shqyrtojmĂ« shembullin e shĂ«rbimit tĂ« njĂ« aplikacioni React duke pĂ«rdorur njĂ« makinĂ« virtuale dhe njĂ« kontenier.
âShĂ«rbimi i skedarĂ«ve statikĂ« tĂ« aplikacionit React me ndihmĂ«n e makinĂ«s virtuale
Duke u përpjekur të organizojmë shërbimin e skedarëve statikë përmes makinave virtuale, do të përballemi me këto mangësi:
- Përdorimi joefikas i burimeve, pasi çdo makinë virtuale përfaqëson një sistem operativ të plotë.
- Varësia nga platforma. Ajo që funksionon në ndonjë kompjuter lokal, mund të mos funksionojë në serverin e prodhimit.
- Përmasime të ngadalta dhe kërkuese për burime për zgjidhjet e bazuara në makina virtuale.

Serveri i uebit Nginx, që shërben skedarët statikë, i nisur në një makinë virtuale.
Nëse përdorim kontenierë për zgjidhjen e njëjtë, krahasuar me makinat virtuale, mund të vërehet kjo forcë e tyre:
- Përdorim efikas të burimeve: puna me sistemin operativ përmes Docker.
- Pavarësia nga platforma. Një kontenier që zhvilluesi mund ta nisë në kompjuterin e tij do të funksionojë kudo.
- Instalimi i lehtë për shkak të përdorimit të katërveçorive.

Serveri i uebit Nginx, që shërben skedarët statikë, i nisur në një kontenier.
Ne kemi krahasuar makinat virtuale dhe kontenierët vetëm për disa pika, por edhe kjo është e mjaftueshme për të ndjerë forcat e kontenierëve. mund të gjeni detaje në lidhje me kontenierët Docker.
âNdĂ«rtimi i imazhit tĂ« kontenierit pĂ«r aplikacionin React
Blloku themelor i ndërtimit të kontenierit Docker është skedari Dockerfile. Në fillim të këtij skedari regjistrohet imazhi themelor të kontenierit, pastaj përfshihen një sërë udhëzimesh që tregojnë rendin e ndërtimit të kontenierit sipas nevojave të aplikacionit.
Para se të fillojmë punën me skedarin Dockerfile, le të kujtojmë se çfarë kemi bërë për të përgatitur skedarët e aplikacionit React për së bashku në serverin Nginx:
- Ndërtimi i paketës së aplikacionit React (
npm run build). - Nisja e serverit Nginx.
- Kopjimi i përmbajtjes së drejtorisë
ndërtonga dosja e projektitsa-frontendnë dosjen e serveritnginx/html.
Më poshtë do të shihni paralelet midis krijimit të kontenierit dhe veprimeve të mëparshme që janë kryer në kompjuterin lokal.
âPĂ«rgatitja e skedarit Dockerfile pĂ«r aplikacionin SA-Frontend
Udhëzimet që do të përmbahen në Dockerfile për aplikacionin SA-Frontend, përbëhen nga vetëm dy urdhra. Kjo është për shkak se grupi i zhvilluesve të Nginx kreu një bazë për Nginx, që ne do ta përdorim për të ndërtuar imazhin tonë. Ja dy hapat që na nevojiten për të përshkruar:
- Baza e imazhit duhet të jetë imazhi i Nginx.
- Përmbajtja e dosjes
sa-frontend/buildduhet të kopjohet në dosjen e imazhitnginx/html.
Nëse kalojmë nga ky përshkrim në skedarin Dockerfile, do të duket kështu:
FROM nginx
COPY build /usr/share/nginx/html Siç e shihni, gjithçka është shumë e thjeshtë, ndërsa përmbajtja e skedarit duket madje edhe e lexueshme dhe e kuptueshme. Ky skedar i thotë sistemit se duhet të marrë imazhin nginx me gjithçka që ka brenda dhe të kopjojë përmbajtjen e drejtorisë ndërto në drejtorinë nginx/html.
KĂ«tu mund tĂ« keni njĂ« pyetje nĂ« lidhje me atĂ« se si e di se ku duhet tĂ« kopjohen skedarĂ«t nga dosja ndĂ«rto, dmth â nga erdhi rruga /usr/share/nginx/html. NĂ« tĂ« vĂ«rtetĂ«, asgjĂ« nuk Ă«shtĂ« e komplikuar. Informacionet pĂ«rkatĂ«se mund tĂ« gjenden nĂ« imazhit.
âNdĂ«rtimi i imazhit dhe ngarkimi i tij nĂ« repositor
Para se të mund të punojmë me imazhin e gatshëm, na nevojitet ta dërgojmë atë në repositorin e imazheve. Për këtë do të përdorim platformën falas të hapësirës për hostimin e imazheve Docker Hub. Në këtë fazë pune ju nevojitet të bëni si më poshtë:
- Instalo .
- Regjistroni veten në faqen e internetit të Docker Hub.
- Hyni në llogari duke ekzekutuar në terminal komandën e mëposhtme:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Tani duhet, përmes terminalit, të kaloni në drejtorinë sa-frontend dhe të ekzekutoni aty komandën e mëposhtme:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . Këtu dhe më pas në komandat e ngjashme $DOCKER_USER_ID duhet të zëvendësohet me emrin tuaj të përdoruesit në Docker Hub. P.sh., kjo pjesë e komandës mund të duket kështu: rinormaloku/sentiment-analysis-frontend.
Në këtë rast, komanda mund të shkurtëzohet duke e hequr -f Dockerfile, pasi në dosjen ku ne ekzekutojmë këtë komandë, ky skedar tashmë është i pranishëm.
Për të dërguar imazhin e gatshëm në depo, na nevojitet një komandë e tillë:
docker push $DOCKER_USER_ID/sentiment-analysis-frontendPas ekzekutimit të saj, kontrolloni listën e depozita-ve tuaja në Docker Hub për të kuptuar nëse dërgimi i imazhit në ruajtjen në cloud ishte i suksesshëm.
âNisja e kontejnerit
Tani, çdokush mund të shkarkohet dhe të nisë imazhin e njohur si $DOCKER_USER_ID/sentiment-analysis-frontend. Për ta bërë këtë, duhet të ekzekutoni rendin e komandave si më poshtë:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend Tani kontejneri është i nisur, dhe ne mund të vazhdojmë punën duke krijuar imazhe të tjera të nevojshme për ne. Por përpara se të vazhdojmë, le të kuptojmë strukturën 80:80, e cila shfaqet në komandën e nisjes së imazhit dhe mund të duket e paqartë.
- Numri i parë
80është numri i portës së hostit (dmth kompjuteri lokal). - Numri i dytë
80është porta e kontejnerit në të cilin duhet të redirektohet kërkesa.
Le të shqyrtojmë ilustrimin e mëposhtëm.

Redirektimi i porteve
Sistemi realizon redirektimin e kërkesave nga porta <hostPort> në portën <containerPort>. Pra, një kërkesë për portin 80 e kompjuterit redirektohet në portin 80 e kontejnerit.
Pasi porta 80 është e hapur në kompjuterin lokal, mund të aksesoni aplikacionin nga ky komputer në adresën localhost:80. Nëse sistemi juaj nuk mbështet Docker, aplikacioni mund të niset në një makinë virtuale Docker, adresa e të cilës do të jetë diçka si :80. Për të gjetur adresën IP të makinës virtuale Docker, mund të përdorni komandën docker-machine ip.
Në këtë pikë, pas nisjes së suksesshme të kontejnerit të aplikacionit frontend, duhet të keni mundësinë ta hapni faqen e saj në shfletues.
âSkedari .dockerignore
Duke e ndërtuar imazhin e aplikacionit SA-Frontend, mund të kemi vërejtur që ky proces rezulton të jetë shumë i ngadalshëm. Kjo ndodh sepse demonit Docker i duhet të dërgohet konteksti i ndërtimit të imazhit. Direktoria që përfaqëson kontekstin e ndërtimit caktohet si argumenti i fundit i komandës docker build. Në rastin tonë, në fund të kësaj komande është pika. Kjo bën që struktura e ndërtimit të përfshijë:
sa-frontend:
| Â Â .dockerignore
| Â Â Dockerfile
| Â Â package.json
| Â Â README.md
+---build
+---node_modules
+---public
---src Por, nga të gjitha dosjet e pranishme këtu, na nevojitet vetëm dosja ndërto. Ngarkimi i çfarëdo gjëje tjetër është një humbje e kotë kohe. Procesi i ndërtimit mund të përshpejtohet duke e udhëzuar Docker-in se cilat direktori mund të injorohen. Pikërisht për këtë arsye kemi nevojë për skedarin .dockerignore. Nëse jeni të njohur me skedarin .gitignore, struktura e këtij skedari sigurisht që do t'ju duket e njohur. Ai përmban një listë të direktoreve që sistemi i ndërtimit të imazhit mund të injorojë. Në rastin tonë, përmbajtja e këtij skedari duket kështu:
node_modules
src
public Skedari .dockerignore duhet të jetë në të njëjtën dosje si skedari Dockerfile. Tani ndërtimi i imazhit do të zgjasë vetëm disa sekonda.
Tani do të merremi me imazhin për aplikacionin Java.
âNdĂ«rtimi i imazhit tĂ« kontejnerit pĂ«r aplikacionin Java
E dini çfarë, ju tashmë keni studiuar gjithçka të nevojshme për krijimin e imazheve të kontejnerëve. Prandaj, ky seksion do të jetë shumë i shkurtër.
Hapni skedarin Dockerfile, i cili ndodhet në dosjen e projektit sa-webapp. Nëse e lexoni përmbajtjen e këtij skedari, do të takoni vetëm dy konstrukte të reja, të cilat fillojnë me fjalët kyçe ENV dhe EXPOSE:
ENV SA_LOGIC_API_URL http://localhost:5000
âŠ
EXPOSE 8080 Fjala kyçe ENV lejon shpalljen e variablave të mjedisit brenda kontejnerëve Docker. Në veçanti, në rastin tonë, ajo lejon të caktohet URL për aksesin në API-në e aplikacionit që kryen analizën e tekstit.
Fjala kyçe EXPOSE lejon Docker-in të dijë se çfarë porte duhet të hapë. Ne do ta përdorim këtë port gjatë punës me aplikacionin. Këtu mund të vëreni që në Dockerfile për aplikacionin SA-Frontend nuk ka një komandë të tillë. Kjo është e nevojshme vetëm për qëllime dokumentimi, me fjalë të tjera, ky konstruktion është për ata që do ta lexojnë Dockerfile.
Ndërtimi i imazhit dhe dërgimi i tij në depo duket pikërisht si në shembullin e mëparshëm. Nëse ende nuk jeni të sigurt për aftësitë tuaja, komandat përkatëse mund të gjenden në skedarin README.md në dosjen sa-webapp.
âNdĂ«rtimi i imazhit tĂ« kontejnerit pĂ«r aplikacionin Python
Nëse shikoni përmbajtjen e skedarit Dockerfile në dosjen sa-logic, nuk do të gjeni asgjë të re aty. Komandat për ndërtimin e imazhit dhe dërgimin e tij në depo gjithashtu duhet të jenë tashmë të njohura për ju, por ato, ashtu si në rastet e tjera të aplikacioneve tona, mund të gjenden në skedarin README.md në dosjen sa-logic.
âTestimi i aplikacioneve tĂ« kontenjerizuar
A mund të besosh diçka që nuk e ke testuar? Edhe unë nuk mundem. Le të testojmë kontenjerët tanë.
- Le të nisim kontenjerin e aplikacionit
sa-logicdhe ta konfigurojmë atë për të dëgjuar në portin5050:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic - Le të nisim kontenjerin e aplikacionit
sa-webappdhe ta konfigurojmë atë për të dëgjuar në portin8080. Gjithashtu, na nevojitet të konfigurojmë portin në të cilin aplikacioni Python do të presë kërkesat nga aplikacioni Java, duke rimarrë variablin e mjedisitSA_LOGIC_API_URL:$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
Për të mësuar si të gjejmë adresën IP të kontenjerit ose makinerisë virtuale Docker - referojuni skedarit .
Le të nisim kontenjerin e aplikacionit sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend Tani gjithçka është gati për të hyrë në shfletues në adresën localhost:80 dhe për të testuar aplikacionin.
Kujtoni se nëse e keni ndryshuar portin për sa-webapp, ose nëse po punoni me makinën virtuale Docker, do t'ju duhet të redaktoni skedarin App.js nga dosja sa-frontend, duke ndryshuar adresën IP ose numrin e portit në metodën analyzeSentence(), duke zëvendësuar të dhënat e vjetruara me informacionet aktuale. Pas kësaj, nevojitet të rindërtoni imazhin dhe ta përdorni atë.
Këtu është se si duket skema e aplikacionit tonë tani.

Mikrosherbime funksionojnë në kontenjerë
Përmbledhje: pse na nevojitet klusteri Kubernetes?
Sapo studiuam skedarĂ«t Dockerfile, folĂ«m pĂ«r si tĂ« ndĂ«rtojmĂ« imazhe dhe t'i dĂ«rgojmĂ« ato nĂ« repozitorinĂ« Docker. Gjithashtu, mĂ«suam si tĂ« pĂ«rshpejtojmĂ« ndĂ«rtimin e imazheve duke pĂ«rdorur skedarin .dockerignore. Si rezultat, mikrosherbimet tona tani funksionojnĂ« nĂ« kontenjerĂ« Docker. KĂ«tu mund tâju vijĂ« njĂ« pyetje e arsyeshme: pse na nevojitet Kubernetes? Pjesa e dytĂ« e kĂ«tij materiali do tâi kushtohet kĂ«tij pyetje. NdĂ«rkohĂ«, mendoni pĂ«r pyetjen e mĂ«poshtme:
Supozoni se aplikacioni ynĂ« web pĂ«r analizĂ«n e teksteve Ă«shtĂ« bĂ«rĂ« popullor nĂ« mbarĂ« botĂ«n. Ădo minutĂ«, miliona kĂ«rkesa i vijnĂ« atij. Kjo do tĂ« thotĂ« se mikrosherbimet sa-webapp dhe sa-logic do tĂ« jenĂ« nĂ«n njĂ« ngarkesĂ« tĂ« madhe. Si ta shkallĂ«zojmĂ« kontenjerĂ«t nĂ« tĂ« cilat funksionojnĂ« mikrosherbimet?
Burimi: habr.com
