Docker Compose For Containerizing A MEAN Stack Application

Docker Compose je nástroj pro definování a spuštění více kontejnerů pro spouštění složitých aplikací v Dockeru, například pro kontejnerizaci MEAN aplikace.

V předchozích blogech o Dockeru byste si přečetli, co jsou obrázky Dockeru, kontejnery Dockeru a co je potřeba. Pokud jste o nich nečetli, žádám vás, abyste si je přečetli , než budete pokračovat v tomto blogu o Docker Compose.

Po prozkoumání možností, které přináší Docker, je určitě velmi vzrušující dozvědět se více. Že ano? Přinejmenším jsem byl, když jsem narazil na výzvu.





Úvod do Docker Compose

Kontejnerování jedné aplikace služby bylo pro mě snadné. Ale když jsem musel kontejnerizovat více služeb v samostatných kontejnerech, narazil jsem na zátaras. Mým požadavkem bylo kontejnerizovat a hostovat aplikaci MEAN stack.

Jo, čtete to správně. Plná aplikace zásobníku. Zpočátku jsem si myslel, že to není možné. Ale poté, co jsem slyšel o Docker Compose, věděl jsem, že všechny moje problémy budou vyřešeny.



Docker Compose lze použít k vytvoření samostatných kontejnerů (a jejich hostování) pro každý ze zásobníků v aplikaci MEAN stack. MEAN je zkratka pro MongoDB Express Angular & NodeJs. Demo, které v tomto blogu představím, je také na stejné téma.

Pomocí Docker Compose můžeme hostovat každou z těchto technologií v samostatných kontejnerech na stejném hostiteli a přimět je, aby spolu komunikovali. Každý kontejner vystaví port pro komunikaci s jinými kontejnery.

Komunikace a doba provozu těchto kontejnerů bude udržována programem Docker Compose.



Takže se můžete zeptat, jak nastavit celou tuto infrastrukturu? Dovolte mi tedy podrobnější vysvětlení.

Dockerfile

Podobně jako způsobujeme rotaci libovolného kontejneru s jednou aplikací zápisem dockerfile, budeme muset napsat samostatný dockerfile pro sestavení každé z aplikací s jedním kontejnerem. Kromě toho budeme muset napsat také Docker Compose File, který provede skutečnou práci. Docker Compose File provede různé dockerfiles k vytvoření různých kontejnerů a umožní jim vzájemnou interakci.

V našem případě máme plnou aplikaci zásobníku, která se skládá z MongoDB, ExpressJS, Angular a NodeJS. MongoDB se stará o back-endovou databázi, NodeJS a ExpressJS jsou pro vykreslování na straně serveru a Angular je pro front-end.

MEAN Stack App - Docker Compose - Edureka

Jelikož existují tři komponenty, musíme otočit nádoby pro každou z komponent. Nádoby musíme točit následujícím způsobem:

  1. Kontejner 1 - Úhlový
  2. Kontejner 2 - NodeJS a ExpressJS
  3. Kontejner 3 - MongoDB

Vytváření kontejnerů Docker

Jako první krok k ukotvení průměrné aplikace si napíšeme dockerfile pro sestavení každé z komponent, počínaje kontejnerem Angular. Tento dockerfile bude muset být přítomen v adresáři projektu spolu se souborem „package.json“. Soubor „package.json“ obsahuje podrobnosti o tom, kterou verzi závislostí musí program „NPM“ použít pro sestavení úhlové aplikace.

1. Dockerfile pro front-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 4200 CMD ['npm', 'start']

Jako vždy je naším prvním příkazem vytáhnout základní obrázek a my vytáhneme základní obrázek „node: 6“.

Další dva příkazy se týkají vytvoření nového adresáře „/ usr / src / app“ uvnitř kontejneru Docker pro ukládání úhlových kódů a vytvoření tohoto pracovního adresáře uvnitř kontejneru.

Poté zkopírujeme soubor „package.json“ z našeho adresáře projektu dovnitř kontejneru.

Potom spustíme příkaz ‚npm ​​cache clean ', který vyčistí mezipaměť npm.

Poté spustíme příkaz ‚npm ​​install ', který začne stahovat kotlové desky potřebné pro hostování aplikace Angular. Začne stahovat kotlové desky na základě verzí závislostí uvedených v souboru „package.json“.

Dalším spuštěním příkazu „RUN“ je zkopírovat všechny kódy a složky z adresáře projektu do kontejneru.

Výše uvedený příkaz požádá kontejner, aby vystavil číslo portu 4200 pro komunikaci se serverem typu back-end pro odesílání požadavků uživatelů, kteří přistupují k klientovi front-endu přes webové uživatelské rozhraní.

Konečně poslední příkaz je příkaz „RUN“ pro spuštění „npm“. Tím se spustí provádění kódů pro sestavení naší úhlové aplikace.

Aplikace Angular je nyní připravena, ale nebude správně hostována kvůli své závislosti na serveru typu back-end a databázi. Pojďme tedy dále a vytvořme dockerfile pro kontejnerizaci serveru typu back-end.

2. Dockerfile pro back-end

I tento dockerfile bude přítomen v adresáři projektu. Tento adresář bude také obsahovat soubor „package.json“ pro definování závislostí serveru Express a dalších požadavků NodeJS. Ale co je nejdůležitější, obsahuje kód projektu pro podporu serveru 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']

Jak vidíte, mezi těmito dvěma dockerfiles existuje spousta podobností. Používáme stejný „uzel: 6“ jako základní vrstvu obrazu, vytvoříme nový adresář uvnitř kontejneru, uděláme z něj pracovní adresář a mimo jiné spustíme příkaz „npm install“. Jediným rozdílem je však číslo portu vystavené pro komunikaci. V tomto případě je definováno číslo portu 3000. To je místo, kde bude server hostován a bude hledat požadavky od klienta.

3. Databáze

Možná se divíte, proč jsem v záhlaví nezmínil ‚dockerfile For Database '. Důvodem je, že ve skutečnosti nepotřebujeme přizpůsobení. Můžeme okamžitě stáhnout základní obrázek „MongoDB“ pro ukládání našich dat a jednoduše vystavit číslo portu, na kterém je k němu přístup.

Teď by na vás byla otázka, kde bych to udělal? Můžeme to udělat v Docker Compose File.

Docker Compose File

Docker Compose File je soubor YAML, který obsahuje podrobnosti o službách, sítích a svazcích pro nastavení aplikace Docker.

Spuštěním níže uvedeného příkazu vyhledejte verzi vašeho Docker Engine.

ukotvitelný panel -v

Provedení příkazu vrátí verzi běžící na vašem hostiteli. Na základě verze Docker Engine u vašeho hostitele si stáhněte příslušnou verzi Docker Compose. Můžete hledat příslušnou verzi ke stažení, z Dockerova oficiální dokumentace .

Protože používám Docker Engine verze 17.05.0-ce, použil jsem Docker Compose verze 3.

Nainstalujte Docker Compose

Chcete-li stáhnout Compose, spusťte níže uvedenou sadu příkazů.

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

Všimněte si, že číslo verze v příkazu se změní na základě verze Docker Engine, kterou používáte.

Níže jsou uvedeny příkazy, které jsou součástí mého souboru Docker Compose File.

version: '3.0' # specify docker-compose version # Definujte služby / kontejnery, které mají být spuštěny služby: angular: # název prvního sestavení služby: angular-app # uveďte adresář portů Dockerfile: - '4200: 4200' # uveďte expresní mapování portů: # název druhého sestavení služby: expresní server # uveďte adresář portů Dockerfile: - '3000: 3000' # upřesněte odkazy mapující porty: - databáze # propojte tuto službu s databází databázové služby: # název třetího obrazu služby: mongo # zadat obrázek pro vytvoření kontejneru z portů: - '27017: 27017' # zadat přesměrování portů

Jsem si docela jistý, že vám příkazy ve výše uvedeném souboru nedávají smysl. Pojďme tedy vyřešit tento problém.

V prvním řádku kódu jsem definoval verzi Docker Compose, kterou používám. Toto je velmi důležitý krok, pokud chcete, aby funkce Compose fungovala správně, aniž by došlo k chybě. Nezapomeňte si stáhnout verzi Docker Compose podle verze vašeho Docker Engine.

jaký je nejlepší ide pro javu

Poté jsem pomocí klíčového slova „services“ definoval tři kontejnery. Tyto služby odkazují na tři komponenty mého zásobníku, front-endu, back-endu a databáze. V tomto případě tedy bude název mých kontejnerů název mých služeb, tj. „Úhlové“, „expresní“ a „databáze“.

Klíčové slovo „build“ se používá k označení, že v tomto adresáři je ukotvitelný soubor pro rotaci tohoto kontejneru. Počkej, jsi zmatený jak?

Je to jednoduché. Cestu je třeba specifikovat po „build:“. V našem případě jsou „angular-app“ a „express-server“ cesty ke dvěma adresářům, na které se lze dostat z adresáře, kde je soubor Docker Compose File. Pro náš databázový kontejner jsem jednoduše řekl, že místo cesty k dockerfile použiji základní ‚image: mongo '.

Pro každou z těchto služeb jsem také určil čísla portů, která lze použít k přijímání / odesílání požadavků z jiných kontejnerů (služeb). 4200 v případě úhlu, 3000 v případě expresu a 27017 v případě monga.

Expresní kontejner má navíc „odkaz:“ na databázový kontejner, což znamená, že veškerá data přijatá na straně serveru budou odeslána do databáze, kde budou uložena.

Nyní jsme konečně u konce s vytvořením Compose. Chcete-li spustit Docker Compose a otočit tři kontejnery se třemi službami, musíme jednoduše spustit níže uvedené dva příkazy z adresáře, kde je přítomen Docker Compose File (soubor YAML):

docker-compose build docker-compose up

Příkaz „docker-compose build“ se používá k sestavení / přestavbě služeb, zatímco příkaz „docker-compose up“ se používá k vytvoření / spuštění kontejnerů. Pokračuj! Zkuste to sami.

Níže jsou screenshoty vytvářených a poté spouštěných obrázků Dockeru. Můžete si všimnout, že se vytváří úhlový obrázek, který je poté označen názvem jako „úhlový: nejnovější“.

Obrázek pro Express je také vytvořen s názvem a značkou jako „express: latest“.

Nyní, když je obrázek vytvořen, zkusme jej spustit a tím v procesu otočit kontejner. Níže je tento snímek obrazovky.

Níže je snímek obrazovky, který říká „webpack: úspěšně zkompilován“, což znamená, že Docker tyto tři služby úspěšně kontejneroval.

Nyní, když jsou kontejnery hostovány, můžete vidět služby aktivní na příslušných portech. Chcete-li pracovat s grafickým uživatelským rozhraním aplikace MEAN, zadejte do webového prohlížeče následující čísla portů.

localhost: 4200 - Úhlová aplikace (front-end)
localhost: 3000 - Express Server & NodeJS (back-end / server-side)
localhost: 27017 - MongoDB (databáze)

Ještě na vás zapůsobilo? Počkejte, protože Docker ještě není hotový! Můžeme použít příkaz „docker-compose scale =‘ x '“pro snadné zvětšení / zmenšení počtu nasazení. Jinými slovy můžeme vytvořit tolik služeb pro službu. Níže je uveden úplný příkaz k škálování konkrétní služby na kontejnery „5“:

docker-compose scale = 5

Díky tak snadné škálování služeb, jejich zabalení a kontejnerování takovým nákladově efektivním způsobem je Docker jedním z nejlepších nástrojů pro nasazení a mým osobním favoritem.

Pokud stále máte pochybnosti o tomto konceptu, můžete se podívat na níže uvedené video, kde jsem vysvětlil stejný koncept s praktickým ukázkou, jak nastavit Docker Compose.

Docker Compose | Kontejnerování aplikace MEAN Stack | Výukový program DevOps

Nyní, když jste se dozvěděli o Dockeru, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Tento kurz Edureka Docker Certification Training pomáhá studentům získat odborné znalosti v implementaci Dockeru a jeho zvládnutí.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.