Docker komponerer til containerering af en MEAN-stakapplikation



Docker Compose er et værktøj til at definere og køre flere containere til at køre komplekse applikationer i Docker, for eksempel at containerisere en MEAN-applikation.

I de tidligere blogs på Docker ville du have læst om, hvad der er Docker-billeder, Docker-containere, og hvad er behovet for dem. Hvis du ikke har læst om dem, beder jeg dig om at læse , inden du fortsætter med denne blog på Docker Compose.

Efter at have undersøgt de muligheder, der følger med Docker, er det bestemt meget spændende at lære mere. Er det ikke? I det mindste var jeg det, da jeg snublede ind i en udfordring.





Introduktion til Docker Compose

Det var let for mig at beholde en enkelt serviceapplikation. Men da jeg skulle containerisere flere tjenester i separate containere, stødte jeg på en vejspærring. Mit krav var at containerisere og være vært for en MEAN stack-applikation.

Yup, du læste det rigtigt. En applikation med fuld stak. Oprindeligt troede jeg, det ikke var muligt. Men efter at jeg hørte om Docker Compose, vidste jeg, at alle mine problemer ville blive løst.



Docker Compose kan bruges til at oprette separate containere (og være vært for dem) for hver af stakkene i et MEAN-stakprogram. MEAN er forkortelsen for MongoDB Express Angular & NodeJs. Demoen, jeg vil vise i denne blog, handler også om det samme emne.

Ved at bruge Docker Compose kan vi være vært for hver af disse teknologier i separate containere på den samme vært og få dem til at kommunikere med hinanden. Hver container udsætter en port til kommunikation med andre containere.

Kommunikationen og oppetid for disse containere opretholdes af Docker Compose.



opsæt formørkelse til java

Så du kan spørge, hvordan du opsætter hele denne infrastruktur? Lad mig give dig en mere detaljeret forklaring.

Dockerfil

På samme måde som hvordan vi spinder en enkelt applikationscontainer ved at skrive en dockerfil, bliver vi nødt til at skrive en separat dockerfil til at opbygge hver enkelt container-applikation. Derudover bliver vi også nødt til at skrive en Docker Compose-fil, der udfører det egentlige arbejde. Docker Compose File udfører de forskellige dockerfiler for at oprette de forskellige containere og lade dem interagere med hinanden.

I vores tilfælde har vi en fuld stak-applikation, der består af MongoDB, ExpressJS, Angular og NodeJS. MongoDB tager sig af backend-databasen, NodeJS og ExpressJS er til rendering på serversiden, og Angular er til frontend.

MEAN Stack App - Docker Compose - Edureka

Da der er tre komponenter, skal vi dreje beholdere til hver af komponenterne. Vi er nødt til at dreje containerne på følgende måde:

  1. Beholder 1 - kantet
  2. Container 2 - NodeJS og ExpressJS
  3. Container 3 - MongoDB

Oprettelse af Docker-containere

Som det første skridt til at dockerize den gennemsnitlige applikation, lad os skrive dockerfilen til bygning af hver af komponenterne fra Angular's container. Denne dockerfil skal være til stede i projektmappen sammen med filen 'package.json'. 'Package.json' indeholder detaljerne om, hvilken version af afhængigheder der skal bruges af 'NPM' til opbygning af vinkelapplikationen.

1. Dockerfil til frontend

FRA knude: 6 KØR mkdir -p / usr / src / app WORKDIR / usr / src / app COPY-pakke.json / usr / src / app KØR npm cache ren KØR npm installer KOPIER. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Som altid er vores første kommando at trække et basisbillede, og vi trækker et base 'node: 6' billede.

De næste to kommandoer handler om at oprette en ny mappe '/ usr / src / app' inde i Docker Container til lagring af vinklede koder og gøre dette til den fungerende mappe inde i Containeren.

Vi kopierer derefter filen 'package.json' fra vores projektmappe til inde i containeren.

Vi kører derefter kommandoen 'npm cache clean', som renser npm-cachen.

Derefter kører vi kommandoen 'npm install', som begynder at downloade de kedelplader, der kræves for at være vært for Angular-appen. Det begynder at downloade kedelpladerne baseret på de versioner af afhængigheder, der er angivet i 'package.json'.

Den næste 'KØR' kommandokørsel er at kopiere alle koder, mapper til stede fra projektmappen til inde i containeren.

Ovenstående kommando beder containeren om at eksponere portnummer 4200 til kommunikation med back-end-serveren for at sende anmodninger fra brugere, der får adgang til front-end-klienten via web-UI.

Endelig er den sidste kommando, 'RUN' kommando for at starte 'npm'. Dette begynder at udføre koder til opbygning af vores Angular-app.

Angular-appen er nu klar, men den hostes ikke korrekt på grund af dens afhængighed af en back-end-server og en database. Så lad os gå videre og skrive en dockerfil til containerisering af back-end-serveren.

2. Dockerfil til bagenden

Selv denne dockerfil vil være til stede i en projektmappe. Denne mappe indeholder også filen 'package.json' til at definere afhængighederne af Express-serveren og andre krav til NodeJS. Men vigtigst af alt indeholder den projektkoden til understøttelse af back-end-serveren.

FRA knude: 6 KØR mkdir -p / usr / src / app WORKDIR / usr / src / app COPY-pakke.json / usr / src / app KØR npm cache ren KØR npm installer KOPIER. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Som du kan se, er der mange ligheder mellem de to dockerfiler. Vi bruger den samme 'node: 6' som basisbilledlaget, opretter en ny mappe inde i containeren, gør den til den fungerende mappe og kører kommandoen 'npm install' blandt andre. Men den eneste forskel er det portnummer, der udsættes for kommunikation. I dette tilfælde er portnummer 3000 defineret. Dette er hvor serveren hostes og vil se efter anmodninger fra klienten.

3. Database

Du undrer dig måske over, hvorfor jeg ikke har nævnt 'dockerfile For Database' i overskriften. Årsagen er, at vi faktisk ikke har noget behov for at foretage tilpasning. Vi kan straks trække et 'MongoDB' basisbillede til lagring af vores data og blot udsætte det portnummer, som det kan fås til.

Nu ville spørgsmålet i dit sind være, hvor ville jeg gøre det? Det kan vi godt gøre i Docker Compose File.

Docker komponere fil

Docker Compose File er en YAML-fil, der indeholder detaljer om tjenester, netværk og diskenheder til opsætning af Docker-applikationen.

Kør nedenstående kommando for at finde versionen af ​​din Docker Engine.

docker -v

Udførelse af kommandoen returnerer den version, der kører hos din vært. Baseret på versionen af ​​Docker Engine hos din vært, skal du downloade en passende version Docker Compose. Du kan se efter den passende version, du kan downloade fra Docker's officielle dokumentation .

Da jeg kører Docker Engine version 17.05.0-ce, har jeg brugt Docker Compose version 3.

Installer Docker Compose

For at downloade Compose skal du køre nedenstående sæt kommandoer.

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

Bemærk, at versionsnummeret i kommandoen ændres baseret på den Docker Engine-version, du kører.

Nedenfor er de kommandoer, der er en del af min Docker Compose-fil.

version: '3.0' # specificer docker-compose version # Definer de tjenester / containere, der skal køres tjenester: vinkel: # navn på den første service build: angular-app # angiv kataloget for Dockerfile-porte: - '4200: 4200' # specificer port mapping express: # navn på den anden service build: express-server # specificer kataloget over Dockerfile porte: - '3000: 3000' # specificer porte kortlægning links: - database # link denne service til databasetjeneste databasen: # navn på det tredje servicebillede: mongo # angiv billede for at bygge container fra porte: - '27017: 27017' # angiv portvideresendelse

Jeg er ret sikker på, at kommandoerne i ovenstående fil ikke giver mening for dig. Så lad os få løst dette problem.

I den første kodelinje har jeg defineret den version af Docker Compose, jeg bruger. Dette er et meget vigtigt trin, hvis du vil, at Compose skal fungere korrekt uden at kaste nogen fejl. Sørg for at downloade Docker Compose-versionen i henhold til versionen af ​​din Docker Engine.

Derefter definerede jeg tre containere ved hjælp af nøgleordet 'services'. Disse tjenester henviser til de tre komponenter i min stack, frontend, backend og database. Så i dette tilfælde vil navnet på mine containere være navnet på mine tjenester, dvs. 'kantet', 'ekspres' og 'database'.

Nøgleordet 'build' bruges til at indikere, at dockerfilen til spinding af denne container er til stede i den mappe. Vent, er du forvirret hvordan?

Det er simpelt. Stien skal specificeres efter 'build:'. I vores tilfælde er 'angular-app' og 'express-server' stier til to mapper, der kan nås fra det bibliotek, hvor Docker Compose File er til stede. Til vores databasecontainer har jeg simpelthen sagt brug et base 'image: mongo' i stedet for en sti til dockerfile.

hvordan man skriver singleton-klasse i java

For hver af disse tjenester har jeg også specificeret de portnumre, der kan bruges til at modtage / sende anmodninger fra andre containere (tjenester). 4200 i tilfælde af vinkel, 3000 i tilfælde af ekspres og 27017 i tilfælde af mongo.

Derudover har eksprescontaineren et 'link:' til databasecontainer, hvilket indikerer, at de data, der modtages på serversiden, vil blive sendt til databasen, hvor de vil blive gemt.

Nu endelig er vi ved afslutningen af ​​at oprette en komponere. For at starte en Docker Compose og dreje de tre containere med tre tjenester, skal vi blot udføre nedenstående to kommandoer fra den mappe, hvor Docker Compose File (YAML-filen) er til stede:

docker-compose bygge docker-compose op

Kommandoen 'docker-compose build' bruges til at opbygge / genopbygge tjenesterne, mens kommandoen 'docker-compose up' bruges til at oprette / starte containerne. Fortsæt! Prøv det selv.

Nedenfor er skærmbilleder af Docker-billeder, der bygges og derefter udføres. Du kan bemærke, at et kantet billede bygges og derefter tagges med navnet som 'kantet: senest'.

Et billede til Express er også bygget med navn og tag som 'express: seneste'.

Nu hvor billedet er bygget, lad os prøve at køre det og dermed dreje en container i processen. Nedenfor er det skærmbillede.

Nedenfor er skærmbilledet, der siger 'webpack: compiled held', hvilket betyder at de tre tjenester er containeriseret med succes af Docker.

Nu hvor containerne er hostet, kan du se de tjenester, der er aktive i deres respektive porte. Gå og skriv følgende portnumre i din webbrowser for at interagere med GUI for MEAN-appen.

lokal vært: 4200 - Vinkelapp (Front-end)
lokal vært: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (database)

Imponeret endnu? Vent, for Docker er ikke færdig endnu! Vi kan bruge kommandoen 'docker-compose scale = 'x' 'til nemt at skalere op / ned antallet af implementeringer. Med andre ord kan vi oprette så mange containere til en tjeneste. Nedenfor er den komplette kommando til at skalere en bestemt tjeneste til '5' containere:

docker-compose-skala = 5

Opskalering af tjenesterne på en så let måde, emballering og containerisering af dem på en så omkostningseffektiv måde er, hvad der gør Docker til et af de bedste implementeringsværktøjer og min personlige favorit.

Hvis du stadig er i tvivl om dette koncept, kan du se nedenstående video, hvor jeg har forklaret det samme koncept med en praktisk hands-on om, hvordan du opsætter en Docker Compose.

Docker komponere | Containerizing MEAN Stack-applikation | DevOps-vejledning

Nu hvor du har lært om Docker, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Dette Edureka Docker-certificeringskursus hjælper elever med at få ekspertise i implementering af Docker og mestring af det.

Har du et spørgsmål til os? Nævn det i kommentarfeltet, så vender vi tilbage til dig.