Docker Compose za sadržavanje aplikacije MEAN Stack

Docker Compose alat je za definiranje i pokretanje više spremnika za pokretanje složenih aplikacija u Dockeru, na primjer kontejneriranje MEAN aplikacije.

U prethodnim blogovima na Dockeru pročitali biste što su Docker slike, Docker spremnici i koja je potreba za njima. Ako o njima niste čitali, tražim da pročitate , prije nego što nastavite s ovim blogom na Docker Compose.

Nakon istraživanja mogućnosti koje imaju Docker, zasigurno je vrlo uzbudljivo naučiti više. Zar ne? Pa barem sam bio kad sam nabasao na izazov.





Uvod u Docker Compose

Sadržaj jedne uslužne aplikacije bio mi je jednostavan. Ali kad sam morao sadržavati više usluga u odvojenim spremnicima, naletio sam na zapreku. Moj je zahtjev bio sadržavati i hostirati MEAN steck aplikaciju.

Da, dobro ste pročitali. Aplikacija s punim stogom. U početku sam mislio da to nije moguće. Ali nakon što sam čuo za Docker Compose, znao sam da će svi moji problemi biti riješeni.



Docker Compose može se koristiti za stvaranje zasebnih spremnika (i njihovo hostiranje) za svaki od stogova u aplikaciji MEAN stog. MEAN je kratica za MongoDB Express Angular & NodeJs. Demonstracija koju ću prikazati na ovom blogu također je na istu temu.

Korištenjem Docker Composea možemo smjestiti svaku od ovih tehnologija u zasebne spremnike na istom hostu i natjerati ih da međusobno komuniciraju. Svaki spremnik izložit će priključak za komunikaciju s drugim spremnicima.

Komunikaciju i vrijeme rada ovih spremnika održavat će Docker Compose.



Pa se možete pitati, kako postaviti cijelu ovu infrastrukturu? Pa, onda ću vam dati detaljnije objašnjenje.

Dockerfile

Slično kao što vrtimo bilo koji spremnik za jednu aplikaciju pisanjem datoteke docker, morat ćemo napisati zasebnu datoteku za docker za izgradnju svake aplikacije s jednim spremnikom. Uz to, morat ćemo napisati i Docker Compose datoteku koja će obaviti stvarni posao. Docker Compose File izvršit će različite docker datoteke kako bi stvorio različite spremnike i omogućio im međusobnu interakciju.

U našem slučaju imamo aplikaciju s punim stekom koja se sastoji od MongoDB, ExpressJS, Angular i NodeJS. MongoDB brine o pozadinskoj bazi podataka, NodeJS i ExpressJS su za generiranje na strani poslužitelja, a Angular je za prednju stranu.

MEAN Stack App - Docker Compose - Edureka

Budući da postoje tri komponente, za svaku komponentu moramo vrtjeti spremnike. Spremnike moramo vrtjeti na sljedeći način:

  1. Spremnik 1 - kutni
  2. Spremnik 2 - NodeJS i ExpressJS
  3. Spremnik 3 - MongoDB

Izrada Docker spremnika

Kao prvi korak za dockerizaciju srednje aplikacije, napišimo dockerfile za izgradnju svake od komponenata, počevši od spremnika Angulala. Ova datoteka docker mora biti prisutna unutar direktorija projekta zajedno s datotekom ‘package.json’. 'Packa.json' sadrži pojedinosti o tome koju verziju ovisnosti treba koristiti 'NPM' za izgradnju kutne aplikacije.

1. Dockerfile za prednji kraj

FROM čvor: 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 IZLOŽITI 4200 CMD ['npm', 'start']

Kao i uvijek, naša prva naredba je povući osnovnu sliku, a mi povlačimo osnovnu sliku 'čvor: 6'.

Sljedeće dvije naredbe odnose se na stvaranje novog direktorija ‘/ usr / src / app’ unutar Docker spremnika za spremanje kutnih kodova i pretvaranje ovog u radni direktorij unutar spremnika.

Zatim kopiramo datoteku ‘package.json’ iz našeg direktorija projekta u unutrašnjost spremnika.

razlika između pass by value i pass by reference u javi

Zatim izvodimo naredbu 'npm cache clean' koja čisti npm predmemoriju.

Nakon toga pokrećemo naredbu 'npm install' koja započinje preuzimanje kotlovskih ploča potrebnih za hostiranje aplikacije Angular. Počinje s preuzimanjem kotlovskih ploča na temelju verzija ovisnosti navedenih u 'package.json'.

Sljedeće pokretanje naredbe 'RUN' je kopiranje svih kodova, mapa prisutnih iz direktorija projekta u unutar spremnika.

Gornja naredba traži od spremnika da izloži broj porta 4200 za komunikaciju s pozadinskim poslužiteljem za slanje zahtjeva korisnika koji pristupaju prednjem klijentu putem web korisničkog sučelja.

Napokon je zadnja naredba: 'RUN' naredba za pokretanje 'npm'. Ovo započinje s izvršavanjem kodova za izgradnju naše aplikacije Angular.

Aplikacija Angular sada je spremna, ali neće biti pravilno hostirana zbog ovisnosti o pozadinskom poslužitelju i bazi podataka. Pa idemo dalje i napišite docker datoteku za kontejneriranje pozadinskog poslužitelja.

2. Dockerfile za zadnji kraj

Čak će i ova datoteka dockera biti prisutna u direktoriju projekta. Ovaj će direktorij također sadržavati datoteku 'package.json' za definiranje ovisnosti Express poslužitelja i ostalih zahtjeva NodeJS-a. Ali što je najvažnije, sadrži projektni kod koji podržava pozadinski poslužitelj.

FROM čvor: 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 IZLOŽITI 3000 CMD ['npm', 'start']

Kao što vidite, postoji mnogo sličnosti između dva dockerfila. Koristimo isti ‘čvor: 6’ kao osnovni sloj slike, stvaramo novi direktorij unutar spremnika, pretvaramo ga u radni direktorij i između ostalih pokrećemo naredbu ‘npm install’. Ali jedina je razlika u broju porta koji je izložen za komunikaciju. U ovom je slučaju definiran broj porta 3000. Ovdje će biti poslužen poslužitelj i tražit će zahtjeve klijenta.

3. Baza podataka

Možda se pitate zašto u naslovu nisam spomenuo 'dockerfile za bazu podataka'. Razlog je taj što zapravo nemamo nikakve potrebe za prilagođavanjem. Možemo odmah povući osnovnu sliku ‘MongoDB’ za pohranu podataka i samo izložiti broj porta na kojem mu se može pristupiti.

Sad bi vam bilo na umu pitanje gdje bih to mogao učiniti? Pa to možemo učiniti u Docker Compose datoteci.

Docker Nova datoteka

Docker Compose File je YAML datoteka koja sadrži detalje o uslugama, mrežama i volumenima za postavljanje aplikacije Docker.

Pokrenite naredbu ispod kako biste pronašli verziju vašeg Docker Enginea.

ograničenja u sql-u s primjerom
docker -v

Izvršenjem naredbe vratit će se verzija pokrenuta na vašem hostu. Na temelju verzije Docker Enginea na vašem hostu, preuzmite odgovarajuću verziju Docker Compose. Možete potražiti odgovarajuću verziju za preuzimanje Dockerova službena dokumentacija .

Budući da pokrećem Docker Engine verzije 17.05.0-ce, koristio sam Docker Compose verziju 3.

Instalirajte Docker Compose

Da biste preuzeli Compose, pokrenite donji skup naredbi.

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

Imajte na umu da će se broj verzije u naredbi promijeniti na temelju verzije Docker Engine koju koristite.

Ispod su naredbe koje su dio moje datoteke Docker Compose.

verzija: '3.0' # navedite verziju za sastavljanje dockera # Definirajte usluge / spremnike koji će se pokretati usluge: angular: # naziv prve gradnje usluge: angular-app # navedite direktorij portova Dockerfile: - '4200: 4200' # navedite mapiranje portova express: # naziv druge gradnje usluge: express-server # navedite direktorij portova Dockerfile: - '3000: 3000' # navedite veze mapiranja luka: - baza podataka # povežite ovu uslugu s bazom podataka usluge baze podataka: # naziv treće slike usluge: mongo # navedite sliku za izgradnju spremnika iz portova: - '27017: 27017' # navedite prosljeđivanje porta

Prilično sam siguran da vam naredbe u gornjoj datoteci nemaju smisla. Dakle, riješimo taj problem.

U prvom retku koda definirao sam verziju Docker Compose koju koristim. Ovo je vrlo važan korak ako želite da Compose funkcionira ispravno, a da ne dođe do pogreške. Obavezno preuzmite verziju Docker Compose u skladu s verzijom vašeg Docker Enginea.

Nakon toga definirao sam tri spremnika pomoću ključne riječi 'usluge'. Te se usluge odnose na tri komponente mog stoga, prednji kraj, stražnji kraj i bazu podataka. Dakle, u ovom će slučaju naziv mojih spremnika biti naziv mojih usluga, tj. „Kutni“, „ekspresni“ i „baza podataka“.

Ključna riječ 'graditi' koristi se za označavanje da je datoteka dockera za predenje tog spremnika prisutna u tom direktoriju. Čekaj, jesi li zbunjen kako?

Jednostavno je. Stazu treba navesti nakon 'build:'. U našem su slučaju 'angular-app' i 'express-server' staze do dva direktorija do kojih se može doći iz direktorija u kojem je datoteka Docker Compose. Za naš spremnik baze podataka jednostavno sam rekao da koristite osnovnu 'sliku: mongo' umjesto puta do dockerfile.

Za svaku od ovih usluga također sam odredio brojeve priključaka koji se mogu koristiti za primanje / slanje zahtjeva iz drugih spremnika (usluga). 4200 u slučaju kutnih, 3000 u slučaju expressa i 27017 u slučaju mongoa.

Uz to, ekspresni spremnik ima 'vezu:' na spremnik baze podataka, što znači da će se bilo koji podaci primljeni na strani poslužitelja poslati u bazu podataka gdje će biti pohranjeni.

Sada smo konačno na kraju postavljanja Composea. Da bismo pokrenuli Docker Compose i zavrtili tri spremnika s tri usluge, moramo jednostavno izvršiti dolje navedene dvije naredbe iz direktorija u kojem se nalazi Docker Compose datoteka (YAML datoteka):

docker-compose izgraditi docker-compose up

Naredba 'docker-compose build' koristi se za izgradnju / obnovu usluga, dok se naredba 'docker-compose up' koristi za stvaranje / pokretanje spremnika. Samo naprijed! Isprobajte sami.

Ispod su snimke zaslona slika Dockera koje se izrađuju, a zatim izvršavaju. Možete primijetiti da se izrađuje Kutna slika koja je zatim imenom označena kao 'kutna: najnovija'.

Također, slika za Express izgrađena je s imenom i oznakom kao 'express: latest'.

postdiplomska diploma vs magistri

Sad kad je slika izgrađena, pokušajmo je pokrenuti i na taj način vrtjeti spremnik u procesu. Ispod je taj snimak zaslona.

Ispod je snimka zaslona na kojoj stoji 'webpack: uspješno kompiliran', što znači da Docker uspješno kontejnerira tri usluge.

Sad kad su spremnici hostirani, možete vidjeti usluge aktivne na njihovim lukama. Idite upisati sljedeće brojeve porta u svoj web preglednik za interakciju s GUI-jem aplikacije MEAN.

localhost: 4200 - Kutna aplikacija (prednja strana)
localhost: 3000 - Express Server & NodeJS (pozadinski / na strani poslužitelja)
localhost: 27017 - MongoDB (baza podataka)

Dojmio se već? Čekajte, jer Docker još nije gotov! Naredbom 'docker-compose scale = 'x'' možemo lako povećati / smanjiti broj postavljanja. Drugim riječima, možemo stvoriti toliki broj spremnika za uslugu. Ispod je kompletna naredba za skaliranje određene usluge na spremnike ‘5’:

skala docker-compose = 5

Tako lako skaliranje usluga, pakiranje i kontejneriranje na tako isplativ način je ono što Docker čini jednim od najboljih alata za postavljanje i mojim osobnim favoritom.

Ako i dalje sumnjate u ovaj koncept, možete pogledati video u nastavku u kojem sam objasnio isti koncept s praktičnim praktičnim uputama o postavljanju Docker Compose.

Docker Compose | Kontejniranje MEAN aplikacije steka | Vodič za DevOps

Sad kad ste saznali za Docker, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Ovaj tečaj za certificiranje Edureka Dockera pomaže učenicima da steknu stručnost u primjeni Dockera i njegovom svladavanju.

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.