🚀 Création d’une Image Docker : Un Cas Concret
Dans cet exemple, nous allons empaqueter une application web simple en Node.js dans une image Docker afin de l’exécuter dans un conteneur. L’objectif est de standardiser le déploiement en encapsulant l’application et toutes ses dépendances dans une image reproductible.
📦 L’Application Node.js
Supposons que notre application est un serveur Node.js qui affiche “Hello, Docker!” sur le port 3000. La structure du projet est la suivante :
- app.js
- package.json
🐳 app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Docker!');
});
app.listen(3000, () => {
console.log('App is running on port 3000');
});
🐳 package.json
{
"name": "docker-node-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
🔧 Écriture du Dockerfile
Le Dockerfile est la “recette” qui permet de construire l’image Docker. Voici un exemple de Dockerfile pour notre application Node.js :
# Étape 1 : Utiliser une image de base légère avec Node.js
FROM node:14-alpine
# Étape 2 : Définir le répertoire de travail dans le conteneur
WORKDIR /app
# Étape 3 : Copier le fichier package.json et installer les dépendances
COPY package.json ./
RUN npm install
# Étape 4 : Copier le reste du code source de l'application
COPY . .
# Étape 5 : Exposer le port 3000 pour accéder à l'application
EXPOSE 3000
# Étape 6 : Définir la commande pour démarrer l'application
CMD ["npm", "start"]
Explications :
FROM node:14-alpine
: Utilise une image de base légère avec Node.js (version 14) sur Alpine Linux.WORKDIR /app
: Définit/app
comme répertoire de travail dans le conteneur.COPY package.json ./
etRUN npm install
: Installe les dépendances de l’application.COPY . .
: Copie l’ensemble du code source dans le conteneur.EXPOSE 3000
: Rend le port 3000 accessible de l’extérieur.CMD ["npm", "start"]
: Lance l’application lors du démarrage du conteneur.
🛠️ Construction de l’Image Docker
Pour construire l’image Docker, placez-vous dans le répertoire contenant le Dockerfile et exécutez la commande suivante :
docker build -t my-node-app .
Détails :
-t my-node-app
: Tag (nom) de l’image créée..
: Indique que le contexte de build est le répertoire courant.
Docker lira le Dockerfile, exécutera chaque instruction et générera une image contenant l’application Node.js.
🚀 Exécution de l’Image Docker
Pour lancer un conteneur à partir de l’image créée, utilisez :
docker run -d -p 3000:3000 my-node-app
Explications :
-d
: Lance le conteneur en mode détaché (en arrière-plan).-p 3000:3000
: Mappe le port 3000 du conteneur au port 3000 de l’hôte.my-node-app
: Nom de l’image à utiliser.
Une fois le conteneur en cours d’exécution, ouvrez votre navigateur et rendez-vous sur http://localhost:3000 pour voir l’application afficher “Hello, Docker!”.
📌 Résumé
- Dockerfile : Automatisation de la création d’une image Docker pour une application Node.js.
- Images Docker : Permettent d’encapsuler une application avec toutes ses dépendances pour garantir une exécution uniforme sur tout environnement.
- Conteneurs : Instances isolées d’une image qui s’exécutent de manière reproductible, quel que soit l’environnement (dev, test, prod).
Cette approche vous permet de standardiser et simplifier le déploiement d’applications en créant des images Docker, garantissant ainsi une exécution cohérente et fiable sur n’importe quelle machine où Docker est installé. 🚀