Docker Compose pour la conteneurisation d'une application MEAN Stack

Docker Compose est un outil permettant de définir et d'exécuter plusieurs conteneurs pour exécuter des applications complexes dans Docker, par exemple en conteneurisant une application MEAN.

Dans les blogs précédents sur Docker, vous auriez lu ce que sont les images Docker, les conteneurs Docker et ce dont ils ont besoin. Si vous n'avez pas lu à leur sujet, alors je vous demande de lire , avant de continuer avec ce blog sur Docker Compose.



Après avoir exploré les possibilités offertes par Docker, il est certainement très intéressant d'en savoir plus. N'est-ce pas? Au moins, je l'étais quand je suis tombé sur un défi.



Introduction à Docker Compose

La conteneurisation d'une seule application de service a été facile pour moi. Mais quand j'ai dû conteneuriser plusieurs services dans des conteneurs séparés, je me suis heurté à un barrage routier. Mon exigence était de conteneuriser et d'héberger une application MEAN stack.

Oui, vous avez bien lu. Une application full stack. Au départ, je pensais que ce n'était pas possible. Mais après avoir entendu parler de Docker Compose, je savais que tous mes problèmes seraient résolus.



Docker Compose peut être utilisé pour créer des conteneurs séparés (et les héberger) pour chacune des piles dans une application de pile MEAN. MEAN est l'acronyme de MongoDB Express Angular & NodeJs. La démo que je montrerai dans ce blog est également sur le même sujet.

En utilisant Docker Compose, nous pouvons héberger chacune de ces technologies dans des conteneurs séparés sur le même hôte et les amener à communiquer entre eux. Chaque conteneur exposera un port pour communiquer avec d'autres conteneurs.

La communication et la disponibilité de ces conteneurs seront gérées par Docker Compose.



Vous pouvez donc vous demander comment configurer toute cette infrastructure? Eh bien, laissez-moi vous donner une explication plus détaillée.

Dockerfile

Semblable à la façon dont nous faisons tourner n'importe quel conteneur à application unique en écrivant un fichier docker, nous devrons écrire un fichier docker distinct pour créer chacune des applications à conteneur unique. De plus, nous devrons également écrire un fichier Docker Compose qui fera le travail réel. Docker Compose File exécutera les différents fichiers docker pour créer les différents conteneurs et les laisser interagir les uns avec les autres.

Dans notre cas, nous avons une application full stack qui comprend MongoDB, ExpressJS, Angular et NodeJS. MongoDB s'occupe de la base de données principale, NodeJS et ExpressJS sont pour le rendu côté serveur et Angular pour le front-end.

Application MEAN Stack - Docker Compose - Edureka

Puisqu'il y a trois composants, nous devons faire tourner des conteneurs pour chacun des composants. Nous devons faire tourner les conteneurs de la manière suivante:

  1. Conteneur 1 - Angulaire
  2. Conteneur 2 - NodeJS et ExpressJS
  3. Conteneur 3 - MongoDB

Création de conteneurs Docker

Comme première étape de l'ancrage de l'application moyenne, écrivons le fichier docker pour créer chacun des composants, en commençant par le conteneur Angular. Ce fichier docker devra être présent dans le répertoire du projet avec le fichier ‘package.json’. Le 'package.json' contient les détails sur la version des dépendances qui doit être utilisée par 'NPM' pour créer l'application angulaire.

1. Dockerfile pour 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']

Comme toujours, notre première commande est de tirer une image de base, et nous tirons une image de base «node: 6».

Les deux commandes suivantes concernent la création d'un nouveau répertoire «/ usr / src / app» dans le conteneur Docker pour stocker les codes angulaires et en faire le répertoire de travail à l'intérieur du conteneur.

Nous copions ensuite le fichier ‘package.json’ de notre répertoire de projet vers l’intérieur du conteneur.

Nous exécutons ensuite la commande ‘npm cache clean’ qui nettoie le cache npm.

Après cela, nous exécutons la commande «npm install» qui démarre le téléchargement des plaques chauffantes nécessaires à l'hébergement de l'application Angular. Il commence à télécharger les plaques chauffantes en fonction des versions des dépendances spécifiées dans «package.json».

La prochaine exécution de la commande «RUN» consiste à copier tous les codes, dossiers présents du répertoire du projet vers l'intérieur du conteneur.

La commande ci-dessus demande au conteneur d'exposer le numéro de port 4200 pour communiquer avec le serveur principal pour envoyer des demandes faites par les utilisateurs accédant au client frontal via l'interface utilisateur Web.

Enfin, la dernière commande est la commande «RUN» pour démarrer «npm». Cela commence à exécuter les codes pour créer notre application Angular.

L'application Angular est maintenant prête, mais elle ne sera pas hébergée correctement en raison de sa dépendance à un serveur principal et à une base de données. Alors allons plus loin et écrivons un fichier docker pour la conteneurisation du serveur principal.

2. Dockerfile pour le back-end

Même ce dockerfile sera présent dans un répertoire de projet. Ce répertoire contiendra également le fichier ‘package.json’ pour définir les dépendances du serveur Express et d’autres exigences de NodeJS. Mais surtout, il contient le code du projet pour prendre en charge le serveur principal.

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']

Comme vous pouvez le voir, il existe de nombreuses similitudes entre les deux fichiers docker. Nous utilisons le même 'node: 6' que la couche d'image de base, créons un nouveau répertoire à l'intérieur du conteneur, en faisons le répertoire de travail et exécutons la commande 'npm install' entre autres. Mais la seule différence est le numéro de port exposé pour la communication. Dans ce cas, le numéro de port 3000 est défini. C'est là que le serveur sera hébergé et recherchera les demandes du client.

différence entre jquery et javascript

3. Base de données

Vous vous demandez peut-être pourquoi je n’ai pas mentionné «dockerfile For Database» dans le titre. La raison en est que nous n'avons en fait aucun besoin de personnalisation. Nous pouvons tout de suite extraire une image de base «MongoDB» pour stocker nos données et simplement exposer le numéro de port sur lequel elle est accessible.

Maintenant, la question qui vous préoccupe serait: où pourrais-je faire cela? Eh bien, nous pouvons le faire dans le fichier Docker Compose.

Fichier de composition Docker

Docker Compose File est un fichier YAML qui contient des détails sur les services, les réseaux et les volumes pour configurer l'application Docker.

Exécutez la commande ci-dessous pour trouver la version de votre moteur Docker.

docker -v

L'exécution de la commande renverra la version exécutée sur votre hôte. En fonction de la version de Docker Engine de votre hôte, téléchargez une version appropriée de Docker Compose. Vous pouvez rechercher la version appropriée à télécharger, à partir de Documentation officielle de Docker .

Depuis que j'exécute la version 17.05.0-ce de Docker Engine, j'ai utilisé la version 3 de Docker Compose.

Installez Docker Compose

Pour télécharger Compose, exécutez l'ensemble de commandes ci-dessous.

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

Notez que le numéro de version de la commande changera en fonction de la version de Docker Engine que vous exécutez.

Vous trouverez ci-dessous les commandes qui font partie de mon fichier Docker Compose.

version: '3.0' # spécifier la version de docker-compose # Définir les services / conteneurs à exécuter services: angular: # nom du premier service build: angular-app # spécifier le répertoire des ports Dockerfile: - '4200: 4200' # spécifier le mappage de ports express: # nom de la deuxième version de service: express-server # spécifier le répertoire des ports Dockerfile: - '3000: 3000' # spécifier les liens de mappage des ports: - database # lier ce service à la base de données du service de base de données: # nom de la troisième image de service: mongo # spécifier l'image pour construire le conteneur à partir des ports: - '27017: 27017' # spécifier la redirection de port

Je suis sûr que les commandes du fichier ci-dessus n’ont aucun sens pour vous. Alors, résolvons ce problème.

Dans la première ligne de code, j'ai défini la version de Docker Compose que j'utilise. Il s'agit d'une étape très importante si vous souhaitez que Compose fonctionne correctement sans générer d'erreur. Assurez-vous de télécharger la version de Docker Compose en fonction de la version de votre Docker Engine.

Après cela, j'ai défini trois conteneurs en utilisant le mot-clé 'services'. Ces services font référence aux trois composants de ma pile, front end, back end et base de données. Donc, dans ce cas, le nom de mes conteneurs sera le nom de mes services, c'est-à-dire «angulaire», «express» et «base de données».

Le mot-clé 'build' est utilisé pour indiquer que le fichier docker pour faire tourner ce conteneur est présent dans ce répertoire. Attendez, vous ne savez pas comment?

C'est simple. Le chemin doit être spécifié après «build:». Dans notre cas, «angular-app» et «express-server» sont des chemins vers deux répertoires qui peuvent être atteints à partir du répertoire où le fichier Docker Compose est présent. Pour notre conteneur de base de données, j'ai simplement dit utiliser une base «image: mongo» au lieu d'un chemin vers dockerfile.

Pour chacun de ces services, j'ai également spécifié les numéros de port qui peuvent être utilisés pour recevoir / envoyer des demandes d'autres conteneurs (services). 4200 en cas d'angulaire, 3000 en cas d'express et 27017 en cas de mongo.

De plus, le conteneur express a un «lien:» vers le conteneur de base de données, indiquant que toutes les données reçues côté serveur seront envoyées à la base de données où elles seront stockées.

Maintenant, enfin, nous sommes à la fin de la mise en place d'un Compose. Pour démarrer un Docker Compose et faire tourner les trois conteneurs avec trois services, nous devons simplement exécuter les deux commandes ci-dessous à partir du répertoire où le fichier Docker Compose (fichier YAML) est présent:

docker-compose build docker-compose up

La commande «docker-compose build» est utilisée pour construire / reconstruire les services tandis que la commande «docker-compose up» est utilisée pour créer / démarrer les conteneurs. Aller de l'avant! Essayez-le par vous-même.

Vous trouverez ci-dessous des captures d'écran d'images Docker en cours de création puis en cours d'exécution. Vous pouvez remarquer que l'image angulaire est en cours de création, puis étiquetée avec le nom «angulaire: dernier».

En outre, une image pour Express est créée avec le nom et la balise 'express: latest'.

Maintenant que l'image est créée, essayons de l'exécuter et donc de faire tourner un conteneur dans le processus. Ci-dessous, cette capture d'écran.

Ci-dessous se trouve la capture d'écran qui dit «Webpack: compilé avec succès», ce qui signifie que les trois services sont conteneurisés avec succès par Docker.

Maintenant que les conteneurs sont hébergés, vous pouvez voir les services actifs sur leurs ports respectifs. Tapez les numéros de port suivants dans votre navigateur Web pour interagir avec l'interface graphique de l'application MEAN.

localhost: 4200 - Application angulaire (front-end)
hôte local: 3000 - Express Server & NodeJS (back-end / côté serveur)
localhost: 27017 - MongoDB (Base de données)

Impressionné encore? Attendez, car Docker n'est pas encore terminé! Nous pouvons utiliser la commande «docker-compose scale = 'x'» pour augmenter / réduire facilement le nombre de déploiements. En d'autres termes, nous pouvons créer autant de conteneurs pour un service. Vous trouverez ci-dessous la commande complète pour mettre à l'échelle un service particulier en conteneurs «5»:

échelle docker-compose = 5

Mettre à l'échelle les services avec une telle facilité, les emballer et les conteneuriser de manière aussi rentable est ce qui fait de Docker l'un des meilleurs outils de déploiement et mon préféré.

Si vous avez encore des doutes sur ce concept, vous pouvez regarder la vidéo ci-dessous où j'ai expliqué le même concept avec une pratique pratique de la configuration d'un Docker Compose.

Docker Compose | Application de conteneurisation MEAN Stack | Tutoriel DevOps

Maintenant que vous avez découvert Docker, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Ce cours de formation à la certification Edureka Docker aide les apprenants à acquérir une expertise dans la mise en œuvre de Docker et sa maîtrise.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.