Docker Compose pentru containerizarea unei aplicații stivă MEAN



Docker Compose este un instrument pentru definirea și rularea mai multor containere pentru a rula aplicații complexe în Docker, de exemplu containerizarea unei aplicații MEAN.

În blogurile anterioare de pe Docker, ați fi citit despre ce sunt imaginile Docker, containerele Docker și care este nevoia lor. Dacă nu ați citit despre ele, atunci vă rog să citiți , înainte de a continua cu acest blog pe Docker Compose.

După ce ați explorat posibilitățile oferite de Docker, este cu siguranță foarte interesant să aflați mai multe. Nu-i așa? Ei bine, cel puțin am fost când am dat peste o provocare.





Introducere în Docker Compose

Containerizarea unei singure aplicații de servicii a fost ușoară pentru mine. Dar când a trebuit să containerizez mai multe servicii în containere separate, am dat peste un blocaj rutier. Cerința mea era să containerizez și să găzduiesc o aplicație stivă MEAN.

Da, ai citit bine. O aplicație completă. Inițial, am crezut că nu este posibil. Dar după ce am auzit despre Docker Compose, am știut că toate problemele mele vor fi rezolvate.



Docker Compose poate fi utilizat pentru a crea containere separate (și a le găzdui) pentru fiecare dintre stive într-o aplicație de stivă MEAN. MEAN este acronimul pentru MongoDB Express Angular & NodeJs. Demo-ul pe care îl voi prezenta în acest blog este, de asemenea, pe același subiect.

Utilizând Docker Compose, putem găzdui fiecare dintre aceste tehnologii în containere separate pe aceeași gazdă și le putem face să comunice între ele. Fiecare container va expune un port pentru comunicarea cu alte containere.

Comunicarea și disponibilitatea acestor containere vor fi întreținute de Docker Compose.



Așadar, vă puteți întreba cum să configurați întreaga infrastructură? Ei bine, permiteți-mi să vă dau o explicație mai detaliată.

Dockerfile

Similar cu modul în care rotim orice container cu o singură aplicație scriind un fișier docker, va trebui să scriem un fișier docker separat pentru construirea fiecărei aplicații cu un singur container. În plus, va trebui să scriem și un fișier de compunere Docker care va face treaba efectivă. Docker Compose File va executa diferite fișiere docker pentru a crea diferitele containere și pentru a le permite să interacționeze între ele.

În cazul nostru, avem o aplicație de stivă completă, care cuprinde MongoDB, ExpressJS, Angular și NodeJS. MongoDB se ocupă de baza de date back-end, NodeJS și ExpressJS sunt pentru redarea pe server, iar Angular este pentru front-end.

Aplicația MEAN Stack - Docker Compose - Edureka

Deoarece există trei componente, trebuie să rotim containerele pentru fiecare dintre componente. Trebuie să răsucim containerele în felul următor:

  1. Container 1 - unghiular
  2. Container 2 - NodeJS și ExpressJS
  3. Container 3 - MongoDB

Crearea containerelor Docker

Ca prim pas pentru a andoca aplicația medie, să scriem fișierul docker pentru construirea fiecărei componente, începând de la containerul Angular. Acest fișier docker va trebui să fie prezent în directorul proiectului împreună cu fișierul „package.json”. „Package.json” conține detalii despre versiunea de dependențe care trebuie utilizată de „NPM” pentru construirea aplicației unghiulare.

1. Fișier Docker pentru front-end

FROM nod: 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']

Ca întotdeauna, prima noastră comandă este să tragem o imagine de bază, iar noi tragem o imagine de bază „nod: 6”.

Următoarele două comenzi sunt despre crearea unui nou director ‘/ usr / src / app’ în interiorul containerului Docker pentru stocarea codurilor unghiulare și transformarea acestuia în directorul de lucru din interiorul containerului.

Copiem apoi fișierul „package.json” din directorul nostru de proiect în interiorul containerului.

Rulăm apoi comanda „npm cache clean” care curăță cache-ul npm.

După aceea, executăm comanda „npm install” care începe să descarce plăcile cazanului necesare pentru găzduirea aplicației Angular. Începe descărcarea plăcilor cazanului pe baza versiunilor dependențelor specificate în „package.json”.

Următoarea comandă „RUN” este să copiați toate codurile, folderele prezente din directorul proiectului în interiorul containerului.

cum se tipărește în java

Comanda de mai sus solicită containerului să expună numărul portului 4200 pentru comunicarea cu serverul back-end pentru a trimite cererile făcute de utilizatorii care accesează clientul front-end prin UI-ul Web.

În cele din urmă ultima comandă este, comanda „RUN” pentru a porni „npm”. Aceasta începe să execute codurile pentru construirea aplicației noastre angulare.

Aplicația Angular este acum gata, dar nu va fi găzduită corect din cauza dependenței sale de un server back-end și o bază de date. Deci, să mergem mai departe și să scriem un fișier docker pentru containerizarea serverului back-end.

2. Fișier Docker pentru Back End

Chiar și acest fișier docker va fi prezent într-un director de proiect. Acest director va conține, de asemenea, fișierul „package.json” pentru definirea dependențelor serverului Express și a altor cerințe ale NodeJS. Dar cel mai important, conține codul proiectului pentru a sprijini serverul back-end.

FROM nod: 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']

După cum puteți vedea, există o mulțime de asemănări între cele două documente de andocare. Folosim același „nod: 6” ca strat de imagine de bază, creăm un director nou în interiorul containerului, îl facem directorul de lucru și executăm comanda „npm install” printre altele. Dar singura diferență este numărul de port expus pentru comunicare. În acest caz, este definit numărul portului 3000. Aici va fi găzduit serverul și va căuta cereri de la client.

3. Baza de date

S-ar putea să vă întrebați de ce nu am menționat „dockerfile For Database” în titlu. Motivul este că, de fapt, nu avem nevoie de personalizare. Putem trage imediat o imagine de bază „MongoDB” pentru stocarea datelor noastre și expunem doar numărul portului pe care poate fi accesat.

Acum întrebarea pe care o ai în minte ar fi, unde aș face asta? Ei bine, putem face asta în Docker Compose File.

Docker Compose File

Docker Compose File este un fișier YAML care conține detalii despre servicii, rețele și volume pentru configurarea aplicației Docker.

Rulați comanda de mai jos pentru a găsi versiunea Docker Engine.

clasa abstractă și diferența de interfață
docker -v

Executarea comenzii va readuce versiunea care rulează la gazda dvs. Pe baza versiunii Docker Engine de la gazda dvs., descărcați o versiune adecvată Docker Compose. Puteți căuta versiunea potrivită pentru a descărca, de la Documentația oficială a lui Docker .

Întrucât rulez Docker Engine versiunea 17.05.0-ce, am folosit Docker Compose versiunea 3.

Instalați Docker Compose

Pentru a descărca Compune, rulați setul de comenzi de mai jos.

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

Rețineți că numărul versiunii din comandă se va modifica în funcție de versiunea Docker Engine pe care o executați.

Mai jos sunt comenzile care fac parte din fișierul meu Docker Compose.

versiune: '3.0' # specificați versiunea docker-compuneți # Definiți serviciile / containerele care vor fi executate servicii: angular: # numele primei construcții de servicii: angular-app # specificați directorul porturilor Dockerfile: - '4200: 4200' # specificați maparea porturilor express: # numele celei de-a doua construcții de servicii: express-server # specificați directorul porturilor Dockerfile: - '3000: 3000' #specificați linkurile de mapare a porturilor: - baza de date # conectați acest serviciu la baza de date a serviciului bazei de date: # numele celei de-a treia imagini de serviciu: mongo # specifică imaginea pentru a construi containerul din porturi: - '27017: 27017' # specifică redirecționarea portului

Sunt destul de sigur că comenzile din fișierul de mai sus nu au sens pentru tine. Deci, să rezolvăm problema.

În prima linie de cod, am definit versiunea de Docker Compose pe care o folosesc. Acesta este un pas foarte important dacă doriți ca Compose să funcționeze corect fără a arunca nicio eroare. Asigurați-vă că descărcați versiunea Docker Compose conform versiunii Docker Engine.

După aceea, am definit trei containere folosind cuvântul cheie „servicii”. Aceste servicii se referă la cele trei componente ale stivei mele, front end, back end și bază de date. Deci, în acest caz, numele containerelor mele va fi numele serviciilor mele, adică „unghiular”, „expres” și „bază de date”.

Cuvântul cheie „construi” este utilizat pentru a indica faptul că fișierul docker pentru rotirea acelui container este prezent în acel director. Stai, ești confuz cum?

E simplu. Calea trebuie specificată după „build:”. În cazul nostru, „angular-app” și „express-server” sunt căi către două directoare care pot fi accesate din directorul în care este prezent fișierul Docker Compose. Pentru containerul bazei noastre de date, am spus pur și simplu că folosiți o „imagine: mongo” de bază în loc de o cale către fișierul docker.

Pentru fiecare dintre aceste servicii, am specificat și numerele de port care pot fi utilizate pentru a primi / trimite cereri de la alte containere (servicii). 4200 în caz de unghiular, 3000 în cazul expres și 27017 în cazul mongo.

În plus, containerul expres are un „link:” către containerul bazei de date, indicând faptul că orice date primite în partea serverului vor fi trimise la baza de date unde vor fi stocate.

Acum, în sfârșit, suntem la concluzia înființării unui compus. Pentru a porni un Docker Compose și a roti cele trei containere cu trei servicii, trebuie să executăm pur și simplu cele două comenzi de mai jos din directorul în care este prezent fișierul Docker Compose (fișier YAML):

Android studio pas cu pas
docker-compose build docker-compose up

Comanda ‘docker-compose build’ este utilizată pentru a construi / reconstrui serviciile, în timp ce comanda ‘docker-compose up’ este utilizată pentru a crea / porni containerele. Dați-i drumul! Încearcă-o pentru tine.

Mai jos sunt capturi de ecran ale imaginilor Docker care sunt construite și apoi executate. Puteți observa că imaginea unghiulară este construită și apoi etichetată cu numele ca „unghiular: cel mai recent”.

De asemenea, o imagine pentru Express este construită cu numele și eticheta ca „express: latest”.

Acum că imaginea este construită, să încercăm să o rulăm și să rotim astfel un container în acest proces. Mai jos este captura de ecran.

Mai jos este captura de ecran care spune „webpack: compilat cu succes” ceea ce înseamnă că cele trei servicii sunt containerizate cu succes de către Docker.

Acum că containerele sunt găzduite, puteți vedea serviciile active pe porturile respective. Accesați următoarele numere de port în browserul dvs. web pentru a interacționa cu interfața grafică a aplicației MEAN.

localhost: 4200 - Aplicație unghiulară (front-end)
localhost: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (baza de date)

Impresionat încă? Așteptați, pentru că Docker nu este încă terminat! Putem folosi comanda „docker-compose scale =’ x '”pentru a scări cu ușurință numărul de implementări. Cu alte cuvinte, putem crea un număr atât de mare de containere pentru un serviciu. Mai jos este comanda completă pentru a scala un anumit serviciu la containerele „5”:

docker-compose scale = 5

Extinderea serviciilor la o asemenea ușurință, ambalarea și containerizarea acestora într-o manieră atât de rentabilă este ceea ce face din Docker unul dintre cele mai bune instrumente de implementare și preferatul meu personal.

Dacă aveți în continuare îndoieli cu privire la acest concept, atunci puteți urmări videoclipul de mai jos, unde am explicat același concept cu o practică practică despre cum să configurați un Docker Compose.

Docker Compose | Conținând cererea MEAN Stack | Tutorial DevOps

Acum că ați aflat despre Docker, consultați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Acest curs de formare pentru certificare Edureka Docker îi ajută pe cursanți să câștige expertiză în implementarea și stăpânirea acestuia.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.