🚀 Création d'une Image Docker : Un Cas Concret
Nous allons créer une image Docker pour cette application afin de l'exécuter dans un conteneur. L'objectif est d'empaqueter cette application, avec toutes ses dépendances, dans une image Docker que nous pourrons exécuter sur n'importe quel système.
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/
- Dockerfile
- 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"
}
}Processus complet : Du code à l'image Docker
Écrire le Dockerfile
Le Dockerfile est la "recette" pour construire l'image. Créez un fichier
nommé Dockerfile dans le dossier app/ avec ce contenu :
# Image de base : Node.js léger sur Alpine Linux
FROM node:20-alpine
# Répertoire de travail dans le conteneur
WORKDIR /app
# Copier et installer les dépendances
COPY package.json ./
RUN npm install
# Copier le reste du code
COPY . .
# Exposer le port 3000
EXPOSE 3000
# Commande pour démarrer l'application
CMD ["npm", "start"]Explications des instructions :
FROM: Image de base à utiliserWORKDIR: Répertoire de travail dans le conteneurCOPY: Copier des fichiers du host au conteneurRUN: Exécuter une commande (npm install)EXPOSE: Déclarer le port écoutéCMD: Commande par défaut au lancement
Construire l'image Docker
Placez-vous dans le dossier app/, qui contient déjà le Dockerfile,
app.js et package.json, puis exécutez :
cd app
docker build -t my-node-app .Explication :
-t my-node-app: Nommer l'image "my-node-app".: Utiliser comme contexte de build le dossierapp/
Docker lira le Dockerfile, téléchargera l'image de base, exécutera les commandes, et créera votre image finale.
Vérifier l'image créée
Listez vos images Docker :
docker imagesVous devriez voir my-node-app avec sa taille et son ID.
Lancer un conteneur à partir de l'image
Exécutez l'image dans un conteneur :
docker run -d -p 3000:3000 my-node-appOptions :
-d: Mode détaché (arrière-plan)-p 3000:3000: Mapper le port 3000 du conteneur au port 3000 de l'hôtemy-node-app: L'image à utiliser
Tester l'application
Ouvrez votre navigateur et accédez à http://localhost:3000.
Vous devriez voir le message "Hello, Docker!" affiché par votre application Node.js s'exécutant dans le conteneur.
Vérifier et arrêter le conteneur
Listez les conteneurs en cours d'exécution :
docker psPour arrêter le conteneur :
docker stop <CONTAINER_ID>📌 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é. 🚀
Docker
Terminez le quiz du chapitre pour le marquer comme complété.
📘 Introduction à la création d'images
Construire des images Docker reproductibles à partir d'un Dockerfile pour empaqueter et déployer des applications de manière cohérente.
🐳 Réseau et stockage dans Docker
Dans l'écosystème Docker, la gestion du réseau et du stockage est cruciale pour permettre aux conteneurs de communiquer entre eux et en garantissant la persistance des données.