Docker napísal pre kontajnerizáciu aplikácie MEAN Stack



Docker Compose je nástroj na definovanie a spustenie viacerých kontajnerov na spustenie zložitých aplikácií v Dockri, napríklad na kontajnerovanie aplikácie MEAN.

V predchádzajúcich blogoch o Dockere ste sa dočítali o tom, čo sú obrázky Dockeru, Dockerove kontajnery a čo je potrebné. Ak ste o nich nečítali, žiadam vás, aby ste si ich prečítali , predtým, ako budete pokračovať v tomto blogu o Docker Compose.

Po preskúmaní možností, ktoré prináša Docker, je určite veľmi vzrušujúce dozvedieť sa viac. Nie? Prinajmenšom som bol, keď som narazil na výzvu.





Úvod do Docker Compose

Kontajnerovanie jednej aplikácie služby bolo pre mňa ľahké. Ale keď som musel kontajnerizovať viac služieb v samostatných kontajneroch, narazil som na prekážku. Mojou požiadavkou bolo kontajnerizovať a hostovať aplikáciu MEAN stack.

Áno, čítate to dobre. Aplikácia s úplným zásobníkom. Spočiatku som si myslel, že to nie je možné. Ale keď som sa dopočul o Docker Compose, vedel som, že všetky moje problémy budú vyriešené.



Docker Compose možno použiť na vytvorenie samostatných kontajnerov (a ich hosťovanie) pre každý zo zásobníkov v aplikácii MEAN stack. MEAN je skratka pre MongoDB Express Angular & NodeJs. Demo, ktoré ukážem v tomto blogu, je tiež na rovnakú tému.

Použitím Docker Compose môžeme každú z týchto technológií hostiť v samostatných kontajneroch na rovnakom hostiteľovi a prinútiť ich, aby navzájom komunikovali. Každý kontajner vystaví port pre komunikáciu s ostatnými kontajnermi.

Komunikáciu a dobu prevádzky týchto kontajnerov bude udržiavať program Docker Compose.



Takže sa môžete pýtať, ako nastaviť celú túto infraštruktúru? Takže, dovoľte mi podrobnejšie vysvetlenie.

Dockerfile

Podobne ako pri roztáčaní ľubovoľného kontajnera s jednou aplikáciou napísaním súboru dockerfile, budeme musieť napísať samostatný súbor dockerfile na zostavenie každej z aplikácií s jedným kontajnerom. Ďalej budeme musieť napísať aj Docker Compose File, ktorý urobí skutočnú prácu. Docker Compose File vykoná rôzne dockerfiles, aby vytvoril rôzne kontajnery a nechal ich vzájomne interagovať.

V našom prípade máme aplikáciu s úplným zásobníkom, ktorá obsahuje MongoDB, ExpressJS, Angular a NodeJS. MongoDB sa stará o back-endovú databázu, NodeJS a ExpressJS sú určené na vykreslenie na strane servera a Angular sú určené pre front-end.

MEAN Stack App - Docker Compose - Edureka

Pretože existujú tri komponenty, musíme pre každú z nich roztáčať nádoby. Nádoby musíme točiť nasledujúcim spôsobom:

  1. Kontajner 1 - hranatý
  2. Kontajner 2 - NodeJS a ExpressJS
  3. Kontajner 3 - MongoDB

Vytváranie kontajnerov Docker

Ako prvý krok k ukotveniu strednej aplikácie si napíšeme dockerfile na zostavenie každej z komponentov, počnúc kontajnerom Angular. Tento dockerfile bude musieť byť prítomný v adresári projektu spolu so súborom ‘package.json’. Súbor „package.json“ obsahuje podrobnosti o tom, ktorú verziu závislostí musí program „NPM“ použiť na zostavenie hranatej aplikácie.

1. Súbor Docker pre klientske rozhranie

FROM node: 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 EXPOSE 4200 CMD ['npm', 'start']

Ako vždy, naším prvým príkazom je vytiahnuť základný obrázok a my natiahneme základný obrázok „node: 6“.

Nasledujúce dva príkazy sa týkajú vytvorenia nového adresára „/ usr / src / app“ vo vnútri kontajnera Docker na ukladanie uhlových kódov a na vytvorenie tohto pracovného priečinka vo vnútri kontajnera.

Potom skopírujeme súbor ‘package.json’ z nášho adresára projektu do vnútra kontajnera.

Potom spustíme príkaz „npm cache clean“, ktorý vyčistí npm cache.

Potom spustíme príkaz ‘npm install’, ktorý začne sťahovať kotlové dosky potrebné na hosťovanie aplikácie Angular. Začína sa sťahovať kotlové dosky na základe verzií závislostí uvedených v balíku „package.json“.

Ďalším spustením príkazu „RUN“ je skopírovať všetky kódy, priečinky z adresára projektu do vnútra kontajnera.

Vyššie uvedený príkaz požiada kontajner, aby vystavil číslo portu 4200 na komunikáciu so serverom typu back-end na odosielanie požiadaviek od používateľov, ktorí majú prístup k klientovi typu front-end cez webové používateľské rozhranie.

Posledný príkaz je nakoniec príkaz „RUN“ na spustenie „npm“. To začne vykonávať kódy na zostavenie našej aplikácie Angular.

Aplikácia Angular je teraz pripravená, ale nebude hostená správne kvôli svojej závislosti na serveri typu back-end a databáze. Poďme teda ďalej a napíšeme súbor ukotvenia pre kontajnerizáciu servera typu back-end.

2. Dockerfile pre back-end

Aj tento dockerfile bude v adresári projektu. Tento adresár bude obsahovať aj súbor „package.json“ na definovanie závislostí servera Express a ďalších požiadaviek NodeJS. Ale čo je najdôležitejšie, obsahuje kód projektu na podporu servera typu back-end.

FROM node: 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 EXPOSE 3000 CMD ['npm', 'start']

Ako vidíte, medzi týmito dvoma dokovacími súbormi je veľa podobností. Používame rovnaký „node: 6“ ako vrstvu základného obrázka, vo vnútri kontajnera vytvoríme nový adresár, urobíme z neho pracovný adresár a okrem iného spustíme príkaz „npm install“. Jediným rozdielom je však číslo portu vystavené komunikácii. V tomto prípade je definované číslo portu 3000. To je miesto, kde bude hostený server a bude vyhľadávať požiadavky od klienta.

3. Databáza

Mohlo by vás zaujímať, prečo som v nadpise nespomenul ‚dockerfile For Database‘. Dôvod je ten, že v skutočnosti nepotrebujeme nijaké prispôsobovanie. Môžeme rovno vytiahnuť základný obrázok „MongoDB“ na ukladanie našich údajov a jednoducho vystaviť číslo portu, na ktorom je k nemu prístup.

Teraz ti bude na mysli otázka, kde by som to urobil? To môžeme urobiť v súbore Docker Compose.

Docker Compose File

Docker Compose File je súbor YAML, ktorý obsahuje podrobnosti o službách, sieťach a zväzkoch pre nastavenie aplikácie Docker.

Spustením nasledujúceho príkazu vyhľadajte verziu vášho Docker Engine.

ukotviteľný panel -v

Vykonaním príkazu sa vráti verzia bežiaca na vašom hostiteľovi. Na základe verzie Docker Engine u vášho hostiteľa si stiahnite príslušnú verziu Docker Compose. Môžete hľadať príslušnú verziu na stiahnutie z Dockerova oficiálna dokumentácia .

Pretože používam Docker Engine verzie 17.05.0-ce, použil som Docker Compose verziu 3.

Nainštalujte Docker Compose

Ak chcete stiahnuť Compose, spustite nasledujúcu sadu príkazov.

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

Upozorňujeme, že číslo verzie v príkaze sa zmení na základe verzie Docker Engine, ktorú používate.

Ďalej sú uvedené príkazy, ktoré sú súčasťou môjho súboru Docker Compose File.

verzia: „3.0“ # uveďte docker-compose verziu # definujte služby / kontajnery, ktoré sa majú spustiť služby: angular: # názov prvého zostavenia služby: angular-app # uveďte adresár portov súboru Dockerfile: - „4200: 4200“ # uveďte expresné mapovanie portov: # názov zostavenia druhej služby: expresný server # uveďte adresár portov súboru Docker: - '3000: 3000' # uveďte odkazy mapujúce porty: - databáza # prepojte túto službu s databázou databázovej služby: # názov tretieho obrazu služby: mongo # zadajte obrázok na vytvorenie kontajnera z portov: - '27017: 27017' # uveďte presmerovanie portov

Som si istý, že príkazy vo vyššie uvedenom súbore vám nedávajú zmysel. Poďme teda na vyriešenie tohto problému.

V prvom riadku kódu som definoval verziu Docker Compose, ktorú používam. Toto je veľmi dôležitý krok, ak chcete, aby program Compose správne fungoval bez akejkoľvek chyby. Nezabudnite si stiahnuť verziu Docker Compose podľa verzie vášho Docker Engine.

java system.exit (0)

Potom som definoval tri kontajnery pomocou kľúčového slova „services“. Tieto služby sa vzťahujú na tri komponenty môjho zásobníka, front-end, back-end a databáza. V tomto prípade bude teda názov mojich kontajnerov názov mojich služieb, teda ‘uhlové’, ‘expresné‘ a ‚databázové‘.

Kľúčové slovo „zostaviť“ sa používa na označenie toho, že v tomto adresári je ukotvený súbor na pretočenie tohto kontajnera. Počkaj, si zmätený ako?

Je to jednoduché. Cesta musí byť špecifikovaná po „build:“. V našom prípade sú výrazy „angular-app“ a „express-server“ cesty k dvom adresárom, do ktorých sa dá dostať z adresára, kde je súbor Docker Compose File. Pre náš databázový kontajner som jednoducho povedal, že namiesto cesty k dockerfile použijem základný ‘image: mongo’.

Pre každú z týchto služieb som tiež uviedol čísla portov, ktoré možno použiť na príjem / odosielanie požiadaviek z iných kontajnerov (služieb). 4200 v prípade uhla, 3 000 v prípade expresie a 27017 v prípade monga.

Expresný kontajner má navyše „odkaz:“ na databázový kontajner, čo naznačuje, že akékoľvek údaje prijaté na strane servera sa odošlú do databázy, kde sa uložia.

Teraz sme konečne na konci a založili Compose. Ak chcete spustiť Docker Compose a roztočiť tri kontajnery s tromi službami, musíme jednoducho vykonať dva nižšie uvedené príkazy z adresára, kde je prítomný Docker Compose File (súbor YAML):

docker-compose zostaviť docker-compose up

Príkaz „docker-compose build“ sa používa na zostavenie / prebudovanie služieb, zatiaľ čo príkaz „docker-compose up“ sa používa na vytvorenie / spustenie kontajnerov. Do toho! Vyskúšajte to sami.

Nižšie sú uvedené screenshoty vytvorených a potom vykonaných obrázkov Dockeru. Môžete si všimnúť, že sa vytvára úhlový obrázok, ktorý je potom označený názvom „angular: latest“.

Obrázok pre Express je tiež vytvorený s menom a značkou ako „express: latest“.

Teraz, keď je obrázok zostavený, skúsme ho spustiť a teda v procese točiť kontajner. Nižšie je uvedená snímka obrazovky.

Nižšie je uvedený obrázok, ktorý hovorí „webpack: úspešne kompilovaný“, čo znamená, že Docker tieto tri služby úspešne kontajneroval.

Teraz, keď sú kontajnery hostené, môžete vidieť služby aktívne na ich príslušných portoch. Ak chcete pracovať s grafickým používateľským rozhraním aplikácie MEAN, zadajte do webového prehľadávača nasledujúce čísla portov.

localhost: 4200 - Uhlová aplikácia (front-end)
localhost: 3000 - Express Server & NodeJS (back-end / server-side)
localhost: 27017 - MongoDB (databáza)

Dojem ešte? Počkajte, pretože Docker ešte nie je hotový! Na jednoduché zväčšenie / zmenšenie počtu nasadení môžeme použiť príkaz „docker-compose scale =‘ x '“. Inými slovami, môžeme vytvoriť taký počet kontajnerov pre službu. Ďalej je uvedený úplný príkaz na zväčšenie konkrétnej služby na 5 kontajnerov:

docker-compose scale = 5

Vďaka takémuto ľahkému rozšíreniu služieb, ich zabaleniu a kontajnerovaniu takým nákladovo efektívnym spôsobom je Docker jedným z najlepších nástrojov nasadenia a mojím obľúbeným.

Ak stále máte pochybnosti o tomto koncepte, môžete si pozrieť video nižšie, kde som vysvetlil ten istý koncept s praktickým príkladom nastavenia Docker Compose.

Docker Compose | Kontajnerovanie aplikácie MEAN Stack Výukový program pre DevOps

Teraz, keď ste sa dozvedeli o Dockeri, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Tento certifikačný vzdelávací kurz Edureka Docker pomáha študentom získať odborné znalosti pri implementácii Dockeru a jeho osvojení.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.