Docker Compose za vsebino aplikacije MEAN Stack



Docker Compose je orodje za definiranje in zagon več vsebnikov za zagon zapletenih aplikacij v Dockerju, na primer za kontejniranje aplikacije MEAN.

V prejšnjih blogih o Dockerju bi prebrali, kaj so Dockerjeve slike, Dockerjevi vsebniki in kaj so zanje potrebni. Če o njih še niste brali, vas prosim, da preberete , preden nadaljujete s tem blogom o Docker Compose.

Po raziskovanju možnosti, ki jih prinaša Docker, je vsekakor zelo zanimivo izvedeti več. Kajne? No, vsaj bil sem, ko sem naletel na izziv.





Uvod v Docker Compose

Priprava ene same storitvene aplikacije je bila zame enostavna. Ko pa sem moral več storitev shraniti v ločene zabojnike, sem naletel na zaporo ceste. Moja zahteva je bila, da shranim in gostim aplikacijo sklada MEAN.

Ja, prav ste prebrali. Aplikacija s polnim skladom. Sprva sem mislil, da to ni mogoče. Ko pa sem slišal za Docker Compose, sem vedel, da bodo vsi moji problemi rešeni.



Docker Compose lahko uporabite za ustvarjanje ločenih vsebnikov (in njihovo gostovanje) za vsak sklad v aplikaciji sklada MEAN. MEAN je kratica za MongoDB Express Angular & NodeJs. Na isto temo je tudi predstavitev, ki jo bom prikazal v tem blogu.

Z uporabo Docker Compose lahko vsako od teh tehnologij gostujemo v ločenih vsebnikih istega gostitelja in jim omogočimo medsebojno komunikacijo. Vsak vsebnik bo imel vrata za komunikacijo z drugimi vsebniki.

Docker Compose bo vzdrževal komunikacijo in čas delovanja teh zabojnikov.



Lahko se vprašate, kako nastaviti celotno infrastrukturo? No, naj vam dam podrobnejšo razlago.

Dockerfile

Podobno kot vrtenje katerega koli vsebnika z enim programom s pisanjem datoteke docker, bomo morali za izdelavo vsake aplikacije z enim vsebnikom napisati ločeno datoteko docker. Poleg tega bomo morali napisati tudi Dockerjevo datoteko za sestavljanje, ki bo opravila dejansko delo. Docker Compose File bo izvedel različne datoteke docker, da bo ustvaril različne vsebnike in jim omogočil medsebojno interakcijo.

V našem primeru imamo aplikacijo celotnega sklada, ki jo sestavljajo MongoDB, ExpressJS, Angular in NodeJS. MongoDB skrbi za bazo podatkov na zadnji strani, NodeJS in ExpressJS sta za upodabljanje na strani strežnika, Angular pa za čelno stran.

MEAN Stack App - Docker Compose - Edureka

Ker obstajajo trije sestavni deli, moramo za vsako komponento zavrteti posode. Zabojnike moramo zavrteti na naslednji način:

  1. Posoda 1 - kotna
  2. Vsebnik 2 - NodeJS in ExpressJS
  3. Vsebnik 3 - MongoDB

Ustvarjanje zabojnikov Docker

Kot prvi korak za dockerizacijo povprečne aplikacije zapišimo datoteko docker za izdelavo vsake komponente, začenši s posodo Angular. Ta datoteka dockerja mora biti prisotna znotraj imenika projekta skupaj z datoteko ‘package.json’. 'Packa.json' vsebuje podrobnosti o tem, katero različico odvisnosti mora uporabiti 'NPM' za gradnjo kotne aplikacije.

1. Dockerfile za sprednji del

OD vozlišča: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app IZPOSTAVLJA 4200 CMD ['npm', 'start']

Kot vedno je naš prvi ukaz povleči osnovno sliko, mi pa vlečemo osnovno sliko 'vozlišče: 6'.

Naslednja dva ukaza se nanašata na ustvarjanje novega imenika ‘/ usr / src / app’ znotraj Dockerjevega vsebnika za shranjevanje kotnih kod in pretvorbo tega v delovni imenik znotraj vsebnika.

Nato kopiramo datoteko ‘package.json’ iz našega projektnega imenika v notranjost vsebnika.

Nato zaženemo ukaz 'npm cache clean', ki očisti predpomnilnik npm.

Po tem zaženemo ukaz ‘npm install’, ki začne nalagati kotlovske plošče, potrebne za gostovanje aplikacije Angular. Začne se prenos kotlovskih plošč na podlagi različic odvisnosti, določenih v 'package.json'.

Naslednji zagon ukaza 'RUN' je kopiranje vseh kod, map, ki so prisotne iz imenika projekta, v notranjost vsebnika.

Zgornji ukaz prosi vsebnik, da izpostavi številko vrat 4200 za komunikacijo z zalednim strežnikom za pošiljanje zahtev uporabnikov, ki dostopajo do odjemalca prek spletnega uporabniškega vmesnika.

Končno je zadnji ukaz: 'RUN' ukaz za zagon 'npm'. S tem se začne izvajati kode za izdelavo naše aplikacije Angular.

Aplikacija Angular je zdaj pripravljena, vendar je ne bo pravilno gostila zaradi odvisnosti od zalednega strežnika in baze podatkov. Torej pojdimo naprej in napišemo datoteko dockerja za kontejnerje zalednega strežnika.

kaj je tolmač v javi

2. Dockerfile za zadnji del

Tudi ta datoteka docker bo prisotna v imeniku projekta. Ta imenik bo vseboval tudi datoteko 'package.json' za definiranje odvisnosti strežnika Express in drugih zahtev NodeJS. Najpomembneje pa je, da vsebuje projektno kodo za podporo zalednega strežnika.

OD vozlišča: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app IZPOSTAVLJA 3000 CMD ['npm', 'start']

Kot lahko vidite, je med obema datotekama dock veliko podobnosti. Uporabljamo isto 'vozlišče: 6' kot osnovno plast slike, v vsebniku ustvarimo nov imenik, postane delovni imenik in med drugim zaženemo ukaz 'npm install'. Edina razlika pa je številka vrat, ki je izpostavljena komunikaciji. V tem primeru je opredeljena številka vrat 3000. Tu bo strežnik gostoval in bo iskal zahteve odjemalca.

3. Baza podatkov

Morda se sprašujete, zakaj v naslovu nisem omenil „dockerfile za bazo podatkov“. Razlog je v tem, da dejansko nimamo potrebe po prilagajanju. Takoj lahko potegnemo osnovno sliko ‘MongoDB’ za shranjevanje naših podatkov in samo izpostavimo številko vrat, na katerih je do njih mogoče dostopati.

Zdaj bi se vam postavilo vprašanje, kje naj to storim? No, to lahko storimo v datoteki Docker Compose.

Docker Sestavi datoteko

Docker Compose File je datoteka YAML, ki vsebuje podrobnosti o storitvah, omrežjih in količinah za nastavitev aplikacije Docker.

Zaženite spodnji ukaz, da poiščete različico vašega Docker Engine.

docker -v

Z izvajanjem ukaza se vrne različica, ki se izvaja na vašem gostitelju. Na podlagi različice Docker Engine na vašem gostitelju prenesite ustrezno različico Docker Compose. Lahko poiščete primerno različico za prenos iz Dockerjeva uradna dokumentacija .

Ker uporabljam Docker Engine različice 17.05.0-ce, sem uporabil Docker Compose različico 3.

Namestite Docker Compose

Če želite prenesti sestavljanje, zaženite spodnji nabor ukazov.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- sestavi sudo chmod + x / usr / local / bin / docker-compose

Upoštevajte, da se bo številka različice v ukazu spremenila glede na različico Docker Engine, ki jo uporabljate.

Spodaj so ukazi, ki so del moje datoteke Docker Compose.

različica: '3.0' # navedite različico docker-compose # Določite storitve / vsebnike, ki se bodo izvajale storitve: angular: # ime prve gradnje storitve: angular-app # navedite imenik vrat Dockerfile: - '4200: 4200' # navedite preslikavo vrat express: # ime druge gradnje storitve: express-server # navedite imenik vrat Dockerfile: - '3000: 3000' # navedite povezave preslikave vrat: - baza podatkov # povežite to storitev z bazo podatkov baze podatkov: # ime tretje storitvene slike: mongo # navedite sliko za izdelavo vsebnika iz vrat: - '27017: 27017' # navedite posredovanje vrat

Prepričan sem, da vam ukazi v zgornji datoteki nimajo smisla. Torej, rešimo to težavo.

V prvi vrstici kode sem določil različico Docker Compose, ki jo uporabljam. To je zelo pomemben korak, če želite, da Compose pravilno deluje brez napake. Prenesite različico Docker Compose v skladu z različico vašega Docker Engine.

Po tem sem z uporabo ključne besede 'storitve' definiral tri vsebnike. Te storitve se nanašajo na tri komponente mojega sklada, sprednji del, zadnji del in bazo podatkov. V tem primeru bo ime mojih zabojnikov ime mojih storitev, tj. „Angular“, „express“ in „database“.

Ključna beseda 'build' se uporablja za označevanje, da je datoteka dockerja za predenje vsebnika v tem imeniku. Počakaj, kako si zmeden?

Preprosto je. Pot je treba navesti za 'build:'. V našem primeru sta 'angular-app' in 'express-server' poti do dveh imenikov, do katerih lahko pridete iz imenika, v katerem je datoteka Docker Compose File. Za naš vsebnik baze podatkov sem preprosto rekel, da namesto poti do dockfile uporabite osnovno 'image: mongo'.

java class loader intervju vprašanja

Za vsako od teh storitev sem določil tudi številke vrat, s katerimi lahko prejemam / pošiljam zahteve iz drugih zabojnikov (storitev). 4200 v primeru kotnih, 3000 v primeru express in 27017 v primeru mongo.

Poleg tega ima ekspresni vsebnik povezavo: do vsebnika baze podatkov, kar pomeni, da bodo vsi podatki, prejeti na strani strežnika, poslani v bazo podatkov, kjer bodo shranjeni.

Končno smo pri zaključku ustanavljanja sestavljanja. Če želite zagnati Docker Compose in tri vsebnike zavrteti s tremi storitvami, moramo preprosto izvesti spodnja dva ukaza iz imenika, v katerem je datoteka Docker Compose (datoteka YAML):

docker-compose zgraditi docker-compose up

Ukaz 'docker-compose build' se uporablja za gradnjo / obnovo storitev, medtem ko se ukaz 'docker-compose up' uporablja za ustvarjanje / zagon vsebnikov. Kar daj! Preizkusite sami.

Spodaj so posnetki zaslona Dockerjevih slik, ki se gradijo in nato izvajajo. Opazite, da se gradi kotna slika in jo nato z imenom označi kot »kotna: najnovejša«.

Slika za Express je zgrajena z imenom in oznako kot »express: latest«.

Zdaj, ko je slika zgrajena, jo poskusimo zagnati in tako v procesu zavrteti posodo. Spodaj je ta posnetek zaslona.

Spodaj je posnetek zaslona, ​​na katerem piše 'webpack: compiled успешно', kar pomeni, da Docker uspešno kontejnerira vse tri storitve.

Zdaj, ko gostijo vsebnike, lahko vidite storitve, ki so aktivne v njihovih vratih. Pojdite v spletni brskalnik in vnesite naslednje številke vrat za interakcijo z GUI aplikacije MEAN.

localhost: 4200 - Kotna aplikacija (čelna stran)
localhost: 3000 - Express Server & NodeJS (zaledni / strežniški)
localhost: 27017 - MongoDB (zbirka podatkov)

Ste že navdušeni? Počakajte, ker Docker še ni končal! Ukaz »docker-compose scale =’ x '«lahko uporabimo za enostavno povečanje / zmanjšanje števila postavitev. Z drugimi besedami, za storitev lahko ustvarimo toliko zabojnikov. Spodaj je celoten ukaz za prilagajanje določene storitve na vsebnike „5“:

lestvica docker-compose = 5

Tako hitro razširjanje storitev, njihovo pakiranje in zapiranje na tako stroškovno učinkovit način je tisto, zaradi česar je Docker eno najboljših orodij za uvajanje in moj osebni favorit.

Če še vedno dvomite o tem konceptu, si lahko ogledate spodnji video, kjer sem isti koncept razložil s praktičnimi praktičnimi navodili, kako nastaviti Docker Compose.

Docker Compose | Vsebnost aplikacije MEAN Stack | Vadnica za DevOps

Zdaj, ko ste izvedeli za Docker, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu. Ta tečaj za certificiranje Edureka Docker pomaga učencem pridobiti strokovno znanje pri izvajanju Dockerja in njegovem obvladovanju.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje in se vam bomo javili.