Pourquoi Docker pour les débutants ?
Docker est une technologie qui a révolutionné la façon dont les développeurs créent, partagent et déployent des applications. Au quotidien, un développeur peut avoir besoin de Docker pour plusieurs raisons :
- Isolation : Il permet de créer des environnements isolés pour chaque application, évitant les conflits entre les dépendances.
- Portabilité : Les applications Docker sont exécutées dans des conteneurs qui peuvent être facilement déplacés d'un environnement à l'autre, y compris en production.
- Rapidité : L'installation et le démarrage de nouvelles applications se font beaucoup plus rapidement avec Docker.
Un cas d'utilisation concret serait de développer une application web simple. En utilisant Docker, on peut facilement créer un environnement qui inclut l'application, les serveurs Web (comme Nginx), la base de données (comme MySQL) et tout autre service nécessaire.
Prerequis
- Connaissance de la terminologie basique du développement web (HTML, CSS, JavaScript).
- Un environnement de développement intégré (IDE) comme Visual Studio Code.
- Docker installé sur votre machine. Vous pouvez le télécharger depuis docker.com.
Concepts fondamentaux
Image Docker
Une image Docker est une version immuable et portable d'une application avec toutes les dépendances nécessaires pour qu'elle puisse s'exécuter.
## Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
Conteneur Docker
Un conteneur est une instance en cours d'exécution d'une image Docker.
docker run -d --name my_app -p 3000:3000 my_image
Volume Docker
Les volumes permettent de stocker des données persistantes et sont liés aux conteneurs.
docker volume create my_volume
docker run -v my_volume:/app/data my_image
Mise en pratique : projet fil rouge
Nous allons créer un simple serveur web qui affiche "Bonjour, Docker!" sur le navigateur. Voici les étapes :
- Créer un nouveau dossier pour votre projet et y entrer dans la console.
- Initialiser un nouveau projet Node.js.
mkdir docker-tutorial
cd docker-tutorial
npm init -y
- Installer Express, le framework Web que nous utiliserons.
npm install express
- Créer un fichier
app.jsavec le code suivant :
// app.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Bonjour, Docker!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
- Créer un fichier
Dockerfiledans le même répertoire :
## Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]
- Construire l'image Docker.
docker build -t my_docker_app .
- Démarrer le conteneur.
docker run -d --name my_container -p 3000:3000 my_docker_app
- Vérifier que le serveur est en cours d'exécution :
docker ps
- Accéder à l'application depuis votre navigateur à l'adresse
http://localhost:3000.
Erreurs frequentes et debugging
1. Erreur : "Cannot find module 'express'"
Code incorrect :
// app.js
const express = require('express');
Correction :
Assurez-vous que Express est bien installé dans votre projet.
npm install express
2. Erreur : "Port is already in use"
Code incorrect :
docker run -d --name my_container -p 3000:3000 my_docker_app
Correction :
Assurez-vous que le port 3000 n'est pas déjà utilisé sur votre machine.
lsof -i :3000
3. Erreur : "Cannot start container: OCI runtime error"
Code incorrect :
docker run -d --name my_container -p 3000:3000 my_docker_app
Correction :
Assurez-vous que Docker est bien installé et en cours d'exécution.
docker info
Pour aller plus loin
1. Créer des images multi-stage pour améliorer la taille de l'image finale.
- Lien vers le concept avancé : Docker Multi-Stage Builds
2. Utiliser Docker Compose pour gérer plusieurs services.
- Lien vers le concept avancé : Docker Compose
3. Configurer des volumes pour persister les données.
- Lien vers le concept avancé : Docker Volumes
Défi pratique
Créez une application Node.js simple avec Express qui affiche la date et l'heure actuelles. Utilisez Docker pour construire et exécuter cette application.