# 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 : ``` js 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 : ``` 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* : ```docker # É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