Pyynnöstämme Habr loi keskuksen ja meillä on ilo julkaista ensimmäinen julkaisu siihen. Tilaa!
Kubernetes on helppoa. Miksi pankit maksavat minulle paljon rahaa työskennelläkseni tällä alalla, vaikka kuka tahansa voi hallita tämän tekniikan muutamassa tunnissa?
Jos epäilet, että Kubernetes voidaan oppia niin nopeasti, suosittelen, että yrität tehdä sen itse. Nimittäin tämän materiaalin hallittuasi pystyt ajamaan mikropalveluihin perustuvan sovelluksen Kubernetes-klusterissa. Voin taata tämän, koska samalla menetelmällä, jota käytän täällä, opetan asiakkaillemme työskentelemään Kubernetesin kanssa. Mikä tekee tästä oppaasta erilaisen kuin muut? Itse asiassa paljon asioita. Joten suurin osa näistä materiaaleista alkaa selittämällä yksinkertaisia asioita - Kubernetesin käsitteitä ja kubectl-komennon ominaisuuksia. Näiden artikkeleiden kirjoittajat olettavat, että heidän lukijansa tuntee sovelluskehityksen, mikropalvelut ja Docker-säiliöt. Menemme toiseen suuntaan. Puhutaanpa ensin mikropalveluihin perustuvan sovelluksen suorittamisesta tietokoneessa. Sitten tarkastellaan kunkin mikropalvelun konttikuvien rakentamista. Ja sen jälkeen tutustutaan Kubernetesiin ja analysoidaan mikropalveluihin perustuvan sovelluksen käyttöönottoa Kubernetesin hallinnoimassa klusterissa.
Tämä lähestymistapa, jossa on asteittainen lähestymistapa Kubernetesiin, antaa syventävän ymmärryksen siitä, mitä tapahtuu, mitä tavallinen ihminen tarvitsee ymmärtääkseen, kuinka yksinkertaisesti kaikki on järjestetty Kubernetesissa. Kubernetes on varmasti yksinkertainen tekniikka, kunhan se, joka haluaa hallita, tietää missä ja miten sitä käytetään.
Nyt, ilman pitkiä puheita, ryhdytään työhön ja puhutaan sovelluksesta, jonka kanssa työskentelemme.
Kokeellinen sovellus
Sovelluksemme suorittaa vain yhden toiminnon. Se ottaa syötteenä yhden lauseen, jonka jälkeen se suorittaa tekstianalyysityökalujen avulla tämän lauseen tunneanalyysin saadakseen arvion lauseen kirjoittajan emotionaalisesta asenteesta tiettyyn kohteeseen.
Tämän sovelluksen pääikkuna näyttää tältä.

Sentimenttianalyysin verkkosovellus
Tekniseltä kannalta katsottuna sovellus koostuu kolmesta mikropalvelusta, joista jokainen ratkaisee tietyn joukon tehtäviä:
- SA-Frontend on Nginx-verkkopalvelin, joka palvelee staattisia React-tiedostoja.
- SA-WebApp on Java-kielellä kirjoitettu verkkosovellus, joka käsittelee käyttöliittymän pyyntöjä.
- SA-Logic on Python-sovellus, joka suorittaa tekstin tunteiden analysointia.
On tärkeää huomata, että mikropalvelut eivät ole olemassa erillään. He toteuttavat ajatusta "tehtävien erottamisesta", mutta samalla heidän on oltava vuorovaikutuksessa toistensa kanssa.

Data virtaa sovelluksessa
Yllä olevasta kaaviosta näet järjestelmän numeroidut vaiheet, jotka kuvaavat sovelluksen tietovirtoja. Puretaan ne:
- Selain pyytää tiedostoa palvelimelta
index.html(joka puolestaan lataa React-sovelluspaketin). - Käyttäjä on vuorovaikutuksessa sovelluksen kanssa, mikä aiheuttaa kutsun Spring-pohjaiseen verkkosovellukseen.
- Verkkosovellus välittää tekstin jäsennyspyynnön Python-sovellukselle.
- Python-sovellus analysoi tekstin tunteen ja palauttaa tuloksen vastauksena pyyntöön.
- Spring-sovellus lähettää vastauksen React-sovellukselle (joka puolestaan näyttää käyttäjälle jäsennetyn tekstin tuloksen).
Kaikkien näiden sovellusten koodi löytyy . Suosittelen, että kopioit tämän arkiston itsellesi heti, sillä meillä on edessämme monia mielenkiintoisia kokeiluja sen kanssa.
Mikropalveluihin perustuvan sovelluksen suorittaminen paikallisessa koneessa
Jotta sovellus toimisi, meidän on käynnistettävä kaikki kolme mikropalvelua. Aloitetaan niistä kauneimmalla - käyttöliittymäsovelluksella.
▍Reactin perustaminen paikallista kehitystä varten
React-sovelluksen suorittamiseksi sinun on asennettava Node.js-kehys ja NPM tietokoneellesi. Kun olet asentanut kaiken tämän, siirry terminaalilla projektikansioon sa-frontend ja suorita seuraava komento:
npm install Suorittamalla tämän komennon kansiossa node_modules latautuu React-sovelluksen riippuvuudet, joiden tietueet ovat tiedostossa package.json. Kun olet ladannut riippuvuudet samassa kansiossa, suorita seuraava komento:
npm start Siinä kaikki. React-sovellus on nyt käynnissä ja siihen pääsee navigoimalla selaimen osoitteeseen localhost:3000. Voit muuttaa jotain hänen koodissaan. Näet heti näiden muutosten vaikutuksen selaimessa. Tämä on mahdollista moduulien niin kutsutun "kuuman" vaihdon ansiosta. Tämän ansiosta etupään kehitys muuttuu yksinkertaiseksi ja nautinnolliseksi kokemukseksi.
▍React-sovelluksen valmistelu tuotantoa varten
React-sovelluksen todellista käyttöä varten meidän on muunnettava se staattisiksi tiedostoiksi ja toimitettava ne asiakkaille verkkopalvelimen avulla.
Luodaksesi React-sovelluksen, siirry kansioon uudelleen päätelaitteen avulla sa-frontend ja suorita seuraava komento:
npm run build Tämä luo hakemiston projektikansioon build. Se sisältää kaikki staattiset tiedostot, joita React-sovellus tarvitsee toimiakseen.
▍Staattisten tiedostojen palveleminen Nginxillä
Ensin sinun on asennettava ja suoritettava Nginx-verkkopalvelin. voit ladata sen ja löytää ohjeet sen asentamiseen ja käyttöön. Sitten sinun on kopioitava kansion sisältö sa-frontend/build kansioon [your_nginx_installation_dir]/html.
Tällä lähestymistavalla React-sovelluksen kokoonpanon aikana luotu tiedosto index.html on saatavilla osoitteessa [your_nginx_installation_dir]/html/index.html. Tämä on tiedosto, jonka Nginx-palvelin antaa oletusarvoisesti käyttäessään sitä. Palvelin on määritetty kuuntelemaan porttia 80, mutta voit muokata sitä haluamallasi tavalla muokkaamalla tiedostoa [your_nginx_installation_dir]/conf/nginx.conf.
Avaa nyt selain ja siirry kohtaan localhost:80. Näet React-sovellussivun.

Nginx-palvelimen tarjoama React-sovellus
Jos nyt syötät jotain kenttään Type your sentence ja paina painiketta Send - mitään ei tule tapahtumaan. Mutta jos katsot konsolia, näet siellä virheilmoituksia. Ymmärtääksemme tarkalleen, missä nämä virheet tapahtuvat, analysoidaan sovelluskoodi.
▍Etuliittymäsovelluksen koodin analyysi
Katsotaan tiedoston koodia App.js, näemme sen napsauttamalla painiketta Send kutsuu menetelmää analyzeSentence(). Tämän menetelmän koodi on esitetty alla. Kiinnitä samalla huomiota siihen, että jokaiselle riville, johon on lomakkeen kommentti # Номер, koodin alla on selitys. Samalla tavalla jäsennämme muita koodinpätkiä.
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-osoite, johon POST-pyyntö tehdään. Tämän osoitteen oletetaan olevan sovellus, joka odottaa tällaisia pyyntöjä.
2.Hakemukseen lähetetty pyyntöelin. Tässä on esimerkkipyynnön runko:
{
sentence: "I like yogobella!"
} 3.Kun vastaus pyyntöön vastaanotetaan, komponentin tila päivitetään. Tämä saa komponentin hahmontamaan uudelleen. Jos saamme dataa (eli JSON-objektin, joka sisältää syötetyt tiedot ja lasketun tekstipisteen), tulostamme komponentin Polarityniin kauan kuin ehdot täyttyvät. Näin kuvailemme komponenttia:
const polarityComponent = this.state.polarity !== undefined ?
<Polarity sentence={this.state.sentence}
polarity={this.state.polarity}/> :
null; Koodi näyttää toimivan varsin hyvin. Mikä tässä muuten on vialla? Jos oletat, että osoitteessa, johon sovellus yrittää lähettää POST-pyynnön, ei ole vielä mitään, joka voi hyväksyä ja käsitellä tämän pyynnön, olet täysin oikeassa. Nimittäin osoitteeseen tulevien pyyntöjen käsittelyyn http://localhost:8080/sentiment, meidän on suoritettava kevääseen perustuva verkkosovellus.

Tarvitsemme keväthakemuksen, joka voi hyväksyä POST-pyynnön
▍Kevääseen perustuvan verkkosovelluksen määrittäminen
Spring-sovelluksen käyttöönottoon tarvitaan JDK8 ja Maven sekä oikein konfiguroidut ympäristömuuttujat. Kun olet asentanut tämän kaiken, voit jatkaa projektiamme.
▍ Sovelluksen pakkaaminen jar-tiedostoon
Navigoi kansioon päätelaitteen avulla sa-webapp ja kirjoita seuraava komento:
mvn install Suoritettuasi tämän komennon kansiossa sa-webapp hakemisto luodaan target. Tämä on paikka, jossa Java-sovellus sijaitsee, pakattuna jar-tiedostoon, jota tiedosto edustaa sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍Java-sovelluksen käynnistäminen
Siirry kansioon target ja suorita sovellus seuraavalla komennolla:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jarTätä komentoa suoritettaessa tapahtuu virhe. Aloittaaksemme sen korjaamisen, voimme jäsentää poikkeuksen tiedot pinon jäljitystiedoissa:
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}" Meille tärkeintä tässä on maininta merkityksen selkeyttämisen mahdottomuudesta sa.logic.api.url. Analysoidaan koodia, jossa virhe tapahtuu.
▍Java-sovelluskoodianalyysi
Tässä on koodinpätkä, jossa virhe tapahtuu.
@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();
}
}- Kirjassa S
entimentControllersiellä on kenttäsaLogicApiUrl. Sen arvon määrää omaisuussa.logic.api.url. - Linja
saLogicApiUrlketjuttaa arvoa/analyse/sentiment. Yhdessä ne muodostavat osoitteen, jolla voidaan soittaa tekstianalyysiä tekevään mikropalveluun.
▍Ominaisuuden arvon asettaminen
Keväällä ominaisuusarvojen oletuslähde on tiedosto application.properties, joka löytyy osoitteesta sa-webapp/src/main/resources. Mutta sen käyttö ei ole ainoa tapa määrittää ominaisuusarvoja. Voit tehdä tämän myös seuraavalla komennolla:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URLTämän ominaisuuden arvon tulee osoittaa Python-sovelluksemme osoitteeseen.
Määrittämällä sen kerromme Spring-verkkosovellukselle, minne sen on mentävä suorittaakseen tekstin jäsennyspyyntöjä.
Jotta emme vaikeuttaisi elämäämme, päätämme, että Python-sovellus on saatavilla osoitteessa localhost:5000 ja yritä olla unohtamatta sitä. Tämän seurauksena komento Spring-sovelluksen käynnistämiseksi näyttää tältä:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 
Järjestelmästämme puuttuu Python-sovellus
Nyt meidän on vain suoritettava Python-sovellus ja järjestelmä toimii odotetusti.
▍Python-sovelluksen määrittäminen
Python-sovelluksen suorittaminen edellyttää, että Python 3 ja Pip ovat asennettuina ja asianmukaiset ympäristömuuttujat on asetettu oikein.
▍Asenna riippuvuudet
Siirry projektikansioon sa-logic/sa ja suorita seuraavat komennot:
python -m pip install -r requirements.txt
python -m textblob.download_corpora▍ Sovelluksen käynnistys
Kun riippuvuudet on asennettu, olemme valmiita suorittamaan sovelluksen:
python sentiment_analysis.pyTämän komennon suorittamisen jälkeen meille kerrotaan seuraavaa:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) Tämä tarkoittaa, että sovellus on käynnissä ja odottaa pyyntöjä osoitteessa localhost:5000/
▍Kooditutkimus
Tarkastellaan Python-sovelluskoodia ymmärtääksemme, kuinka se vastaa pyyntöihin:
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- Objektin alustus
Flask. - Osoitteen määrittäminen POST-pyyntöjen lähettämistä varten.
- Omaisuuden hakeminen
sentencepyynnön esittäneeltä elimeltä. - Nimettömän objektin alustus
TextBlobja saada arvopolarityensimmäiselle pyynnön tekstiosassa vastaanotetulle ehdotukselle (meidän tapauksessamme tämä on ainoa analysoitavaksi jätetty ehdotus). - Palautetaan vastaus, jonka runko sisältää tarjouksen tekstin ja sille lasketun indikaattorin
polarity. - Flask-sovelluksen käynnistäminen, joka on saatavilla osoitteessa
0.0.0.0:5000(pääset siihen myös käyttämällä lomakkeen rakennettalocalhost:5000).
Nyt sovelluksen muodostavat mikropalvelut ovat käynnissä. Ne on asetettu olemaan vuorovaikutuksessa toistensa kanssa. Tältä sovelluskaavio näyttää tässä työvaiheessa.

Kaikki sovelluksen muodostavat mikropalvelut saatetaan terveeseen tilaan
Ennen kuin jatkamme, avaa React-sovellus selaimessa ja yritä jäsentää lausetta sen avulla. Jos kaikki on tehty oikein - painikkeen painamisen jälkeen Send näet analyysitulokset tekstiruudun alla.
Seuraavassa osiossa puhumme mikropalveluidemme ajamisesta Docker-säiliöissä. Tämä on tarpeen sovelluksen valmistelemiseksi toimimaan Kubernetes-klusterissa.
Docker-kontit
on järjestelmä konttisovellusten käyttöönoton, skaalauksen ja hallinnan automatisointiin. Sitä kutsutaan myös "konttiorkesteriksi". Jos Kubernetes toimii säiliöiden kanssa, meidän on ensin hankittava nämä kontit ennen tämän järjestelmän käyttöä. Mutta ensin puhutaan siitä, mitä säiliöt ovat. Ehkä paras vastaus kysymykseen, mitä se on, löytyy Dockeriin:
Säiliökuva on kevyt, itsenäinen ja suoritettava paketti, joka sisältää sovelluksen, joka sisältää kaiken sen suorittamiseen tarvittavan: sovelluskoodin, suoritusympäristön, järjestelmätyökalut ja -kirjastot sekä asetukset. Säiliöityihin ohjelmiin voidaan sijoittaa sovelluksia ympäristöissä, Linux и Windows, ja ne toimivat aina samalla tavalla infrastruktuurista riippumatta.
Tämä tarkoittaa, että säiliöitä voidaan ajaa millä tahansa tietokoneella, myös tuotantopalvelimilla, ja missä tahansa ympäristössä niiden sisällä olevat sovellukset toimivat samalla tavalla.
Tutustuaksesi säilöjen ominaisuuksiin ja verrataksesi niitä muihin sovellusten ajamiseen, katsotaanpa esimerkkiä React-sovelluksen palvelemisesta virtuaalikoneen ja säilön avulla.
▍React-sovelluksen staattisten tiedostojen palveleminen virtuaalikoneen avulla
Kun yritetään järjestää staattisten tiedostojen ylläpito virtuaalikoneiden avulla, kohtaamme seuraavat haitat:
- Resurssien tehoton käyttö, koska jokainen virtuaalikone on täydellinen käyttöjärjestelmä.
- Alustariippuvuus. Se, mikä toimii joissakin paikallisissa tietokoneissa, ei välttämättä toimi tuotantopalvelimella.
- Virtuaalikoneratkaisun hidas ja resurssiintensiivinen skaalaus.

Nginx-verkkopalvelin, joka palvelee staattisia tiedostoja virtuaalikoneessa
Jos säiliöitä käytetään samanlaisen ongelman ratkaisemiseen, virtuaalikoneisiin verrattuna voidaan havaita seuraavat vahvuudet:
- Tehokas resurssien käyttö: työskentele käyttöjärjestelmän kanssa Dockerin avulla.
- Alustan riippumattomuus. Säilö, jota kehittäjä voi käyttää omalla tietokoneella, toimii missä tahansa.
- Kevyt käyttöönotto kuvakerrosten avulla.

Nginx-verkkopalvelin, joka palvelee staattisia tiedostoja, jotka ovat käynnissä säilössä
Olemme vertailleet virtuaalikoneita ja säiliöitä vain muutamassa kohdassa, mutta sekin riittää saamaan käsityksen konttien vahvuuksista. Löydät lisätietoja Docker-konteista.
▍Säilökuvan rakentaminen React-sovellukselle
Docker-säilön perusrakennuspalikka on tiedosto Dockerfile. Tämän tiedoston alkuun tallennetaan säilön peruskuva, jonka jälkeen mukana on ohjesarja, joka kertoo kuinka luodaan sovelluksen tarpeita vastaava säilö.
Ennen kuin alamme työskennellä tiedoston kanssa Dockerfile, muista mitä teimme valmistellaksemme React-sovelluksen tiedostot ladattavaksi Nginx-palvelimelle:
- React-sovelluspaketin rakentaminen (
npm run build). - Nginx-palvelimen käynnistäminen.
- Hakemiston sisällön kopioiminen
buildprojektikansiostasa-frontendpalvelinkansioonnginx/html.
Alla näet yhtäläisyydet säilön luomisen ja yllä olevien paikallisella tietokoneella suoritettujen toimien välillä.
▍ Valmistellaan Docker-tiedosto SA-Frontend-sovellukselle
Mukana tulevat ohjeet Dockerfile soveltamista varten SA-Frontend, koostuu vain kahdesta komennosta. Tosiasia on, että Nginx-kehitystiimi on valmistellut perustiedot Nginxille, jota käytämme imagomme rakentamiseen. Tässä on kaksi vaihetta, jotka meidän on kuvattava:
- Sinun täytyy tehdä Nginx-kuvasta kuvan perusta.
- Kansion sisältö
sa-frontend/buildtäytyy kopioida kuvakansioonnginx/html.
Jos siirrymme tästä kuvauksesta tiedostoon Dockerfile, niin se näyttää tältä:
FROM nginx
COPY build /usr/share/nginx/html Kuten näet, kaikki täällä on hyvin yksinkertaista, kun taas tiedoston sisältö osoittautuu jopa melko luettavaksi ja ymmärrettäväksi. Tämä tiedosto käskee järjestelmän ottamaan kuvan nginx kaikella, mitä sillä jo on, ja kopioi hakemiston sisältö build hakemistoon nginx/html.
Täällä sinulla voi olla kysymys siitä, kuinka tiedän, mihin tarkalleen kopioin tiedostot kansiosta buildeli mistä polku tuli /usr/share/nginx/html. Itse asiassa tässäkään ei ole mitään monimutkaista. Tosiasia on, että asiaankuuluvat tiedot löytyvät osoitteesta kuva.
▍Kuvan kokoaminen ja lataaminen arkistoon
Ennen kuin voimme työskennellä valmiin kuvan kanssa, meidän on lähetettävä se kuvavarastoon. Käytämme tähän ilmaista pilvipohjaista kuvanhallintaalustaa Docker Hub. Tässä työvaiheessa sinun on tehtävä seuraavat:
- perustaa .
- Rekisteröidy Docker Hub -sivustolla.
- Kirjaudu tilillesi suorittamalla seuraava komento päätteessä:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Nyt sinun on siirryttävä hakemistoon päätelaitteen avulla sa-frontend ja suorita siellä seuraava komento:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . Tässä ja alla samanlaisissa komennoissa $DOCKER_USER_ID tulee korvata käyttäjänimelläsi Docker Hubissa. Esimerkiksi tämä komennon osa voi näyttää tältä: rinormaloku/sentiment-analysis-frontend.
Tässä tapauksessa tätä komentoa voidaan lyhentää poistamalla siitä -f Dockerfile, koska kansiossa, jossa suoritamme tämän komennon, on jo tämä tiedosto.
Jotta voimme lähettää valmiin kuvan arkistoon, tarvitsemme seuraavan komennon:
docker push $DOCKER_USER_ID/sentiment-analysis-frontendKun se on valmis, tarkista Docker Hubin arkistoluettelosi nähdäksesi, onko kuva onnistuneesti siirretty pilvitallennustilaan.
▍ Säiliön käynnistäminen
Nyt kuka tahansa voi ladata ja käyttää nimellä tunnetun kuvan $DOCKER_USER_ID/sentiment-analysis-frontend. Jotta voit tehdä tämän, sinun on suoritettava seuraava komentosarja:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend Nyt kontti on käynnissä, ja voimme jatkaa työtä luomalla muita tarvitsemiamme kuvia. Mutta ennen kuin jatkamme, ymmärrämme suunnittelun 80:80, joka löytyy kuvan suorittamiskomennosta ja saattaa vaikuttaa hämmentävältä.
- Ensimmäinen numero
80on isännän (eli paikallisen tietokoneen) porttinumero. - Toinen numero
80on kontin satama, johon pyyntö tulee ohjata.
Harkitse seuraavaa kuvaa.

Portin uudelleenohjaus
Järjestelmä välittää pyynnöt portista <hostPort> satamaan <containerPort>. Eli pääsy satamaan 80 tietokone ohjataan porttiin 80 kontti.
Satamasta lähtien 80 avattu paikallisella tietokoneella, voit käyttää sovellusta tältä tietokoneelta osoitteessa localhost:80. Jos järjestelmäsi ei tue Dockeria, voit ajaa sovelluksen Docker-virtuaalikoneessa, jonka osoite näyttää tältä <docker-machine ip>:80. Voit selvittää Docker-virtuaalikoneen IP-osoitteen käyttämällä komentoa docker-machine ip.
Tässä vaiheessa, kun käyttöliittymän sovellussäilö on käynnistetty onnistuneesti, sinun pitäisi pystyä avaamaan sen sivu selaimessa.
▍.dockerignore-tiedosto
Sovelluskuvan rakentaminen SA-Frontend, voimme huomata, että tämä prosessi on erittäin hidas. Tämä johtuu siitä, että kuvan koontikonteksti on lähetettävä Docker-daemonille. Koontikontekstia edustava hakemisto annetaan komennon viimeisenä argumenttina docker build. Meidän tapauksessamme tämän komennon lopussa on piste. Tämä johtaa seuraavan rakenteen sisällyttämiseen kokoonpanokontekstiin:
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src Mutta kaikista täällä olevista kansioista tarvitsemme vain kansion build. Kaiken muun lataaminen on ajanhukkaa. Voit nopeuttaa rakentamista kertomalla Dockerille, mitkä hakemistot jätetään huomiotta. Tätä varten tarvitsemme tiedoston .dockerignore. Sinä, jos olet perehtynyt tiedostoon .gitignore, tämän tiedoston rakenne näyttää todennäköisesti tutulta. Se luettelee hakemistoja, jotka kuvanrakennusjärjestelmä voi jättää huomiotta. Meidän tapauksessamme tämän tiedoston sisältö näyttää tältä:
node_modules
src
public tiedosto .dockerignore on oltava samassa kansiossa kuin tiedosto Dockerfile. Nyt kuvan kokoaminen kestää muutaman sekunnin.
Käsitellään nyt Java-sovelluksen kuvaa.
▍Säilökuvan rakentaminen Java-sovellukselle
Tiedät mitä, ja olet jo oppinut kaiken, mitä tarvitset säilökuvien luomiseen. Tästä syystä tämä osa tulee olemaan hyvin lyhyt.
Avaa tiedosto Dockerfile, joka sijaitsee projektikansiossa sa-webapp. Jos luet tämän tiedoston tekstin, kohtaat siinä vain kaksi uutta rakennetta, jotka alkavat avainsanoilla ENV и EXPOSE:
ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080 Avainsana ENV mahdollistaa ympäristömuuttujien ilmoittamisen Docker-säiliöiden sisällä. Erityisesti meidän tapauksessamme sen avulla voit asettaa URL-osoitteen, jolla pääset tekstianalyysiä suorittavan sovelluksen sovellusliittymään.
Avainsana EXPOSE antaa sinun käskeä Dockeria avaamaan portin. Aiomme käyttää tätä porttia työskennellessämme sovelluksen kanssa. Tästä näet sen Dockerfile soveltamista varten SA-Frontend sellaista käskyä ei ole. Tämä on vain dokumentointia varten, toisin sanoen tämä rakenne on lukijalle Dockerfile.
Kuvan rakentaminen ja siirtäminen arkistoon näyttää täsmälleen samalta kuin edellinen esimerkki. Jos et ole vielä kovin varma kyvyistäsi, vastaavat komennot löytyvät tiedostosta README.md kansiossa sa-webapp.
▍Säilökuvan rakentaminen Python-sovellukselle
Jos katsot tiedoston sisältöä Dockerfile kansiossa sa-logicet löydä sieltä mitään uutta. Komennot kuvan rakentamiseen ja arkistoon työntämiseen pitäisi olla sinulle jo tuttuja, mutta kuten muissakin sovelluksissamme, ne löytyvät tiedostosta README.md kansiossa sa-logic.
▍Testataan konttisovelluksia
Voitko luottaa johonkin, jota et ole testannut? En myöskään voi. Testataan konttejamme.
- Aloitetaan sovellussäilö
sa-logicja määritä se kuuntelemaan portissa5050:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic - Aloitetaan sovellussäilö
sa-webappja määritä se kuuntelemaan portissa8080. Lisäksi meidän on asetettava portti, jolla Python-sovellus kuuntelee Java-sovelluksen pyyntöjä määrittämällä ympäristömuuttuja uudelleenSA_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
Lisätietoja säilön tai Docker VM:n IP-osoitteen selvittämisestä on tiedostossa .
Aloitetaan sovellussäilö sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend Nyt kaikki on valmis navigoimaan selaimessa osoitteeseen localhost:80 ja testaa sovellusta.
Huomaa, että jos vaihdat portin sa-webapp, tai jos käytät Docker VM:ää, sinun on muokattava tiedostoa App.js kansiosta sa-frontendmuuttamalla menetelmän IP-osoitetta tai portin numeroa analyzeSentence()korvaamalla nykyiset tiedot vanhentuneiden tietojen sijaan. Sen jälkeen sinun on koottava kuva uudelleen ja käytettävä sitä.
Tältä sovelluskaaviomme näyttää nyt.

Mikropalvelut toimivat konteissa
Yhteenveto: miksi tarvitsemme Kubernetes-klusterin?
Tarkistimme juuri tiedostot Dockerfile, puhui kuvien rakentamisesta ja siirtämisestä Docker-arkistoon. Lisäksi opimme nopeuttamaan kuvien kokoamista tiedoston avulla .dockerignore. Tämän seurauksena mikropalvelumme toimivat nyt Docker-konteissa. Täällä sinulla voi olla täysin perusteltu kysymys siitä, miksi tarvitsemme Kubernetesia. Vastaus tähän kysymykseen on omistettu tämän materiaalin toiselle osalle. Mieti sillä välin seuraavaa kysymystä:
Oletetaan, että tekstianalyysiverkkosovelluksestamme on tullut suosittu maailmanlaajuisesti. Hänelle tulee miljoonia pyyntöjä joka minuutti. Tämä tarkoittaa, että mikropalvelut sa-webapp и sa-logic tulee olemaan valtavan stressin alla. Kuinka skaalata kontit, jotka tarjoavat mikropalveluita?
Lähde: will.com
