Ngokwesicelo sethu, uHabr wenza ihabhu
Kubernetes yaye siyakuvuyela ukuhambisa impapasho yokuqala kuyo. Bhalisa!
I-Kubernetes ilula. Kutheni iibhanki zindihlawula imali eninzi yokusebenza kule ndawo, ngoxa nabani na ekwazi kakuhle obu bugcisa ngeeyure nje ezimbalwa?
Ukuba uyathandabuza ukuba iKubernetes inokufundwa ngokukhawuleza, ndicebisa ukuba uzame ngokwakho. Oko kukuthi, ukuba uyazi kakuhle le mathiriyeli, uya kuba nakho ukuqhuba isicelo esekwe kwii-microservices kwiqela le-Kubernetes. Ndingayiqinisekisa le nto, kuba ikwayindlela efanayo esetyenziswa apha ukuba ndifundise abathengi bethu ukusebenza noKubernetes. Yintoni eyenza esi sikhokelo sahluke kwezinye? Enyanisweni, kukho izinto ezininzi. Ke, uninzi lwezi zixhobo ziqala ngengcaciso yezinto ezilula - iikhonsepthi zeKubernetes kunye neempawu zomyalelo we-kubectl. Ababhali bezi zixhobo bacinga ukuba abafundi babo baqhelene nophuhliso lwesicelo, ii-microservices, kunye nezikhongozeli zeDocker. Siza kuhamba ngenye indlela. Okokuqala, siza kuthetha ngendlela yokusebenzisa usetyenziso olusekwe kwiinkonzo ezincinci kwikhompyuter. Emva koko siya kujonga kwimifanekiso yokwakha yesikhongozeli kwi-microservice nganye. Kwaye emva koko, siya kuqhelana neKubernetes kwaye sijonge ukuhambisa isicelo esekwe kwiinkonzo ezincinci kwiqela elilawulwa yiKubernetes.
Le ndlela, kunye nendlela ehamba ngokuthe ngcembe ye-Kubernetes, iya kunika ubunzulu bokuqonda okwenzekayo okuyimfuneko kumntu oqhelekileyo ukuze aqonde ukuba yonke into isebenza njani kwi-Kubernetes. Ngokuqinisekileyo i-Kubernetes yitekhnoloji elula, ngaphandle kokuba abo bafuna ukuyifunda bayazi ukuba isetyenziswa phi kwaye njani.
Ngoku, ngaphandle kokuqhubeka, masiqalise kwaye sithethe ngesicelo esiza kusebenza naso.
Isicelo sovavanyo
Isicelo sethu siya kwenza umsebenzi omnye kuphela. Kuthatha isivakalisi esinye njengegalelo, emva koko, usebenzisa izixhobo zokuhlalutya isicatshulwa, wenza uhlalutyo lweemvakalelo zesi sivakalisi, ukufumana uvavanyo lwesimo sengqondo sombhali wesivakalisi kwinto ethile.
Le yindlela iwindow engundoqo yesisicelo ejongeka ngayo.
Isicelo seWebhu sokuhlalutya imvakalelo yeetekisi
Ukusuka kumbono wobugcisa, isicelo sinee-microservices ezintathu, nganye kuzo isombulula isethi ethile yemisebenzi:
- I-SA-Frontend yiseva yewebhu ye-Nginx ekhonza iifayile ze-static React.
- I-SA-WebApp sisicelo sewebhu esibhalwe kwiJava esiqhuba izicelo ezivela kwi-frontend.
- I-SA-Logic sisicelo sePython esenza uhlalutyo lweemvakalelo kwisicatshulwa.
Kubalulekile ukuqaphela ukuba ii-microservices azikho zodwa. Basebenzisa ingcamango "yokwahlulwa koxanduva", kodwa kwangaxeshanye kufuneka basebenzisane omnye nomnye.
Idatha iyahamba kwisicelo
Kulo mzobo ungentla, unokubona izigaba ezinamanani enkqubo, ebonisa ukuhamba kwedatha kwisicelo. Masizijonge:
- Isikhangeli sicela ifayile kumncedisi
index.html
(ethi, ngokulandelelana, ikhuphele iphakheji yesicelo seReact). - Umsebenzisi unxibelelana nesicelo, oku kubangela ukufowunelwa kwisicelo sewebhu esekwe eNtwasahlobo.
- Isicelo sewebhu sidlulisela phambili isicelo sokwenza uhlalutyo lombhalo kwisicelo sePython.
- Isicelo sePython senza uhlalutyo lweemvakalelo zesicatshulwa kwaye sibuyisela umphumo njengempendulo kwisicelo.
- Isicelo se-Spring sithumela impendulo kwi-React application (eya kuthi, ibonise umphumo wohlalutyo lombhalo kumsebenzisi).
Ikhowudi yazo zonke ezi zicelo inokufumaneka
Ukuqhuba usetyenziso olusekwe kwiinkonzo ezincinci kumatshini wakho wasekhaya
Ukuze isicelo sisebenze, kufuneka siqale zontathu ii-microservices. Masiqale ngeyona intle kuzo zonke-isicelo sesiphelo sangaphambili.
▍ Misela iReact kuphuhliso lwasekhaya
Ukuze usebenzise iReact application, kufuneka ufakele iqonga leNode.js kunye neNPM kwikhompyuter yakho. Nje ukuba ufake yonke le nto, sebenzisa i-terminal ukuya kwifolda yeprojekthi yakho sa-frontend
kwaye sebenzisa lo myalelo ulandelayo:
npm install
Ngokusebenzisa lo myalelo kwifolda node_modules
ukuxhomekeka kwesicelo seReact kuya kulayishwa, iirekhodi zazo ezikwifayile package.json
. Nje ukuba ukuxhomekeka kukhutshelwe kwifolda enye, sebenzisa lo myalelo ulandelayo:
npm start
Kuko konke. Ngoku iReact application iyasebenza, ungafikelela kuyo ngokuya kule dilesi ilandelayo kwisikhangeli sakho: localhost:3000
. Unokutshintsha into kwikhowudi yayo. Uya kubona ngoko nangoko umphumo wolu tshintsho kwisikhangeli. Oku kunokwenzeka ngenxa yento ebizwa ngokuba yi "hot" yokutshintshwa kweemodyuli. Oku kwenza uphuhliso lwangaphambili lube ngamava alula kwaye awonwabisayo.
▍Ukulungiselela iReact application yemveliso
Ngenjongo yokusebenzisa usetyenziso lweReact, kufuneka siyiguqule ibe yiseti yeefayile ezimileyo kwaye sizisebenzise kubathengi abasebenzisa umncedisi wewebhu.
Ukwakha i-React application, kwakhona usebenzisa i-terminal, jonga kwifolda sa-frontend
kwaye sebenzisa lo myalelo ulandelayo:
npm run build
Oku kuya kudala uvimba weefayili kwifolda yeprojekthi build
. Iya kuqulatha zonke iifayile ezimileyo eziyimfuneko ukuze isicelo seReact sisebenze.
▍ Ukubonelela ngeefayile ezimileyo usebenzisa iNginx
Okokuqala kufuneka ufake kwaye usebenzise iseva yewebhu yeNginx. sa-frontend/build
kwifolda [your_nginx_installation_dir]/html
.
Ngale ndlela, ifayile eyenziwe ngexesha lokwakhiwa kwesicelo seReact index.html
iza kufumaneka ku [your_nginx_installation_dir]/html/index.html
. Le yifayile ethi, ngokungagqibekanga, iseva yeNginx ivelisa xa ifikelela kuyo. Umncedisi uqwalaselwe ukumamela kwizibuko 80
, kodwa inokwenziwa ngendlela oyidinga ngayo ngokuhlela ifayile [your_nginx_installation_dir]/conf/nginx.conf
.
Ngoku vula isikhangeli sakho kwaye uye ku localhost:80
. Uya kubona iReact application page.
Usetyenziso olusebenzayo olunikezelwa ngumncedisi we-Nginx
Ukuba ngoku ungenisa into ebaleni Type your sentence
kwaye ucofe iqhosha Send
- akukho nto iya kwenzeka. Kodwa, ukuba ujonga i-console, unokubona imiyalezo yempazamo apho. Ukuze uqonde apho kwenzeka khona ezi mpazamo, makhe sihlalutye ikhowudi yesicelo.
▍Uhlalutyo lwekhowudi yesicelo engaphambili
Ukujonga ikhowudi yefayile App.js
, sinokubona ukuba ukucofa iqhosha Send
ubiza indlela analyzeSentence()
. Ikhowudi yale ndlela inikwe ngezantsi. Nceda uqaphele ukuba kumgca ngamnye onezimvo zefom # Номер
, kukho inkcazo enikwe ngaphantsi kwekhowudi. Siza kuhlalutya amanye amaqhekeza ekhowudi ngendlela efanayo.
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. I-URL esenziwa kuyo isicelo se-POST. Kucingelwa ukuba kukho isicelo kule dilesi esilindele izicelo ezinjalo.
2.Iqumrhu lesicelo lithunyelwe kwisicelo. Nanku umzekelo womzimba wesicelo:
{
sentence: "I like yogobella!"
}
3.Xa impendulo kwisicelo ifunyenwe, imeko yecandelo iyahlaziywa. Oku kubangela ukuba icandelo linikezelwe kwakhona. Ukuba sifumana idatha (oko kukuthi, into ye-JSON equlethe idatha yegalelo kunye nenqaku lombhalo obaliweyo), siya kukhupha icandelo. Polarity
, ekubeni iimeko ezifanelekileyo ziya kuhlangatyezwa. Le yindlela esilichaza ngayo icandelo:
const polarityComponent = this.state.polarity !== undefined ?
<Polarity sentence={this.state.sentence}
polarity={this.state.polarity}/> :
null;
Ikhowudi ibonakala isebenza kakuhle. Yintoni engalunganga ngale nto, kunjalo? Ukuba ucinga ukuba kwidilesi apho isicelo sizama ukuthumela isicelo se-POST, akukho nto inokwamkela kwaye iqhubekisele phambili esi sicelo, ngoko uya kuba ulungile ngokupheleleyo. Oko kukuthi, ukusetyenzwa kwezicelo ezifunyenweyo http://localhost:8080/sentiment
, kufuneka siqhube usetyenziso lwewebhu olusekwe kwiNtwasahlobo.
Sidinga isicelo se-Spring esingamkela isicelo se-POST
▍ Ukumisela usetyenziso lwewebhu olusekwe eNtwasahlobo
Ukuze usebenzise isicelo se-Spring, uya kufuna i-JDK8 kunye ne-Maven kwaye iqwalaselwe ngokufanelekileyo ukuguquguquka kokusingqongileyo. Nje ukuba ufake yonke le nto, ungaqhubeka nokusebenza kwiprojekthi yethu.
▍Ukupakisha usetyenziso kwifayile yejagi
Lawula, usebenzisa i-terminal, kwifolda sa-webapp
kwaye ngenisa lo myalelo ulandelayo:
mvn install
Emva kokuqhuba lo myalelo kwifolda sa-webapp
uvimba weefayili uyakwenziwa target
. Apha kulapho isicelo seJava sizakubekwa khona, sipakishwe kwifayile yejagi, emelwe yifayile sentiment-analysis-web-0.0.1-SNAPSHOT.jar
.
▍ Ukusebenzisa usetyenziso lweJava
Yiya kwifolda target
kwaye uqhube isicelo ngalo myalelo ulandelayo:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar
Impazamo iyakwenzeka ngexesha uphumeza lo myalelo. Ukuqala ukuyilungisa, sinokuhlalutya iinkcukacha zangaphandle kwidatha yokulandelela istaki:
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}"
Kithina, eyona nto ibalulekileyo apha kukukhankanywa kokungenakwenzeka kokucacisa intsingiselo sa.logic.api.url
. Makhe sihlalutye ikhowudi apho kwenzeka khona impazamo.
▍ Uhlalutyo lwekhowudi yesicelo seJava
Nantsi isicatshulwa sekhowudi apho impazamo yenzeka khona.
@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();
}
}
- Kwi-S
entimentController
kukho intsimisaLogicApiUrl
. Ixabiso layo lichazwe kwipropatisa.logic.api.url
. - Umgca
saLogicApiUrl
ihambelana nexabiso/analyse/sentiment
. Ngokudibeneyo benza idilesi yokwenza umnxeba kwi-microservice eyenza uhlalutyo lombhalo.
▍Seta ixabiso lepropati
Ngentwasahlobo, umthombo osemgangathweni wamaxabiso epropathi yifayile application.properties
, enokufumaneka kwi sa-webapp/src/main/resources
. Kodwa ukusetyenziswa kwayo akukuphela kwendlela yokubeka amaxabiso epropathi. Oku kunokwenziwa kusetyenziswa lo myalelo ulandelayo:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL
Ixabiso lalo mhlaba kufuneka likhombe kwidilesi yesicelo sethu sePython.
Ngokuyiqwalasela, sixelela isicelo sewebhu se-Spring apho kufuneka siye khona ukwenza izicelo zokuhlalutya umbhalo.
Ukuze singabi nzima ubomi bethu, siya kuthatha isigqibo sokuba isicelo sePython siya kufumaneka localhost:5000
kwaye masizame ukungalibali ngayo. Ngenxa yoko, umyalelo wokuqalisa usetyenziso lwaseNtwasahlobo uya kujongeka ngolu hlobo:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000
Inkqubo yethu ilahlekile isicelo sePython
Ngoku konke okufuneka sikwenze kukuqhuba isicelo sePython kwaye inkqubo iya kusebenza njengoko kulindelekile.
▍ Ukumisela usetyenziso lwePython
Ukuqhuba isicelo sePython, kufuneka ube nePython 3 kunye nePip efakwe, kwaye ukuguqulwa kwendawo efanelekileyo kufuneka kumiselwe ngokuchanekileyo.
▍Ukufakwa kokuxhomekeka
Yiya kwifolda yeprojekthi yakho sa-logic/sa
kwaye uqhube le miyalelo ilandelayo:
python -m pip install -r requirements.txt
python -m textblob.download_corpora
▍Qalisa isicelo
Emva kokufaka ukuxhomekeka, sikulungele ukuqhuba isicelo:
python sentiment_analysis.py
Emva kokwenza lo myalelo siya kuxelelwa oku kulandelayo:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Oku kuthetha ukuba isicelo siyasebenza kwaye silinde izicelo kwi localhost:5000/
▍Uphando lweKhowudi
Makhe sijonge ikhowudi yesicelo sePython ukuqonda ukuba iphendula njani kwizicelo:
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
- Ukuqala into
Flask
. - Ichaza idilesi yokwenza izicelo ze-POST kuyo.
- Ukufumana kwakhona iPropati
sentence
kwiqumrhu lesicelo. - Ukuqala into engaziwa
TextBlob
kunye nokufumana ixabisopolarity
kwisigwebo sokuqala esifunyenwe kumzimba wesicelo (kwimeko yethu, oku kuphela kwesigwebo esithunyelwe ukuhlalutya). - Ukubuyisela impendulo enomzimba wayo oqulethe isicatshulwa sesivakalisi kunye nesalathisi esibaliweyo sayo
polarity
. - Qalisa isicelo seFlask, esiza kufumaneka apha
0.0.0.0:5000
(ungafikelela kuyo usebenzisa ulwakhiwo lwefomlocalhost:5000
).
Iinkonzo ezincinci ezenza usetyenziso ngoku ziyasebenza. Zilungele ukusebenzisana omnye nomnye. Yile ndlela umzobo wesicelo ukhangeleka ngayo kweli nqanaba lomsebenzi.
Zonke ii-microservices ezenza isicelo ziziswa ngokusebenza
Ngoku, ngaphambi kokuba uqhubeke, vula isicelo sakho se-React kwisikhangeli kwaye uzame ukwahlula isivakalisi kunye nayo. Ukuba yonke into yenziwe ngokuchanekileyo - emva kokucofa iqhosha Send
uya kubona iziphumo zokuhlalutya ngaphantsi kwendawo yokubhaliweyo.
Kwicandelo elilandelayo, siza kuthetha ngendlela yokuqhuba ii-microservices zethu kwizikhongozeli zeDocker. Oku kuyimfuneko ukuze ulungiselele isicelo sokusebenza kwiqela le-Kubernetes.
Izikhongozeli zeDocker
Umfanekiso wesikhongozeli yipakethe ekhaphukhaphu, ezimeleyo, ephunyezwayo equlethe isicelo, ebandakanya yonke into efunekayo ukuyiqhuba: ikhowudi yesicelo, indawo yokuphumeza, izixhobo zenkqubo kunye neelayibrari, izicwangciso. Iinkqubo ezifakwe kwikhonteyina zinokusetyenziswa kwiLinux nakwiindawo zeWindows, kwaye ziya kuhlala zisebenza ngokufanayo nokuba sisiphi na isiseko.
Oku kuthetha ukuba izikhongozeli zinokuqhutywa kuyo nayiphi na ikhompyuter, kubandakanya iiseva zemveliso, kwaye izicelo eziqulethwe kuzo ziya kusebenza ngokufanayo kuyo nayiphi na imeko.
Ukuphonononga iimpawu zezikhongozeli kwaye uzithelekise nezinye iindlela zokuqhuba izicelo, makhe sijonge kumzekelo wokusebenzela iReact application usebenzisa umatshini obonakalayo kunye nesitya.
▍ Ukubonelela ngeefayile ezimileyo zeReact application usebenzisa umatshini wenyani
Ukuzama ukuququzelela inkonzo yeefayile ezimileyo usebenzisa oomatshini ababonakalayo, siya kudibana nezi zinto zingeloncedo zilandelayo:
- Ukusetyenziswa okungafanelekanga kwezibonelelo, ekubeni umatshini ngamnye wenyani yinkqubo yokusebenza epheleleyo.
- Ukuxhomekeka kwiqonga. Yintoni esebenzayo kwikhompyuter yendawo isenokungasebenzi kwiseva yemveliso.
- Ukukala okucothayo kunye nobutyebi obunzulu besisombululo esisekwe kumatshini.
Iseva yewebhu ye-Nginx ekhonza iifayile ezimileyo ezisebenza kumatshini wenyani
Ukuba izikhongozeli zisetyenziselwa ukusombulula ingxaki efanayo, ke, xa kuthelekiswa noomatshini ababonakalayo, la mandla alandelayo anokuqatshelwa:
- Ukusetyenziswa ngokufanelekileyo kwezibonelelo: ukusebenza kunye nenkqubo yokusebenza usebenzisa iDocker.
- Iqonga elizimeleyo. Isikhongozeli esingaqhutywa ngumphuhlisi kwikhompyuter yakhe siya kusebenza naphi na.
- Ukuhanjiswa okulula ngokusetyenziswa kweengqimba zemifanekiso.
Umncedisi wewebhu we-Nginx okhonza iifayile ezimileyo ezisebenza kwisikhongozeli
Sithelekisa kuphela oomatshini ababonakalayo kunye nezikhongozeli kumanqaku ambalwa, kodwa oku kwanele ukufumana ukuva amandla ezikhongozeli.
▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lweReact
Ibhloko esisiseko sokwakha isikhongozeli seDocker yifayile Dockerfile
. Ekuqaleni kwale fayile, irekhodi yenziwe ngomfanekiso wesiseko wesitya, emva koko kukho ukulandelelana kwemiyalelo ebonisa indlela yokwenza isitya esiya kuhlangabezana neemfuno zesicelo esithile.
Ngaphambi kokuba siqale ukusebenza kunye nefayile Dockerfile
, masikhumbule into esiyenzileyo ukulungiselela iifayile zesicelo seReact ukuze zifakwe kwiseva yeNginx:
- Ukwakha iphakheji yesicelo seReact (
npm run build
). - Ukuqala iseva yeNginx.
- Kukotshwa imixholo yolawulo
build
ukusuka kwifolda yeprojekthisa-frontend
kwifolda yomncedisinginx/html
.
Ngezantsi ungabona ungqamaniso phakathi kokwenza isikhongozeli kunye namanyathelo angasentla enziwe kwikhompyuter yakho yasekhaya.
▍Ukulungiselela i-Dockerfile yesicelo se-SA-Frontend
Imiyalelo eza kuqulathwa kuyo Dockerfile
isicelo SA-Frontend
, inamaqela amabini kuphela. Inyani kukuba iqela lophuhliso lwe-Nginx lilungiselele isiseko
- Isiseko somfanekiso kufuneka sibe ngumfanekiso weNginx.
- Imixholo yesiqulathi seefayili
sa-frontend/build
kufuneka ikhutshelwe kwisiqulathi seefayili somfanekisonginx/html
.
Ukuba usuka kule nkcazo uye kwifayile Dockerfile
, emva koko iya kujongeka ngolu hlobo:
FROM nginx
COPY build /usr/share/nginx/html
Njengoko ubona, yonke into elapha ilula kakhulu, kwaye imixholo yefayile ide ifundeke kwaye iyaqondakala. Le fayile ixelela inkqubo ukuba ithathe umfanekiso nginx
ngayo yonke into esele ikuyo, kwaye ukhuphele imixholo yolawulo build
kulawulo nginx/html
.
Apha unokuba nombuzo malunga nendlela endazi ngayo apho kanye ufuna ukukopa iifayile kwifolda build
, oko kukuthi, apho umendo wavela khona /usr/share/nginx/html
. Enyanisweni, akukho nto inzima apha. Inyaniso kukuba ulwazi olufanelekileyo lunokufumaneka kwi
▍Ukwakha umfanekiso kunye nokuwufaka kwindawo yokugcina
Ngaphambi kokuba sisebenze ngomfanekiso ogqityiweyo, kufuneka siwutyhalele kwindawo yokugcina umfanekiso. Ukwenza oku, siya kusebenzisa iqonga lokusingatha umfanekiso welifu wasimahla weDocker Hub. Kweli nqanaba lomsebenzi kufuneka wenze oku kulandelayo:
- Faka ifayile
Docker . - Bhalisa kwiwebhusayithi yeDocker Hub.
- Ngena kwiakhawunti yakho ngokwenza lo myalelo ulandelayo kwi-terminal:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Ngoku kufuneka usebenzise i-terminal ukuya kulawulo sa-frontend
kwaye uqhube lo myalelo ulandelayo apho:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .
Apha nangaphezulu kwimiyalelo efanayo $DOCKER_USER_ID
kufuneka itshintshwe ngegama lakho lomsebenzisi le-Docker Hub. Umzekelo, le ndawo yomyalelo inokujongeka ngolu hlobo: rinormaloku/sentiment-analysis-frontend
.
Kule meko, lo myalelo unokufinyezwa ngokususa kuwo -f Dockerfile
, kuba le fayile sele ikhona kulawulo apho senza khona lo myalelo.
Ukuze sithumele umfanekiso ogqityiweyo kwindawo yokugcina, sifuna lo myalelo ulandelayo:
docker push $DOCKER_USER_ID/sentiment-analysis-frontend
Emva kokuyigqiba, jonga uluhlu lweendawo zakho zokugcina kwi-Docker Hub ukuze uqonde ukuba ukulayishwa komfanekiso kwindawo yokugcina ilifu kuphumelele.
▍Ukuqhuba isikhongozeli
Ngoku nabani na unokukhuphela kwaye aqhube umfanekiso, owaziwa ngokuba $DOCKER_USER_ID/sentiment-analysis-frontend
. Ukuze wenze oku, kufuneka wenze olu landelelwano lulandelayo lwemiyalelo:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Ngoku isikhongozeli siyasebenza, sinokuqhubeka nokusebenza ngokwenza eminye imifanekiso esiyidingayo. Kodwa ngaphambi kokuba siqhubeke, masiqonde ukuyila 80:80
, ebonakala kumyalelo wokuqaliswa komfanekiso kwaye inokubonakala ibhidekisa.
- Inani lokuqala
80
— eli linani lezibuko lenginginya (oko kukuthi, ikhompyutha yendawo). - Inombolo yesibini
80
lizibuko lesikhongozeli apho isicelo kufuneka sithunyelwe khona.
Qwalasela lo mzekeliso ulandelayo.
Ukuhanjiswa kwePort
Inkqubo iphinda iqondise izicelo ezisuka kwizibuko <hostPort>
kwizibuko ngalinye <containerPort>
. Oko kukuthi, ukufikelela kwizibuko 80
ikhompyuter iqondiswe kwizibuko 80
isikhongozeli.
Ukususela kwizibuko 80
ivulwe kwikhompyuter yobulali, emva koko unokufikelela kwisicelo kule khompyutha localhost:80
. Ukuba inkqubo yakho ayixhasi iDocker, isicelo sinokuqhutywa kumatshini weDocker onenyani, idilesi eya kujongeka ngathi. <docker-machine ip>:80
. Ukufumana idilesi ye-IP yomatshini we-Docker wenyani, ungasebenzisa umyalelo docker-machine ip
.
Ngeli xesha, emva kokuqalisa ngempumelelo isikhongozeli sesicelo sesiphelo sangaphambili, kuya kufuneka ukwazi ukuvula iphepha laso kwisikhangeli.
▍Ifayile ye-.dockerignore
Ukuqokelela umfanekiso wesicelo SA-Frontend
, sinokuqaphela ukuba le nkqubo ijika icotha kakhulu. Oku kwenzeka ngenxa yokuba umxholo wokwakha umfanekiso kufuneka uthunyelwe kwi-Docker daemon. Uvimba weefayili omele umxholo wokwakha uchaziwe njengengxoxo yokugqibela yomyalelo docker build
. Kwimeko yethu, kukho ichaphaza ekupheleni kwalo myalelo. Oku kubangela ukuba oku kulandelayo kufakwe kumxholo wokwakha:
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src
Kodwa kuzo zonke iifolda ezikhoyo apha, sifuna kuphela ifolda build
. Ukulayisha enye into yinkcitha xesha. Unokukhawulezisa ukwakha ngokuxelela i-Docker ukuba zeziphi izikhokelo zokungazihoyi. Kukwenza oku ukuba sifuna ifayile .dockerignore
. Wena, ukuba uqhelene nefayile .gitignore
, ulwakhiwo lwale fayile luzakubonakala luqhelekile. Idwelisa abalawuli ukuba inkqubo yokwakha umfanekiso inokuhoya. Kwimeko yethu, imixholo yale fayile ibonakala ngolu hlobo:
node_modules
src
public
Ifayile .dockerignore
mayibe kulawulo olufanayo nefayile Dockerfile
. Ngoku ukwakha umfanekiso kuya kuthatha umcimbi wemizuzwana.
Ngoku masisebenze kumfanekiso wesicelo seJava.
▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lweJava
Uyazi ukuba yintoni, sele ufunde yonke into oyifunayo ukuze ukwazi ukwenza imifanekiso yesikhongozeli. Yiyo loo nto eli candelo liza kuba lifutshane kakhulu.
Vula ifayile Dockerfile
ekwifolda yeprojekthi sa-webapp
. Ukuba ufunda okubhaliweyo kule fayile, uya kubona kuphela ulwakhiwo olutsha ezibini kuyo, ukuqala ngamagama angundoqo ENV
и EXPOSE
:
ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080
Igama elingundoqo ENV
Ikuvumela ukuba uchaze izinto eziguquguqukayo zemekobume ngaphakathi kwizikhongozeli zeDocker. Ngokukodwa, kwimeko yethu, ikuvumela ukuba ucacise i-URL yokufikelela kwi-API yesicelo esenza uhlalutyo lombhalo.
Igama elingundoqo EXPOSE
ikuvumela ukuba uxelele iDocker ukuba ivule izibuko. Siza kusebenzisa eli zibuko ngelixa siqhuba isicelo. Apha unokuqaphela ukuba ngaphakathi Dockerfile
isicelo SA-Frontend
akukho myalelo unjalo. Oku kuphela ngeenjongo zamaxwebhu, ngamanye amazwi, olu lwakhiwo lwenzelwe lowo uya kufunda Dockerfile
.
Ukwakha umfanekiso kunye nokuwutyhalela kwindawo yogcino kujongeka ngokufanayo kumzekelo wangaphambili. Ukuba awukazithembi kakhulu kwizakhono zakho, imiyalelo ehambelanayo inokufumaneka kwifayile README.md
kwifolda sa-webapp
.
▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lwePython
Ukuba ujonga imixholo yefayile Dockerfile
kwifolda sa-logic
, ngoko awuyi kuzifumana into entsha apho. Imiyalelo yokwakha umfanekiso kunye nokuwuthumela kwindawo yokugcina kufuneka ukuba sele uqhelekile kuwe, kodwa, njengezinye izicelo zethu, zinokufumaneka kwifayile. README.md
kwifolda sa-logic
.
▍ Ukuvavanya izicelo ezifakwe kwiibhokisi
Ngaba unokuthembela kwinto ongakhange uyivavanye? Nam andikwazi. Masivavanye izikhongozeli zethu.
- Masiqalise isikhongozeli sesicelo
sa-logic
kwaye uyiqwalasele ukumamela kwizibuko5050
:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
- Masiqalise isikhongozeli sesicelo
sa-webapp
kwaye uyiqwalasele ukumamela kwizibuko8080
. Ukongeza, kufuneka siqwalasele izibuko apho isicelo sePython siyakumamela izicelo ezisuka kwisicelo seJava ngokwabela kwakhona ukuguquguquka kwemekobume.SA_LOGIC_API_URL
:$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
Ukufunda indlela yokufumana idilesi ye-IP yesikhongozeli seDocker okanye umatshini obonakalayo, bhekisa kwifayile
Masiqalise isikhongozeli sesicelo sa-frontend
:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Ngoku yonke into ilungele ukuya kwidilesi kwisikhangeli localhost:80
kwaye uzame isicelo.
Nceda uqaphele ukuba utshintshe izibuko sa-webapp
, okanye ukuba usebenzisa umatshini weDocker onenyani, kuya kufuneka uhlele ifayile App.js
ukusuka kwisiqulathi seefayili sa-frontend
ngokutshintsha idilesi ye-IP okanye inombolo yezibuko kwindlela analyzeSentence()
, endaweni yolwazi lwangoku endaweni yedatha ephelelwe lixesha. Emva koko, kufuneka udibanise umfanekiso kwaye uyisebenzise.
Yile ndlela esijonga ngayo umzobo wethu wesicelo ngoku.
Iinkonzo ezincinci ziqhutywa kwizikhongozeli
Isishwankathelo: kutheni sifuna iqela leKubernetes?
Sisanda kuhlola iifayile Dockerfile
, wathetha ngendlela yokwakha imifanekiso kwaye uyityhalele kwindawo yokugcina iDocker. Ukongeza, sifunde indlela yokukhawulezisa ukudibanisa umfanekiso usebenzisa ifayile .dockerignore
. Ngenxa yoko, ii-microservices zethu ngoku zisebenza kwizikhongozeli zeDocker. Apha unokuba nombuzo othethelela ngokupheleleyo malunga nokuba kutheni sifuna iKubernetes. Inxalenye yesibini yalo mbandela iya kunikezelwa ekuphenduleni lo mbuzo. Okwangoku, qwalasela lo mbuzo ulandelayo:
Masicinge ukuba usetyenziso lwethu lwewebhu lokuhlalutya umbhalo sele ludumile kwihlabathi jikelele. Izigidi zezicelo ziza kuye ngomzuzu ngamnye. Oku kuthetha ukuba microservices sa-webapp
и sa-logic
iya kuba phantsi komthwalo omkhulu. Uzikala njani izikhongozeli ezisebenzisa iimicroservices?
umthombo: www.habr.com