Exercice Dockerfile A

Créer un Dockerfile pour un projet Node.js simple afin de containeriser l’application, puis exécuter ce conteneur.

Objectif de l’exercice

  • Créer une application Node.js containerisée.

Prérequis

  • Avoir Docker installé sur votre machine.

  • Avoir Node JS installé sur votre machine.

  • Connaître les bases de Node.js (installation de paquets, scripts npm, etc.).

Étape 1 : Préparer un projet Node.js simple

Créer un répertoire pour votre projet Dans votre terminal, créez un nouveau dossier pour votre projet et accédez-y :

mkdir my-node-app-a
cd my-node-app-a

Initialiser le projet Node.js Initialisez un nouveau projet Node.js dans ce dossier :

npm init -y

Cela crée un fichier package.json avec les configurations par défaut.

Créer un fichier app.js Créez un fichier nommé app.js dans le dossier racine du projet avec le contenu suivant :

const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

Mettre à jour package.json Ajoutez un script de démarrage dans le fichier package.json :

"scripts": {
  "start": "node app.js"
}

Votre projet Node.js est maintenant prêt pour être containerisé avec Docker.

Étape 2 : Créer un Dockerfile

Créer un fichier Dockerfile Dans le même répertoire que package.json, créez un fichier nommé Dockerfile sans extension.

Écrire le contenu du Dockerfile Ajoutez les instructions suivantes à votre fichier Dockerfile :

# Étape 1 : Utiliser une image de base Node.js
FROM node:14 # Utiliser une image de base Node.js

# Étape 2 : Définir le répertoire de travail dans le conteneur
WORKDIR /usr/src/app

# Étape 3 : Copier les fichiers `package.json` et `package-lock.json` dans le conteneur à la racine du WORKDIR
COPY package*.json ./

# Étape 4 : Installer les dépendances
RUN npm install

# Étape 5 : Copier le reste des fichiers du projet
COPY . .

# Étape 6 : Exposer le port que l'application utilise
EXPOSE 3000

# Étape 7 : Définir la commande pour démarrer l'application
CMD [ "npm", "start" ]

Voici une description de chaque étape :

  • FROM node:14 : Utilise l’image officielle de Node.js version 14.

  • WORKDIR /usr/src/app : Définit le répertoire de travail à l’intérieur du conteneur.

  • COPY package.json ./* : Copie les fichiers package.json et package-lock.json dans le conteneur.

  • RUN npm install : Installe les dépendances définies dans package.json.

  • COPY . . : Copie tout le code source de votre projet dans le conteneur.

  • EXPOSE 3000 : Indique que le conteneur écoute sur le port 3000.

  • CMD ["npm", "start"] : Démarre l’application avec la commande npm start.

Étape 3 : Construire et exécuter le conteneur

Construire l’image Docker Dans le terminal, assurez-vous d’être dans le répertoire contenant le Dockerfile, puis exécutez la commande suivante pour construire l’image :

docker build -t my-node-app-a .

Exécuter le conteneur Après la création de l’image, exécutez un conteneur à partir de cette image :

docker run -p 3000:3000 my-node-app-a

Cette commande mappe le port 3000 du conteneur au port 3000 de votre machine hôte, vous permettant d’accéder à l’application via http://localhost:3000.

Étape 4 : Tester l’application

Vérifier que l’application fonctionne Ouvrez votre navigateur et accédez à http://localhost:3000. Vous devriez voir le message “Hello World”.

Étape 5 : Nettoyer les ressources

Arrêter le conteneur Si vous avez démarré le conteneur en mode détaché (avec -d), vous pouvez l’arrêter avec :

docker ps   # Pour lister les conteneurs en cours d'exécution
docker stop <CONTAINER_ID>  # Pour arrêter le conteneur

Supprimer l’image Docker (facultatif) Si vous n’avez plus besoin de l’image Docker, vous pouvez la supprimer :

docker rmi my-node-app-a

Conclusion

Vous avez maintenant un projet Node.js containerisé avec Docker. Ce Dockerfile peut être adapté pour des projets plus complexes, avec davantage de dépendances ou de services (comme une base de données). N’oubliez pas que vous pouvez modifier le fichier Dockerfile pour ajouter des étapes supplémentaires comme le test de votre application avant de la lancer.