Ngokwesicelo sethu, uHabr udale ihabhu
Kubernetes futhi siyajabula ukubeka incwadi yokuqala kuyo. Bhalisa!
I-Kubernetes ilula. Kungani amabhange engikhokhela imali eningi ukuze ngisebenze kule ndawo, kuyilapho noma ubani engakwazi lobu buchwepheshe ngamahora ambalwa nje?
Uma ungabaza ukuthi i-Kubernetes ingafundwa ngokushesha kangaka, ngiphakamisa ukuthi uzame ngokwakho. Okungukuthi, njengoba usuwazi kahle le nto, uzokwazi ukusebenzisa uhlelo lokusebenza olususelwe kuma-microservices kuqoqo le-Kubernetes. Ngingakuqinisekisa lokhu, njengoba kuyindlela efanayo ncamashi esetshenziswa lapha ukuthi ngifundise amakhasimende ethu ukusebenza noKubernetes. Yini eyenza lo mhlahlandlela wehluke kwabanye? Eqinisweni, ziningi izinto. Ngakho-ke, eziningi zalezi zinto ziqala ngencazelo yezinto ezilula - imiqondo ye-Kubernetes kanye nezici zomyalo we-kubectl. Ababhali balezi zinsiza bacabanga ukuthi abafundi bazo bajwayele ukuthuthukiswa kohlelo lokusebenza, ama-microservices, neziqukathi ze-Docker. Sizohamba ngenye indlela. Okokuqala, sizokhuluma ngokuthi singalusebenzisa kanjani uhlelo olusekelwe kuma-microservices kukhompyutha. Bese sizobheka ukwakha izithombe zeziqukathi ze-microservice ngayinye. Futhi ngemva kwalokho, sizojwayelana ne-Kubernetes futhi sibheke ukuthumela uhlelo lokusebenza olusekelwe kuma-microservices kuqoqo eliphethwe yi-Kubernetes.
Le ndlela, ngendlela eya kancane kancane ku-Kubernetes, izonikeza ukujula kokuqonda okwenzekayo okudingekayo kumuntu ovamile ukuze aqonde ukuthi konke kusebenza kanjani ku-Kubernetes. I-Kubernetes iwubuchwepheshe obulula, inqobo nje uma labo abafuna ukubufunda bazi ukuthi busetshenziswa kuphi futhi kanjani.
Manje, ngaphandle kokuchitha isikhathi, ake siqale futhi sikhulume ngohlelo lokusebenza esizosebenza nalo.
Uhlelo lokusebenza lokuhlola
Uhlelo lwethu lokusebenza luzokwenza umsebenzi owodwa kuphela. Kuthatha umusho owodwa njengokufakwayo, emva kwalokho, ngokusebenzisa amathuluzi okuhlaziya umbhalo, yenza ukuhlaziywa kwemizwelo yalo musho, ukuthola ukuhlolwa kwesimo sengqondo sombhali womusho entweni ethile.
Yile ndlela iwindi elikhulu lalolu hlelo lokusebenza elibukeka ngayo.
Isicelo sewebhu sokuhlaziya imizwa yemibhalo
Ngokombono wezobuchwepheshe, uhlelo lokusebenza luqukethe ama-microservices amathathu, ngalinye elixazulula isethi ethile yemisebenzi:
- I-SA-Frontend iyiseva yewebhu ye-Nginx enikezela ngamafayela e-React amile.
- I-SA-WebApp iyisicelo sewebhu esibhalwe ku-Java esicubungula izicelo ezivela phambili.
- I-SA-Logic iyisicelo sePython esenza ukuhlaziya imizwa embhalweni.
Kubalulekile ukuqaphela ukuthi ama-microservices awekho wodwa. Basebenzisa umqondo "wokuhlukaniswa kwemithwalo yemfanelo", kodwa ngesikhathi esifanayo badinga ukuxhumana nomunye nomunye.
Idatha igeleza kuhlelo lokusebenza
Kumdwebo ongenhla, ungabona izigaba ezinenombolo zohlelo, okubonisa ukuhamba kwedatha kuhlelo lokusebenza. Ake sibheke kubo:
- Isiphequluli sicela ifayela kuseva
index.html
(okuyinto, elanda iphakheji yohlelo lokusebenza lwe-React). - Umsebenzisi usebenzisana nohlelo lokusebenza, lokhu kubangela ucingo kuhlelo lokusebenza lwewebhu olusekelwe eNtwasahlobo.
- Uhlelo lokusebenza lwewebhu ludlulisela isicelo sokuhlaziya umbhalo kuhlelo lokusebenza lwePython.
- Uhlelo lokusebenza lwePython lwenza ukuhlaziya imizwa yombhalo bese lubuyisela umphumela njengempendulo yesicelo.
- Uhlelo lokusebenza lwe-Spring luthumela impendulo kuhlelo lokusebenza lwe-React (olubuye lubonise umphumela wokuhlaziywa kombhalo kumsebenzisi).
Ikhodi yazo zonke lezi zinhlelo zokusebenza ingatholakala
Ukusebenzisa uhlelo lokusebenza olususelwe kuma-microservices emshinini wangakini
Ukuze isicelo sisebenze, sidinga ukuqala wonke ama-microservices amathathu. Ake siqale ngezinhle kunazo zonke - uhlelo lokusebenza olungaphambili.
▍Misa i-React ukuze uthuthuke endaweni
Ukuze usebenzise uhlelo lwe-React, udinga ukufaka inkundla ye-Node.js kanye ne-NPM kukhompyutha yakho. Uma usufake konke lokhu, sebenzisa itheminali ukuze uye kufolda yephrojekthi yakho sa-frontend
bese ugijima umyalo olandelayo:
npm install
Ngokusebenzisa lo myalo kufolda node_modules
ukuncika kwesicelo se-React kuzolayishwa, amarekhodi akhona kufayela package.json
. Uma ukuncika kulandwe kufolda efanayo, sebenzisa umyalo olandelayo:
npm start
Yilokho kuphela. Manje uhlelo lwe-React luyasebenza, ungalufinyelela ngokuya ekhelini elilandelayo esipheqululini sakho: localhost:3000
. Ungashintsha okuthile kukhodi yayo. Uzobona ngokushesha umphumela walezi zinguquko esipheqululini. Lokhu kungenzeka ngenxa yalokho okubizwa ngokuthi "okushisayo" esikhundleni samamojula. Lokhu kwenza ukuthuthukiswa kwe-front-end kube yinto elula futhi ejabulisayo.
▍Ukulungiselela uhlelo lokusebenza lwe-React lokukhiqiza
Ngenhloso yokusebenzisa uhlelo lokusebenza lwe-React, sidinga ukuliguqulela libe yisethi yamafayela amile futhi siwanikeze amaklayenti asebenzisa iseva yewebhu.
Ukwakha uhlelo lokusebenza lwe-React, futhi usebenzisa itheminali, zulazulela kufolda sa-frontend
bese ugijima umyalo olandelayo:
npm run build
Lokhu kuzodala uhla lwemibhalo kufolda yephrojekthi build
. Izoqukatha wonke amafayela amile adingekayo ukuze uhlelo lokusebenza lwe-React lusebenze.
▍ Inikeza amafayela amile kusetshenziswa i-Nginx
Okokuqala udinga ukufaka nokusebenzisa iseva yewebhu ye-Nginx. sa-frontend/build
kufolda [your_nginx_installation_dir]/html
.
Ngale ndlela, ifayela elakhiwe phakathi nenqubo yokwakha yohlelo lokusebenza lwe-React index.html
izotholakala ngo [your_nginx_installation_dir]/html/index.html
. Leli yifayela, ngokuzenzakalelayo, iseva ye-Nginx elikhiqizayo lapho ulifinyelela. Iseva ilungiselelwe ukuthi ilalele embobeni 80
, kodwa ingenziwa ngendlela oyidingayo ngokuhlela ifayela [your_nginx_installation_dir]/conf/nginx.conf
.
Manje vula isiphequluli sakho bese uya ku localhost:80
. Uzobona ikhasi lohlelo lokusebenza lwe-React.
Uhlelo lokusebenza olusabelayo olunikezwa iseva ye-Nginx
Uma manje ufaka okuthile ensimini Type your sentence
bese ucindezela inkinobho Send
- akukho okuzokwenzeka. Kodwa, uma ubheka ikhonsoli, ungabona imilayezo yephutha lapho. Ukuze uqonde ukuthi la maphutha avela kuphi ngempela, ake sihlaziye ikhodi yohlelo lokusebenza.
▍ Ukuhlaziywa kwekhodi yohlelo lokusebenza ekupheleni
Ukubheka ikhodi yefayela App.js
, singabona ukuthi ngokucindezela inkinobho Send
ibiza indlela analyzeSentence()
. Ikhodi yale ndlela inikezwe ngezansi. Sicela uqaphele ukuthi kulayini ngamunye onokuphawula kwefomu # Номер
, kunencazelo enikezwe ngezansi kwekhodi. Sizohlaziya ezinye izingcezu zekhodi 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 okwenziwa kuyo isicelo se-POST. Kucatshangwa ukuthi kukhona isicelo kuleli kheli esilindele izicelo ezinjalo.
2.Umzimba wesicelo uthunyelwe esicelweni. Nasi isibonelo somzimba wesicelo:
{
sentence: "I like yogobella!"
}
3.Uma impendulo yesicelo yamukelwe, isimo sengxenye siyabuyekezwa. Lokhu kubangela ukuthi ingxenye inikezwe kabusha. Uma sithola idatha (okungukuthi, into ye-JSON equkethe idatha yokokufaka kanye nesikolo sombhalo obaliwe), sizokhipha ingxenye Polarity
, njengoba izimo ezifanele zizohlangatshezwana nazo. Nansi indlela esichaza ngayo ingxenye:
const polarityComponent = this.state.polarity !== undefined ?
<Polarity sentence={this.state.sentence}
polarity={this.state.polarity}/> :
null;
Ikhodi ibonakala isebenza kahle kakhulu. Yini engalungile ngalokhu, noma kunjalo? Uma ucabanga ukuthi ekhelini lapho isicelo sizama ukuthumela khona isicelo OKUTHUNYELWE, akukho lutho okwamanje olungamukela futhi lucubungule lesi sicelo, lapho-ke uzobe ulungile ngokuphelele. Okungukuthi, ukucubungula izicelo ezitholwe ku http://localhost:8080/sentiment
, sidinga ukusebenzisa uhlelo lwewebhu olusekelwe ku-Spring.
Sidinga isicelo saseNtwasahlobo esingamukela isicelo OKUTHUNYELWE
▍ Ukusetha uhlelo lokusebenza lwewebhu olususelwe eNtwasahlobo
Ukuze usebenzise uhlelo lokusebenza lwe-Spring, uzodinga i-JDK8 ne-Maven kanye nokuguquguquka kwemvelo okulungiselelwe kahle. Uma usufake konke lokhu, ungaqhubeka nokusebenza kuphrojekthi yethu.
▍Ukupakisha uhlelo lokusebenza kufayela lembiza
Zulazula, usebenzisa itheminali, uye kufolda sa-webapp
bese ufaka umyalo olandelayo:
mvn install
Ngemva kokusebenzisa lo myalo kufolda sa-webapp
kuzokwenziwa uhla lwemibhalo target
. Lapha kulapho uhlelo lwe-Java luzotholakala khona, lupakishwe kufayela lembiza, elimelwe ifayela sentiment-analysis-web-0.0.1-SNAPSHOT.jar
.
▍Ukuqalisa uhlelo lwe-Java
Iya kufolda target
bese usebenzisa uhlelo lokusebenza ngomyalo olandelayo:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar
Kuzokwenzeka iphutha ngenkathi kusetshenziswa lo myalo. Ukuze siqale ukuyilungisa, singahlaziya imininingwane ehlukile kudatha yokulandela isitaki:
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, into ebaluleke kakhulu lapha ukukhuluma ngokungenakwenzeka kokucacisa incazelo sa.logic.api.url
. Ake sihlaziye ikhodi lapho iphutha lenzeka khona.
▍ Ukuhlaziywa kwekhodi yohlelo lokusebenza lwe-Java
Nawa amazwibela ekhodi lapho iphutha lenzeka 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();
}
}
- Ku-S
entimentController
kukhona insimusaLogicApiUrl
. Inani layo licaciswa yisakhiwosa.logic.api.url
. - Ulayini
saLogicApiUrl
ihambisana nevelu/analyse/sentiment
. Bebonke bakha ikheli lokushaya ucingo kwi-microservice eyenza ukuhlaziya umbhalo.
▍Setha inani lesakhiwo
Entwasahlobo, umthombo ojwayelekile wamanani ezakhiwo uyifayela application.properties
, engatholakala ku sa-webapp/src/main/resources
. Kodwa ukusetshenziswa kwayo akuyona ukuphela kwendlela yokusetha amanani ezakhiwo. Lokhu kungenziwa futhi ngokusebenzisa umyalo olandelayo:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL
Inani lalesi sakhiwo kufanele likhombe ekhelini lesicelo sethu sePython.
Ngokuyilungisa, sitshela uhlelo lokusebenza lwewebhu lwaseNtwasahlobo lapho ludinga ukuya khona ukuze lwenza izicelo zokuhlaziya umbhalo.
Ukuze singafaki impilo yethu inkimbinkimbi, sizonquma ukuthi isicelo sePython sizotholakala ku localhost:5000
futhi ake sizame ukungakhohlwa ngakho. Ngenxa yalokho, umyalo wokwethula uhlelo lokusebenza lwe-Spring uzobukeka kanje:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000
Uhlelo lwethu lushoda ngohlelo lwePython
Manje okumele sikwenze ukusebenzisa uhlelo lwePython futhi uhlelo luzosebenza njengoba bekulindelekile.
▍ Ukusetha uhlelo lwePython
Ukuze usebenzise uhlelo lwe-Python, kufanele ufake i-Python 3 ne-Pip, futhi okuguquguqukayo kwendawo efanele kufanele kusethwe ngendlela efanele.
▍Ifaka okuncikile
Iya kufolda yephrojekthi yakho sa-logic/sa
bese ugijima imiyalo elandelayo:
python -m pip install -r requirements.txt
python -m textblob.download_corpora
▍Yethula uhlelo lokusebenza
Ngemva kokufaka okuncikile, sesilungele ukusebenzisa uhlelo lokusebenza:
python sentiment_analysis.py
Ngemva kokusebenzisa lo myalo sizotshelwa okulandelayo:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Lokhu kusho ukuthi isicelo siyasebenza futhi silinde izicelo ngo localhost:5000/
▍ Ucwaningo Lwekhodi
Ake sibheke ikhodi yesicelo sePython ukuze siqonde ukuthi iphendula kanjani izicelo:
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
- Iqalisa into
Flask
. - Icacisa ikheli lokwenza izicelo ze-POST kuyo.
- Ukubuyisa Isakhiwo
sentence
kusuka kumgwamanda wesicelo. - Ukuqala Into Engaziwa
TextBlob
nokuthola inanipolarity
ngomusho wokuqala otholwe emzimbeni wesicelo (kithi, lesi sigwebo kuphela esithunyelwe ukuze sihlaziywe). - Ukubuyisela impendulo umzimba wayo oqukethe umbhalo womusho kanye nenkomba yayo ebaliwe
polarity
. - Yethula isicelo se-Flask, esizotholakala ku-
0.0.0.0:5000
(ungafinyelela futhi usebenzisa ukwakhiwa kwefomulocalhost:5000
).
Ama-microservices akha uhlelo lokusebenza manje ayasebenza. Bacushwe ukuxhumana nomunye. Yile ndlela umdwebo wohlelo lokusebenza obukeka ngayo kulesi sigaba somsebenzi.
Wonke ama-microservices akha uhlelo lokusebenza alethwa ukuze asebenze
Manje, ngaphambi kokuthi uqhubeke, vula uhlelo lwakho lokusebenza lwe-React kusiphequluli bese uzama ukuncozulula umusho othile ngaso. Uma konke kwenziwa ngendlela efanele - ngemva kokucindezela inkinobho Send
uzobona imiphumela yokuhlaziya ngezansi kwenkambu yombhalo.
Esigabeni esilandelayo, sizokhuluma ngendlela yokusebenzisa ama-microservices ethu ezitsheni ze-Docker. Lokhu kuyadingeka ukuze ulungiselele uhlelo lokusebenza ukuthi lusebenze kuqoqo le-Kubernetes.
Iziqukathi ze-Docker
Isithombe sesiqukathi siyiphakheji engasindi, eziqukethwe ngokwaso, esebenzisekayo equkethe uhlelo lokusebenza, ehlanganisa yonke into edingekayo ukuze iluqalise: ikhodi yohlelo, indawo yokusebenza, amathuluzi esistimu nemitapo yolwazi, izilungiselelo. Izinhlelo ezifakwe ku-Container zingasetshenziswa ezindaweni ze-Linux ne-Windows, futhi zizohlala zisebenza ngendlela efanayo ngaphandle kwengqalasizinda.
Lokhu kusho ukuthi iziqukathi zingasetshenziswa kunoma iyiphi ikhompuyutha, okuhlanganisa amaseva okukhiqiza, futhi izinhlelo zokusebenza eziqukethwe kuzo zizosebenza ngendlela efanayo kunoma iyiphi indawo.
Ukuhlola izici zeziqukathi futhi uziqhathanise nezinye izindlela zokuqalisa izinhlelo zokusebenza, ake sibheke isibonelo sokuphakela uhlelo lwe-React usebenzisa umshini obonakalayo nesiqukathi.
▍ Inikeza amafayela amile ohlelo lokusebenza lwe-React kusetshenziswa umshini obonakalayo
Ukuzama ukuhlela isevisi yamafayela amile kusetshenziswa imishini ebonakalayo, sizohlangabezana nezinkinga ezilandelayo:
- Ukusetshenziswa okungalungile kwezinsiza, njengoba umshini ngamunye obonakalayo uwuhlelo olugcwele lokusebenza.
- Ukuncika kwenkundla. Okusebenza kukhompyutha yendawo kungase kungasebenzi kuseva yokukhiqiza.
- Ukukala okunensayo nokunamandla kwensiza kwesixazululo esisekelwe emshinini esibonakalayo.
Iseva yewebhu ye-Nginx isebenzisa amafayela amile asebenza emshinini obonakalayo
Uma iziqukathi zisetshenziselwa ukuxazulula inkinga efanayo, khona-ke, uma kuqhathaniswa nemishini ebonakalayo, amandla alandelayo angaqashelwa:
- Ukusetshenziswa kahle kwezinsiza: ukusebenza nohlelo lokusebenza usebenzisa i-Docker.
- Inkundla izimele. Isiqukathi unjiniyela angasisebenzisa kukhompuyutha yakhe sizosebenza noma yikuphi.
- Ukusabalalisa okulula ngokusebenzisa izendlalelo zesithombe.
Iseva yewebhu ye-Nginx isebenzisa amafayela amile asebenza esitsheni
Siqhathanise kuphela imishini ebonakalayo neziqukathi emaphuzwini ambalwa, kodwa ngisho nalokhu kwanele ukuze uthole umuzwa wamandla eziqukathi.
▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwe-React
Isakhiwo esiyisisekelo sesitsha se-Docker yifayela Dockerfile
. Ekuqaleni kwaleli fayela, irekhodi lenziwe ngesithombe esiyisisekelo sesitsha, bese kuba nokulandelana kweziqondiso ezibonisa ukuthi ungakha kanjani isitsha esizohlangabezana nezidingo zesicelo esithile.
Ngaphambi kokuthi siqale ukusebenza ngefayela Dockerfile
, masikhumbule ukuthi senzeni ukuze silungiselele amafayela ohlelo lwe-React ukuze alayishwe kuseva ye-Nginx:
- Ukwakha iphakheji yesicelo se-React (
npm run build
). - Iqala iseva ye-Nginx.
- Ikopisha okuqukethwe kohla lwemibhalo
build
kusuka kufolda yephrojekthisa-frontend
kufolda yesevanginx/html
.
Ngezansi ungabona ukufana phakathi kokwenza isiqukathi kanye nezinyathelo ezingenhla ezenziwa kukhompuyutha yakho yangakini.
▍Ukulungiselela i-Dockerfile yohlelo lokusebenza lwe-SA-Frontend
Imiyalo ezoqukethwe ku Dockerfile
kwesicelo SA-Frontend
, inamaqembu amabili kuphela. Iqiniso liwukuthi ithimba lokuthuthukisa i-Nginx lilungiselele okuyisisekelo
- Isisekelo sesithombe kufanele sibe isithombe se-Nginx.
- Okuqukethwe Kwefolda
sa-frontend/build
idinga ukukopishelwa kufolda yesithombenginx/html
.
Uma usuka kule ncazelo uye kufayela Dockerfile
, khona-ke izobukeka kanje:
FROM nginx
COPY build /usr/share/nginx/html
Njengoba ubona, yonke into lapha ilula kakhulu, futhi okuqukethwe ifayela kuze kube efundekayo ngempela futhi kuyaqondakala. Leli fayela litshela isistimu ukuthi ithathe isithombe nginx
ngayo yonke into ekhona kakade, bese ukopisha okuqukethwe kuhla lwemibhalo build
kuhla lwemibhalo nginx/html
.
Lapha ungase ube nombuzo mayelana nokuthi ngazi kanjani ukuthi udinga ukukopisha amafayela kufolda build
, okungukuthi, lapho indlela yavela khona /usr/share/nginx/html
. Eqinisweni, akukho lutho oluyinkimbinkimbi nalapha. Iqiniso liwukuthi ulwazi olufanele lungatholakala ku
▍Ukwakha isithombe bese usilayisha endaweni yokugcina
Ngaphambi kokuthi sisebenze ngesithombe esiqediwe, sidinga ukusiphushela endaweni yokugcina izithombe. Ukwenza lokhu, sizosebenzisa isiteji samahhala sokubamba isithombe samafu i-Docker Hub. Kulesi sigaba somsebenzi udinga ukwenza okulandelayo:
- Faka
Docker . - Bhalisa kuwebhusayithi ye-Docker Hub.
- Ngena ngemvume ku-akhawunti yakho ngokusebenzisa umyalo olandelayo kutheminali:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Manje udinga ukusebenzisa i-terminal ukuya kumkhombandlela sa-frontend
bese ugijima umyalo olandelayo lapho:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .
Lapha futhi eminye imiyalo efanayo $DOCKER_USER_ID
kufanele kushintshwe igama lakho lomsebenzisi le-Docker Hub. Isibonelo, le ngxenye yomyalo ingase ibukeke kanje: rinormaloku/sentiment-analysis-frontend
.
Kulokhu, lo myalo ungafushaniswa ngokususa kuwo -f Dockerfile
, njengoba leli fayela selivele likhona kufolda lapho senza khona lo myalo.
Ukuze sithumele isithombe esiqediwe endaweni yokugcina, sidinga umyalo olandelayo:
docker push $DOCKER_USER_ID/sentiment-analysis-frontend
Ngemva kokusiqeda, hlola uhlu lwamakhosombe akho ku-Docker Hub ukuze uqonde ukuthi ukulayishwa kwesithombe kusitoreji samafu kube yimpumelelo yini.
▍Ukusebenzisa isiqukathi
Manje noma ubani angalanda futhi asebenzise isithombe, esaziwa ngokuthi $DOCKER_USER_ID/sentiment-analysis-frontend
. Ukuze wenze lokhu, udinga ukusebenzisa ukulandelana kwemiyalelo elandelayo:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Manje isiqukathi siyasebenza, singaqhubeka nokusebenza ngokwakha ezinye izithombe esizidingayo. Kodwa ngaphambi kokuba siqhubeke, ake siqonde umklamo 80:80
, okuvela kumyalo wokwethulwa kwesithombe futhi kungase kubonakale kudida.
- Inombolo yokuqala
80
— lena inombolo yembobo yesikhungo (okungukuthi, ikhompuyutha yendawo). - Inombolo yesibili
80
iyichweba lebhokisi lapho isicelo kufanele sidluliselwe khona.
Cabangela umfanekiso olandelayo.
Ukudluliswa Kwembobo
Uhlelo luqondisa kabusha izicelo ezivela embobeni <hostPort>
ethekwini <containerPort>
. Okungukuthi, ukufinyelela echwebeni 80
ikhompuyutha iqondiswe kabusha ethekwini 80
isitsha.
Kusukela ethekwini 80
kuvulwe kukhompuyutha yendawo, bese ungafinyelela uhlelo lokusebenza kule khompyutha kokuthi localhost:80
. Uma uhlelo lwakho lungasekeli i-Docker, uhlelo lokusebenza lungasebenza emshinini we-Docker virtual, ikheli lawo elizobukeka njenge <docker-machine ip>:80
. Ukuthola ikheli le-IP lomshini we-Docker virtual, ungasebenzisa umyalo docker-machine ip
.
Kuleli qophelo, ngemva kokwethula ngempumelelo isiqukathi sohlelo lokusebenza esisekupheleni, kufanele ukwazi ukuvula ikhasi laso kusiphequluli.
▍Ifayela elithi .dockerignore
Iqoqa isithombe sohlelo lokusebenza SA-Frontend
, singaqaphela ukuthi le nqubo ibonakala ihamba kancane kakhulu. Lokhu kwenzeka ngoba umongo wokwakha isithombe kufanele uthunyelwe ku-Docker daemon. Uhla lwemibhalo olumelela umongo wokwakha lucaciswe njengengxabano yokugcina yomyalo docker build
. Esimweni sethu, kunechashazi ekugcineni kwalo myalo. Lokhu kubangela ukuthi isakhiwo esilandelayo sifakwe kumongo wokwakha:
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src
Kodwa kuwo wonke amafolda akhona lapha, sidinga ifolda kuphela build
. Ukulayisha noma yini enye kuwukumosha isikhathi. Ungakwazi ukusheshisa ukwakha ngokutshela i-Docker ukuthi yiziphi izinkomba okufanele uzibe. Ukuze senze lokhu sidinga ifayela .dockerignore
. Wena, uma ujwayele ifayela .gitignore
, ukwakheka kwaleli fayela cishe kuzobonakala kujwayelekile. Ibala izinkomba isistimu yokwakha isithombe engaziba. Esimweni sethu, okuqukethwe kwaleli fayela kubukeka kanjena:
node_modules
src
public
Файл .dockerignore
kufanele ibe kufolda efanayo nefayela Dockerfile
. Manje ukwakha isithombe kuzothatha imizuzwana.
Manje ake sisebenze esithombeni sohlelo lokusebenza lwe-Java.
▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwe-Java
Uyazi ukuthini, usufunde konke odinga ukukwazi ukuze udale izithombe zesiqukathi. Yingakho lesi sigaba sizoba sifushane kakhulu.
Vula ifayela Dockerfile
ekufolda yephrojekthi sa-webapp
. Uma ufunda umbhalo waleli fayela, uzobona ukwakhiwa okusha okubili kuphela kulo, kuqala ngamagama angukhiye ENV
и EXPOSE
:
ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080
Igama elingukhiye ENV
Ikuvumela ukuthi umemezele okuguquguqukayo kwendawo ngaphakathi kweziqukathi ze-Docker. Ikakhulukazi, esimweni sethu, ikuvumela ukuthi ucacise i-URL ukuze ufinyelele i-API yohlelo lokusebenza eyenza ukuhlaziya umbhalo.
Igama elingukhiye EXPOSE
ikuvumela ukuthi utshele i-Docker ukuthi ivule ichweba. Sizosebenzisa lesi sikhungo ngenkathi sisebenzisa uhlelo. Lapha ungaqaphela ukuthi ku Dockerfile
kwesicelo SA-Frontend
awukho umyalo onjalo. Lokhu kwenzelwa izinjongo zemibhalo kuphela, ngamanye amazwi, lokhu kwakhiwa kuhloselwe lowo ozofunda Dockerfile
.
Ukwakha isithombe bese usiphushela endaweni yokugcina kubukeka kufana ncamashi nesibonelo sangaphambilini. Uma ungakazithembi kakhulu ngamakhono akho, imiyalo ehambisanayo ingatholakala efayeleni README.md
kufolda sa-webapp
.
▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwePython
Uma ubheka okuqukethwe yifayela Dockerfile
kufolda sa-logic
, khona-ke ngeke uzitholele lutho olusha lapho. Imiyalo yokwakha isithombe nokusithumela endaweni yokugcina kufanele futhi ube uyayazi kakade, kodwa, njengezinye izinhlelo zokusebenza zethu, ingatholakala efayeleni. README.md
kufolda sa-logic
.
▍Ihlola izinhlelo zokusebenza ezifakwe esitsheni
Ungayethemba into ongayihlolanga? Nami angikwazi. Ake sihlole iziqukathi zethu.
- Masiqalise isiqukathi sohlelo lokusebenza
sa-logic
futhi uyilungiselele ukuthi ilalele ethekwini5050
:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
- Masiqalise isiqukathi sohlelo lokusebenza
sa-webapp
futhi uyilungiselele ukuthi ilalele ethekwini8080
. Ngaphezu kwalokho, sidinga ukulungisa ichweba lapho uhlelo lwePython luzolalela khona izicelo zohlelo lwe-Java ngokunikeza kabusha ukuguquguquka kwemvelo.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
Ukuze ufunde ukuthi ungalithola kanjani ikheli le-IP lesiqukathi se-Docker noma umshini obonakalayo, bheka ifayela
Masiqalise isiqukathi sohlelo lokusebenza sa-frontend
:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Manje yonke into isilungele ukuya ekhelini esipheqululini localhost:80
bese uzama uhlelo lokusebenza.
Sicela uqaphele ukuthi uma ushintshe ichweba ukuze sa-webapp
, noma uma usebenzisa umshini we-Docker virtual, uzodinga ukuhlela ifayela App.js
kusuka kufolda sa-frontend
ngokushintsha ikheli le-IP noma inombolo yembobo endleleni analyzeSentence()
, esikhundleni solwazi lwamanje esikhundleni sedatha ephelelwe yisikhathi. Ngemuva kwalokhu, udinga ukuhlanganisa kabusha isithombe bese usisebenzisa.
Yile ndlela umdwebo wethu wohlelo lokusebenza obukeka ngayo manje.
Ama-Microservices asebenza ezitsheni
Isifinyezo: kungani sidinga iqoqo le-Kubernetes?
Sisanda kuhlola amafayela Dockerfile
, ukhulume ngendlela yokwakha izithombe futhi uziphushele endaweni yokugcina i-Docker. Ngaphezu kwalokho, sifunde indlela yokusheshisa ukuhlanganiswa kwesithombe usebenzisa ifayela .dockerignore
. Njengomphumela, ama-microservices ethu manje asebenza ezitsheni ze-Docker. Lapha ungase ube nombuzo onesizathu esiphelele sokuthi kungani sidinga i-Kubernetes. Ingxenye yesibili yalesi sihloko izonikelwa ekuphenduleni lo mbuzo. Okwamanje, cabangela lo mbuzo olandelayo:
Ake sicabange ukuthi isicelo sethu sewebhu sokuhlaziya umbhalo sesidume umhlaba wonke. Izigidi zezicelo ziza kuye umzuzu nomzuzu. Lokhu kusho ukuthi ama-microservices sa-webapp
и sa-logic
izoba ngaphansi komthwalo omkhulu. Ungazikala kanjani iziqukathi ezisebenzisa ama-microservices?
Source: www.habr.com