Fermer

septembre 20, 2024

Conteneuriser votre serveur Node.js avec Docker : utilisation du réseau Docker Bridge personnalisé

Conteneuriser votre serveur Node.js avec Docker : utilisation du réseau Docker Bridge personnalisé


Introduction : Pourquoi la conteneurisation est importante

Dans le moderne développement de logicielsla conteneurisation est devenue une pratique standard, notamment pour les applications et microservices Node.js. Mais pourquoi la conteneurisation est-elle si précieuse ?

  • Cohérence entre les environnements : L’un des principaux défis du développement réside dans les incohérences environnementales. Une application qui s’exécute sur votre ordinateur local peut se comporter différemment en production en raison de différentes versions du système d’exploitation ou de dépendances manquantes. Docker résout ce problème en regroupant votre application avec toutes ses dépendances dans un conteneur. Que vous exécutiez l’application sur votre ordinateur local, un serveur cloud ou un pipeline CI/CD, le conteneur garantit un comportement cohérent.
  • Architecture des microservices : Node.js est populaire pour la création de microservices en raison de sa nature légère et asynchrone. Les conteneurs aident à déployer, faire évoluer et gérer ces microservices de manière indépendante, offrant ainsi aux développeurs la flexibilité nécessaire pour développer et déployer des fonctionnalités plus rapidement sans se soucier de casser l’ensemble de l’application.
  • Efficacité des ressources : Les conteneurs sont légers par rapport aux machines virtuelles traditionnelles, ce qui vous permet d’exécuter plusieurs services d’application sur le même serveur sans consommer de ressources excessives.

Dans ce blog, nous allons non seulement conteneuriser une application Node.js, mais nous démontrerons également comment Docker Compose peut être utilisé pour orchestrer plusieurs services, ce qui le rend idéal pour architectures de microservices.

En savoir plus: Maîtriser Bitbucket CI/CD : techniques avancées et bonnes pratiques pour un DevOps transparent

Conditions préalables

Docker doit être préinstallé sur la machine hôte.

Mise en place du projet

  • Nous utiliserons un simple serveur Node Express pour cette démonstration. Voici la structure du fichier de projet pour référence
  • node-docker-app/
    ├──src/
    │ ├── itinéraires/
    │ │ └──route.js
    │ ├── contrôleurs/
    │ │ └── bonjourController.js
    │ ├──app.js
    ├── .env
    ├── .dockerignore
    ├── Fichier Docker
    ├── package.json
    └── package-lock.json

1. Configuration du serveur NodeJS :

  • Nous commencerons par créer une simple API Node.js, puis nous la conteneuriserons avec Docker et l’exécuterons avec un service Redis à l’aide de Docker Compose.
App.js

App.js

2. Configuration des routes et du contrôleur :

Fichier d'itinéraires

Fichier d’itinéraires

  • Créons une simple API d’accueil qui renvoie un message Hello à partir d’un magasin Redis.
    Contrôleur.js

    Contrôleur.js

3. Ajout d’un script dans pakage.json :

  • Ajouter « dev : « noeud app.js » dans les scripts pour que nous puissions démarrer notre application en mode développement
    package.json

    package.json

4. Créez le fichier Docker :

  • Un Dockerfile est un fichier texte contenant des instructions pour construire votre code source
Fichier Docker

Fichier Docker

Explication des commandes Docker :

  • DE nœud : 18: Spécifie l’image de base qui contient Node.js. Cela garantit que notre application s’exécutera dans un environnement où Node.js est déjà installé.
  • RÉP TRAVAIL /usr/src/app: Définit le répertoire de travail à l’intérieur du conteneur. Cela garantit que toutes les commandes (comme la copie de fichiers ou l’exécution de npm install) sont exécutées par rapport à ce répertoire.
  • COPIER le paquet*.json ./: Copie les fichiers du package de votre ordinateur local vers le conteneur. Cela permet d’installer des dépendances sans copier l’intégralité de la base de code, ce qui réduit le temps de construction.
  • EXÉCUTER l’installation npm : Installe toutes les dépendances répertoriées dans le fichier package.json.
  • COPIE . . : Copie l’intégralité du code de l’application de votre ordinateur local dans le conteneur.
  • EXPOSER 8000: Indique à Docker quel port le conteneur utilisera pour communiquer avec le monde extérieur. Dans ce cas, le serveur NodeJs écoute sur le port 8080.
  • CMD [“npm”, “run”, “dev”]: Spécifie la commande pour exécuter l’application Node.js au démarrage du conteneur.

5. Configuration de la configuration du fichier Docker Compose à l’aide d’un réseau personnalisé :

  • Créer un fichier docker-compose.yml
  • Maintenant, ajoutons un autre service pour rendre Docker Compose plus significatif. Nous utiliserons Rédis pour stocker notre message de réponse.
Docker-compose.yml

Docker-compose.yml

Compose simplifie le contrôle de l’ensemble de votre pile d’applications, facilitant ainsi la gestion des services, des réseaux et des volumes dans un fichier de configuration YAML unique et compréhensible. Ensuite, avec une seule commande, vous créez et démarrez tous les services depuis votre fichier de configuration

Explication de docker-compose.yml :

version : ‘3’ : Spécifie la version du format de fichier Docker Compose.

Services:

  • back-end: Le nom du service pour l’application Node.js.
  • construire: Indique à Docker Compose de créer l’image de l’application Node.js à partir du répertoire actuel à l’aide du Dockerfile.
  • ports: « 8080 : 8080 » : mappe le port 8080 de votre machine hôte au port 8080 dans le conteneur, où l’application Node.js est en cours d’exécution.
  • environnement: définit les variables d’environnement pour le conteneur. Ici, nous définissons le port sur lequel l’application Node.js s’exécutera.
  • réseaux: backend-network : connecte ce service au réseau backend-network personnalisé.
  • redis : Le nom du service pour Redis.
  • image: « redis:alpine » : utilise l’image officielle Redis avec une petite base Alpine Linux.
  • ports: « 6379 : 6379 » : mappe le port 6379 de votre machine hôte au port 6379 par défaut de Redis à l’intérieur du conteneur.
  • réseaux: backend-network : connecte ce service Redis au même réseau personnalisé que le service Node.js.

Réseaux :

  • réseau backend : Définit un réseau de pont Docker personnalisé pour que le backend et les services Redis communiquent entre eux. Le pilote de pont est la valeur par défaut pour la mise en réseau isolée dans Docker.

Les réseaux de pont Docker personnalisés maintiennent vos conteneurs séparés les uns des autres et des autres réseaux sur votre hôte Docker. Cela signifie que les conteneurs sur différents réseaux ne peuvent pas communiquer directement entre eux, ce qui contribue à améliorer la sécurité et à éviter les conflits. » Comme vous pouvez le voir, nous mappons le port du conteneur Docker sur le port hôte du 8080 et utilisons un réseau de pont personnalisé Docker pour rendre notre conteneur complètement isolé.

6. Pour exécuter le processus de conteneurisation :

7. Test du point de terminaison du serveur :

  • Pour tester si notre serveur backend a démarré, nous pouvons envoyer une requête HTTP à : localhost:8080/api/test
    réponse du serveur

    réponse du serveur

Dans la première requête, comme vous pouvez le voir dans le corps de la requête, nous recevons le message : « Bonjour de NodeJS »

réponse redis du serveur

réponse redis du serveur

Dans la deuxième requête, comme vous pouvez le voir dans le corps de la requête, nous recevons le message : « Bonjour du cache Redis »

Conclusion

Félicitations! Nous avons maintenant configuré avec succès notre serveur Node.js conteneurisé avec Redis à l’aide d’un réseau de pont Docker personnalisé pour une communication de service améliorée. Nous avons expliqué la configuration d’un Dockerfile, la création d’une configuration Docker Compose et la définition d’un réseau personnalisé, garantissant que votre application Node.js est bien organisée, évolutive et déployable dans différents environnements.

Si vous recherchez l’aide d’un expert en Développement Webdécouvrez comment notre Service d’ingénierie des données peut aider vos projets.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link