Au fil des ans, les applications et les outils sont devenus plus complexes pour répondre aux exigences et attentes changeantes des utilisateurs. Mais cela peut créer des problèmes de compatibilité de code et d’accès à distance. Par exemple, une base de code qui fonctionne correctement sur Windows peut rencontrer des erreurs de compatibilité lorsqu’elle est installée sur Linux.

Heureusement, Docker vient à la rescousse. Mais vous vous demandez peut-être – qu’est-ce que Docker et comment ça aide ? Vous apprendrez tout cela et plus encore dans ce tutoriel.

Mais avant de commencer, voici quelques prérequis :

  • Connaissance des commandes Linux

  • Connaissance de l’utilisation du terminal

  • Connaissance de Node.js et Express.js

Table des Matières

  1. Qu’est-ce que Docker ?

  2. Comment installer Docker

  3. Projet Démo : Comment containeriser une application Node.js

  4. Conclusion

Qu’est-ce que Docker?

Docker est un outil open-source qui facilite l’exécution de logiciels de manière cohérente, peu importe où vous vous trouvez. Il le fait en mettant votre application et tout ce dont elle a besoin (comme des bibliothèques et des paramètres) dans un conteneur (sur lequel je reviendrai dans un instant).

Pensez à un conteneur comme une boîte : il contient votre application et toutes ses parties, de sorte qu’elle fonctionne exactement de la même manière sur votre ordinateur portable, un serveur ou dans le cloud. Docker aide les développeurs à éviter le problème du « ça marche sur ma machine » en veillant à ce que tout soit emballé ensemble de manière fiable et portable.

Docker a été créé par Solomon Hykes en 2013. Au fil des ans, il a évolué pour couvrir un large éventail d’outils. Il est devenu un outil incontournable pour améliorer le déploiement d’applications et les processus de mise en réseau.

Avant de continuer, voici quelques termes clés que vous rencontrerez au fur et à mesure de ce tutoriel :

Moteur Docker

Le moteur Docker, comme son nom l’indique, est le cœur des applications Docker. Il se compose d’un client et d’un serveur. Le client Docker, dans notre cas, est l’outil d’interface en ligne de commande ou le terminal Docker que nous utiliserons pour envoyer les commandes pertinentes pour l’exécution du projet. Le serveur Docker, communément appelé démon, est le serveur qui gère l’exécution des différentes images et conteneurs Docker.

Image Docker

Les images Docker sont des modèles préfabriqués de logiciels et systèmes exécutables. Docker propose une large gamme d’images allant des modèles de système d’exploitation aux modèles de serveur, en passant par les modèles de logiciels, et ainsi de suite. Vous pouvez trouver tout cela sur le registre Docker hub où ces images sont stockées.

Vous pouvez également construire une image spécifique et la héberger publiquement sur le Docker hub ou dans un registre privé.

Conteneurs Docker

Les conteneurs Docker sont des instances compactes exécutables construites sur le modèle généré qui est l’image Docker. Ils sont des paquets légers et portables qui incluent tout ce dont vous avez besoin pour exécuter un logiciel : le code, le runtime, les bibliothèques et les outils système. Un conteneur garantit que l’application s’exécute de manière cohérente quel que soit l’environnement.

Avantages de l’utilisation de Docker

Voici quelques-uns des avantages de l’utilisation de Docker en tant que développeur backend :

  • Docker est un excellent outil pour créer une culture DevOps solide pour le développement d’applications, car il clarifie les fonctions des équipes de développement et d’exploitation.

  • C’est également assez flexible, permettant un déploiement facile de microservices et d’applications backend monolithiques distribuées.

  • Il minimise également les erreurs de mauvaise configuration des dépendances lors des installations, car il transporte l’application avec ses dépendances nécessaires en une seule fois.

Pour continuer, nous allons plonger dans la manière de Dockeriser une application Node.JS Express. Mais avant cela, vous devrez installer Docker sur votre ordinateur. Vous pouvez passer cette étape si vous l’avez déjà installé.

Comment installer Docker

Docker est un outil multiplateforme qui peut être installé sur tous les systèmes d’exploitation populaires (Windows, Mac OS et distributions Linux). Pour ce tutoriel, je ne vais mettre en avant que la configuration de Docker sur Windows.

Si vous utilisez actuellement un système d’exploitation autre que Windows, vous pouvez facilement configurer Docker en suivant les étapes dans la documentation de Docker ici.

Pour les utilisateurs de Windows, il est essentiel que votre PC respecte les spécifications minimales, sinon l’installation ne sera pas réussie. Les exigences minimales sont les suivantes :

  • Une version de Windows OS d’au moins Windows 10 Home

  • Un PC avec WSL-2 installé ou Hyperviseur activé.

Avec cela, passons au téléchargement de l’exécutable d’installation de Docker. Vous pouvez télécharger le dernier installateur Docker ici. Après cela, exécutez le logiciel et acceptez les termes et conditions. Une fois l’installation réussie, lancez l’application. Voici ce que vous devriez voir :

Pour confirmer que vous avez installé l’application avec succès, accédez au terminal d’invite de commande et exécutez Docker –-version. Vous devriez voir la version exacte de l’outil Docker engine que vous avez installé si cela a réussi.

Nous allons maintenant passer au projet proprement dit.

Projet Démo : Comment containeriser une application Node.js

Dans cette section, nous allons containeriser un simple service backend basé sur Node.js avec des dépendances minimales. Cela vous montrera comment containeriser et porter une application en utilisant une technique de containerisation d’application Docker connue sous le nom de Dockerfile. Gardez à l’esprit que si vous avez une application plus complexe, il peut être préférable d’utiliser l’outil Docker compose YAML.

Pour commencer, nous allons configurer l’application Node.js d’exemple. Je fournirai l’ensemble du code dans cet article, ci-dessous. Mais d’abord, comprenons ce qu’est un dockerfile.

Qu’est-ce qu’un Dockerfile ?

Fondamentalement, un Dockerfile est un système de modèle qui permet à l’utilisateur d’entrer des commandes qui, une fois exécutées, peuvent produire une image fonctionnelle de l’application. Cette image peut ensuite être convertie en conteneur.

Voici quelques commandes incluses dans la structure de base d’un Dockerfile :

  • CMD : définit la commande par défaut à exécuter si aucune commande n’est spécifiée lorsque le conteneur démarre. Elle peut être remplacée en fournissant une commande lors de l’exécution du conteneur (docker run ...).

  • ENTRYPOINT : Spécifie la commande principale qui s’exécute toujours lorsque le conteneur démarre. Elle n’est pas facilement remplaçable, mais des arguments peuvent être ajoutés.
    Note que CMD et ENTRYPOINT spécifient tous deux quelle commande ou quel processus le conteneur doit exécuter lors de son démarrage. Mais ils sont utilisés différemment et ont des objectifs distincts. Utilisez CMD pour un comportement par défaut qui peut être remplacé. Utilisez ENTRYPOINT pour une commande fixe qui définit le but principal du conteneur.

  • FROM: Ceci est généralement la déclaration d’ouverture dans un Dockerfile. Cette commande récupère une image de base qui forme la fondation pour construire l’image de l’application concernée. Par exemple, dans notre application, l’image de base pour une application Node.js consiste à avoir le moteur Node.js de base installé.

  • WORKDIR: Cette syntaxe définit le répertoire de travail actif où les fichiers de l’application seront situés dans le conteneur défini. Un dossier automatique sera créé s’il n’est pas déjà disponible.

  • COPY: Cette syntaxe est utilisée pour s’assurer que les fichiers nécessaires à la création de l’image Docker à partir du fichier de projet de base de code sont copiés dans le conteneur Docker nouvellement créé. Les répertoires de ces fichiers sont soigneusement mis en évidence.

  • RUN: Cette syntaxe spécifie le script que vous souhaitez exécuter avant de terminer la conteneurisation de l’application.

  • ENV: Cette syntaxe est utilisée pour mettre en évidence les variables d’environnement et les secrets qui seront invoqués pendant le processus d’exécution de l’application.

  • EXPOSE: Cette syntaxe définit le port de navigation par lequel l’application communique avec l’internet externe. Par exemple, EXPOSE: 3000 mappe l’interface web de l’application à localhost:3000.

Pour approfondir Docker, passons rapidement en revue quelques commandes Docker clés que nous utiliserons tout au long de ce tutoriel :

  • Docker ps: Cette commande liste tous les conteneurs en cours d’exécution sur votre terminal Docker.

  • Docker run: Cette commande exécute une image Docker pour déclencher une instance d’un conteneur.

  • Docker build: Cette commande fonctionne sur la base du fichier Docker pour générer une image d’un service ou d’une application.

  • Docker rm: cette commande peut être utilisée pour supprimer une image en utilisant les détails d’identification de l’image.

Comment conteneuriser l’application

Maintenant, nous pouvons commencer à conteneuriser notre application simple Node/Express. Pour suivre le tutoriel, vous pouvez obtenir le code de base ici.

En le testant localement, il renvoie une API CRUD où vous pouvez créer, récupérer, mettre à jour et supprimer des produits lors de son exécution. Nous allons empaqueter l’application pour un déploiement facile sur le cloud en utilisant notre moteur Docker. Nous pourrons le faire en utilisant l’outil Dockerfile que nous avons discuté précédemment.

Étape 1 : Créez le Dockerfile

Dans le dossier de votre projet, créez un fichier nommé Dockerfile. Assurez-vous que le nom est exactement « Dockerfile » (sans extension, et sensible à la casse dans certains systèmes – donc assurez-vous qu’il est en majuscules).

Si vous utilisez un éditeur de code, créez simplement un nouveau fichier nommé Dockerfile. Si vous utilisez un éditeur de texte basique, enregistrez le fichier avec le nom Dockerfile et assurez-vous qu’il ne se sauvegarde pas accidentellement avec une extension comme .txt.

Ensuite, entrez la première ligne :

FROM Node:18-alpine

Cette commande récupère l’image de base que nous utiliserons pour alimenter notre application Express qui est le moteur Node en lui-même.

Vous vous demandez peut-être à quoi sert alpine. Alpine est une version allégée, beaucoup plus compressée d’une image Docker. Elle exclut l’incorporation de packages supplémentaires non directement essentiels au système d’exploitation de base. Il est recommandé comme une bonne pratique standard d’utiliser des distributions légères pour une exécution plus rapide et une utilisation facile.

Étape 2 : Définir le répertoire de travail

WORKDIR /app

Cela définit le répertoire de travail de l’image sur le dossier /app du conteneur. Cela garantit que toutes les actions sur les fichiers se déroulent ici et que tous les fichiers sont copiés dans ce répertoire.

Étape 3 : Copier les fichiers nécessaires

COPY package.json

Cette commande copie les fichiers package.json qui contiennent une liste de dépendances et de packages à installer pour alimenter notre application.

Étape 4 : Exécuter un script de configuration

RUN npm install

Cette commande garantit que toutes les dépendances nécessaires pour alimenter nos applications Node.js sont installées sur le conteneur.

Étape 5 : Copier les fichiers de code

COPY . .

Cette commande garantit que tous les fichiers du répertoire local sont copiés dans le système de fichiers du conteneur au sein du répertoire de travail établi.

Étape 6 : Exposer le port du serveur



EXPOSE 3000

Cette commande expose le port du serveur que nous avons l’intention d’utiliser pour accéder au conteneur. Dans ce cas, c’est le port 3000.

Étape 7 : Inclure la commande pour mettre le conteneur en marche

CMD ["npm", "run", "dev"]4

Cette commande est exécutée à la fin afin d’alimenter l’application Node.js. Elle exécute simplement la commande npm run dev, qui est ce que vous utiliseriez pour un environnement de développement. Pour l’exécuter dans un environnement de production, vous utiliseriez à la place la commande npm start.

Après avoir terminé ce processus, voici à quoi devrait ressembler la structure finale du Dockerfile :

FROM Node:18-alpine
WORKDIR /app

COPY package.json

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

Tester le conteneur Docker

Pour résumer, nous allons créer une image Docker de notre application Node.js. Pour cela, exécutez la commande docker build -t nodeapp .. La commande docker build construit l’image, tandis que le -t permet de spécifier les détails de l’étiquette de l’image.

Dans notre cas, nous attribuons le nom nodeapp à l’image que nous allons créer et l’image sera créée dans le répertoire de travail.

Félicitations ! Vous avez réussi à créer votre première image Docker. Pour voir toutes les images sur votre dépôt local, exécutez la commande docker images.

Pour créer une instance fonctionnelle de votre image pour des tests, exécutez la commande docker run nodeapp.

Nous utilisons Mongo DB comme base de données pour ce tutoriel, donc nous devrons passer l’URL MongoDB en tant que variable d’environnement au conteneur Docker. Les variables d’environnement vous aident à protéger certaines variables clés qui ne devraient pas être exposées au public. D’autres variables pouvant être passées en tant que variables d’environnement incluent les clés API et les codes de chiffrement.

Pour passer l’URL MongoDB au conteneur Docker, nous utilisons l’étiquette -e pour garantir que Docker reconnaît la valeur correspondante saisie en tant que variable d’environnement.

docker run -e JWT_SECRETS={entrez la valeur de votre choix} -e MONGO_URL={L'url mongo de votre choix} nodeapp.

Pour utiliser également le conteneur en arrière-plan, il suffit d’ajouter l’étiquette -d qui représente l’option de détachement. Cette option permet au conteneur de s’exécuter en arrière-plan malgré la fermeture du terminal de ligne de commande.

En cas d’absence d’erreurs, la navigation vers localhost:5000 devrait également produire quelque chose de similaire à l’image ci-dessous.

Conclusion

Dans cet article, vous avez appris ce qu’est Docker et comment il fonctionne, ainsi que ses commandes courantes et comment l’utiliser pour containeriser une application backend. Passons aux bases, vous pouvez également explorer d’autres utilisations de Docker dans l’intégration et le développement continus. Pour en savoir plus sur Docker, vous pouvez consulter sa documentation ici.

Je vous recommande également d’utiliser vos nouvelles connaissances pour déployer des projets avec des cas d’utilisation réels, ainsi que d’explorer le réseau dans les applications Docker. Pour rendre votre application accessible, vous pouvez facilement déployer l’image Docker que vous avez créée sur l’un des principaux fournisseurs de services cloud tels que AWS, GCP, Azure, etc.

N’hésitez pas à me poser des questions ! Vous pouvez également consulter mes autres articles ici. À la prochaine, continuez à coder !