Docker Compose per contenir una aplicació de pila MEAN



Docker Compose és una eina per definir i executar diversos contenidors per executar aplicacions complexes a Docker, per exemple contenint una aplicació MEAN.

Als blocs anteriors de Docker, hauríeu llegit sobre què són les imatges de Docker, els contenidors Docker i quina és la seva necessitat. Si no n'heu llegit, us demano que llegiu , abans de continuar amb aquest bloc a Docker Compose.

Després d’explorar les possibilitats que ofereix Docker, sens dubte és molt emocionant conèixer-ne més. No és així? Bé, almenys ho era quan em vaig trobar amb un repte.





Introducció a Docker Compose

Em va permetre contenir una sola aplicació de servei. Però quan vaig haver de contenir diversos serveis en contenidors separats, em vaig trobar amb un bloqueig de carreteres. El meu requisit era contenir i allotjar una aplicació de pila MEAN.

Sí, ho has llegit bé. Una aplicació de pila completa. Inicialment, vaig pensar que no era possible. Però després d’escoltar Docker Compose, sabia que tots els meus problemes es resoldrien.



Docker Compose es pot utilitzar per crear contenidors separats (i allotjar-los) per a cadascuna de les piles d'una aplicació de pila MEAN. MEAN és l'acrònim de MongoDB Express Angular & NodeJs. La demostració que mostraré en aquest bloc també tracta del mateix tema.

En utilitzar Docker Compose, podem allotjar cadascuna d’aquestes tecnologies en contenidors separats del mateix host i aconseguir que es comuniquin entre elles. Cada contenidor exposarà un port per comunicar-se amb altres contenidors.

Docker Compose mantindrà la comunicació i el temps d’activitat d’aquests contenidors.



Per tant, podeu preguntar-vos, com configurar tota aquesta infraestructura? Doncs deixeu-me que us expliqui més detalladament.

Dockerfile

De manera similar a com fem girar qualsevol contenidor d'una sola aplicació escrivint un fitxer ancorador, haurem d'escriure un fitxer ancorador independent per construir cadascuna de les aplicacions d'un sol contenidor. A més, també haurem d’escriure un fitxer de redacció de Docker que faci el treball real. Docker Compose File executarà els diferents fitxers docker per crear els diferents contenidors i deixar-los interactuar entre ells.

En el nostre cas, tenim una aplicació de pila completa que inclou MongoDB, ExpressJS, Angular i NodeJS. MongoDB s’encarrega de la base de dades del back-end, NodeJS i ExpressJS són per a la representació del servidor i Angular per al front-end.

Aplicació MEAN Stack - Docker Compose - Edureka

Com que hi ha tres components, hem de fer girar els contenidors per a cadascun dels components. Hem de girar els contenidors de la següent manera:

  1. Contenidor 1 - Angular
  2. Contenidor 2: NodeJS i ExpressJS
  3. Contenidor 3: MongoDB

Creació de contenidors Docker

Com a primer pas per acoblar l’aplicació mitjana, escrivim el fitxer acoblador per construir cadascun dels components, a partir del contenidor d’Angular. Aquest fitxer docker haurà d’estar present al directori del projecte juntament amb el fitxer ‘package.json’. El 'package.json' conté els detalls sobre quina versió de dependències ha de fer servir 'NPM' per crear l'aplicació angular.

1. Dockerfile per al frontal

FROM node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm caché net RUN npm instal·la COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Com sempre, el nostre primer comandament és treure una imatge base i estem tirant una imatge base de 'node: 6'.

Les dues ordres següents tracten de crear un nou directori ‘/ usr / src / app’ dins del contenidor Docker per emmagatzemar codis angulars i convertir-lo en el directori de treball dins del contenidor.

A continuació, copiem el fitxer ‘package.json’ del directori del projecte a l’interior del contenidor.

A continuació, executem l’ordre ‘npm cache clean’ que neteja la memòria cau de npm.

Després d’això, executem l’ordre ‘npm install’ que comença a descarregar les plaques de caldera necessàries per allotjar l’aplicació Angular. Comença a descarregar les plaques de la caldera en funció de les versions de dependències especificades a ‘package.json’.

La següent execució d’ordres ‘RUN’ és copiar tots els codis, carpetes presents del directori del projecte a l’interior del contenidor.

com compilar un programa Java

L'ordre anterior demana al contenidor que exposi el número de port 4200 per comunicar-se amb el servidor final per enviar les sol·licituds realitzades pels usuaris que accedeixen al client frontal mitjançant la interfície d'usuari web.

Finalment, l’última ordre és: ordre ‘RUN’ per iniciar ‘npm’. Això comença a executar els codis per crear la nostra aplicació Angular.

L'aplicació Angular ja està llesta, però no s'allotjarà correctament a causa de la seva dependència d'un servidor back-end i d'una base de dades. Anem, doncs, més enllà i escrivim un fitxer ancorador per contenir el servidor de back-end.

2. Dockerfile per a la part posterior

Fins i tot aquest fitxer ancorador estarà present en un directori de projectes. Aquest directori també contindrà el fitxer ‘package.json’ per definir les dependències del servidor Express i altres requisits de NodeJS. Però el més important és que conté el codi del projecte per donar suport al servidor de back-end.

FROM node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm caché net RUN npm instal·la COPY. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Com podeu veure, hi ha moltes similituds entre els dos fitxers docker. Utilitzem el mateix 'node: 6' que la capa d'imatge base, creem un directori nou dins del contenidor, el convertim en el directori de treball i executem l'ordre 'npm install' entre d'altres. Però l’única diferència és el número de port exposat per a la comunicació. En aquest cas, es defineix el número de port 3000. Aquí és on s’allotjarà el servidor i buscarà les sol·licituds del client.

3. Base de dades

És possible que us pregunteu per què no he esmentat 'dockerfile for database' a l'encapçalament. La raó és que, de fet, no tenim cap necessitat de personalització. De seguida podem extreure una imatge base ‘MongoDB’ per emmagatzemar les nostres dades i simplement exposar el número de port des d’on es pot accedir.

Ara la pregunta que teniu al cap seria: on faria això? Doncs ho podem fer al Docker Compose File.

Docker Compose File

Docker Compose File és un fitxer YAML que conté detalls sobre els serveis, les xarxes i els volums per configurar l'aplicació Docker.

Executeu l'ordre següent per trobar la versió del vostre Docker Engine.

pla de seguiment i control del projecte
acoblador -v

En executar l'ordre, es tornarà la versió que s'executa al vostre amfitrió. Basant-vos en la versió de Docker Engine del vostre amfitrió, descarregueu una versió adequada de Docker Compose. Podeu buscar la versió adequada per descarregar, des de Documentació oficial de Docker .

Com que estic executant Docker Engine versió 17.05.0-ce, he utilitzat Docker Compose versió 3.

Instal·leu Docker Compose

Per descarregar Redactar, executeu el conjunt següent d'ordres.

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

Tingueu en compte que el número de versió de l'ordre canviarà en funció de la versió de Docker Engine que esteu executant.

A continuació es mostren les ordres que formen part del meu fitxer de redacció de Docker.

versió: '3.0' # especifica la versió docker-compose # Defineix els serveis / contenidors que s'executaran serveis: angular: # nom de la primera compilació del servei: angular-app # especifica el directori dels ports Dockerfile: - '4200: 4200' # especificar el mapatge de ports express: # nom de la segona generació de serveis: express-server # especificar el directori dels ports Dockerfile: - '3000: 3000' # especificar els enllaços de mapatge de ports: - base de dades # enllaçar aquest servei a la base de dades del servei de base de dades: # nom de la tercera imatge de servei: mongo # especifica la imatge per construir el contenidor des dels ports: - '27017: 27017' # especifica el reenviament de ports

Estic força segur que les ordres del fitxer anterior no tenen cap sentit per a vosaltres. Per tant, solucionem aquest problema.

A la primera línia de codi, he definit la versió de Docker Compose que estic fent servir. Aquest és un pas molt important si voleu que Compose funcioni correctament sense generar cap error. Assegureu-vos de descarregar la versió de Docker Compose segons la versió del vostre Docker Engine.

Després, vaig definir tres contenidors mitjançant la paraula clau 'serveis'. Aquests serveis fan referència als tres components de la meva pila, la part frontal, la part posterior i la base de dades. Per tant, en aquest cas, el nom dels meus contenidors serà el nom dels meus serveis, és a dir, ‘angular’, ‘express’ i ‘base de dades’.

La paraula clau 'construir' s'utilitza per indicar que el fitxer ancorador per fer girar el contenidor està present en aquest directori. Espera, estàs confós com?

És fàcil. El camí s’ha d’especificar després de 'construir:'. En el nostre cas, ‘angular-app’ i ‘express-server’ són camins a dos directoris als quals es pot accedir des del directori on hi ha el fitxer de composició Docker. Per al contenidor de la nostra base de dades, simplement he dit que utilitzeu una imatge 'mongo' base en lloc d'un camí d'accés al fitxer docker.

Per a cadascun d'aquests serveis, també he especificat els números de port que es poden utilitzar per rebre / enviar sol·licituds d'altres contenidors (serveis). 4200 en cas d’angular, 3000 en cas d’express i 27017 en cas de mongo.

A més, el contenidor exprés té un 'enllaç:' al contenidor de la base de dades, que indica que qualsevol dada que es rebi al servidor s'enviarà a la base de dades on s'emmagatzemarà.

Ara, finalment, estem a la conclusió de crear un Compose. Per iniciar un Docker Compose i fer girar els tres contenidors amb tres serveis, simplement hem d’executar les dues ordres següents des del directori on hi ha el Docker Compose File (fitxer YAML):

java string split regla múltiple delimitadors
docker-compose build docker-compose up

L’ordre ‘docker-compose build’ s’utilitza per crear / reconstruir els serveis, mentre que l’ordre ‘docker-compose up’ s’utilitza per crear / iniciar els contenidors. Endavant! Proveu-ho per vosaltres mateixos.

A continuació es mostren captures de pantalla de les imatges de Docker que s'estan construint i executant. Podeu notar que s’està construint una imatge angular i que després s’etiqueta amb el nom com a ‘angular: latest’.

A més, es crea una imatge per a Express amb el nom i l'etiqueta com a 'express: latest'.

Ara que es crea la imatge, provem d’executar-la i fer girar un contenidor en el procés. A continuació es mostra aquesta captura de pantalla.

A continuació es mostra la captura de pantalla que diu 'webpack: compilat correctament', que significa que Docker conté els tres serveis amb èxit.

Ara que els contenidors estan allotjats, podeu veure els serveis actius als seus ports respectius. Aneu a escriure els números de port següents al navegador web per interactuar amb la GUI de l’aplicació MEAN.

localhost: 4200 - Aplicació angular (portada)
localhost: 3000 - Express Server & NodeJS (back-end / side-side)
localhost: 27017 - MongoDB (base de dades)

Encara està impressionat? Espera, perquè Docker encara no està acabat. Podem utilitzar l’ordre “docker-compose scale =’ x ’” per escalar fàcilment el nombre de desplegaments. En altres paraules, podem crear tanta quantitat de contenidors per a un servei. A continuació es mostra l'ordre complet per escalar un servei concret a contenidors '5':

docker-compose scale = 5

Ampliar els serveis amb tanta facilitat, empaquetar-los i contenir-los de manera tan rendible és el que fa de Docker una de les millors eines de desplegament i el meu favorit personal.

Si encara teniu dubtes sobre aquest concepte, podeu veure el següent vídeo on he explicat el mateix concepte amb una pràctica pràctica sobre com configurar un Docker Compose.

Docker Compose | Aplicació de contenidors MEAN Stack | Tutorial DevOps

Ara que heu après sobre Docker, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. Aquest curs de formació en certificació Edureka Docker ajuda els estudiants a adquirir experiència en la implementació de Docker i el seu domini.

Tens alguna pregunta? Esmenta’l a la secció de comentaris i et respondrem.