Docker pour développeurs : images, conteneurs et Compose
Vous avez probablement entendu parler de Docker et des conteneurs, mais vous n'êtes peut-être pas sûr de leur place dans votre flux de travail quotidien. Ou peut-être avez-vous essayé Docker, mais les concepts d'images, de conteneurs et de Compose vous semblent confus. Ce guide vous présentera l'essentiel avec des exemples pratiques, afin que vous puissiez commencer à utiliser Docker efficacement dans vos projets.
Que sont les images et les conteneurs Docker ?
Considérez une image Docker comme un plan pour votre application. Elle contient tout ce qui est nécessaire pour exécuter votre code : le système d'exploitation, l'environnement d'exécution, les bibliothèques et vos fichiers d'application. Les images sont immuables et construites à partir d'un Dockerfile.
Un conteneur est une instance en cours d'exécution d'une image. Lorsque vous démarrez un conteneur, Docker crée un environnement isolé à partir de l'image. Vous pouvez exécuter plusieurs conteneurs à partir de la même image, chacun avec son propre état.
Différences clés
| Image | Conteneur |
|---|---|
| Modèle en lecture seule | Instance exécutable |
| Construite à partir d'un Dockerfile | Créé à partir d'une image |
| Stockée dans un registre | S'exécute sur l'hôte |
| Immuable | Éphémère (peut être arrêté, démarré, supprimé) |
Construire votre première image Docker
Créons une application Node.js simple et conteneurisons-la. Commencez par un Dockerfile à la racine de votre projet :
# Utiliser une image Node.js officielle comme image parente
FROM node:18-alpine
# Définir le répertoire de travail
WORKDIR /app
# Copier package.json et package-lock.json
COPY package*.json ./
# Installer les dépendances
RUN npm ci --only=production
# Copier le reste du code de l'application
COPY . .
# Exposer le port sur lequel l'application s'exécute
EXPOSE 3000
# Définir la commande pour exécuter l'application
CMD ["node", "server.js"]
Construisez l'image avec :
docker build -t my-node-app .
Exécutez un conteneur à partir de l'image :
docker run -p 3000:3000 -d my-node-app
Votre application est maintenant accessible à l'adresse http://localhost:3000.
Gérer les conteneurs
Voici les commandes essentielles pour gérer les conteneurs :
docker ps– lister les conteneurs en cours d'exécutiondocker ps -a– lister tous les conteneurs (y compris ceux arrêtés)docker stop <container_id>– arrêter un conteneur en cours d'exécutiondocker rm <container_id>– supprimer un conteneur arrêtédocker logs <container_id>– afficher les logs d'un conteneurdocker exec -it <container_id> sh– ouvrir un shell dans un conteneur en cours d'exécution
Simplifier les applications multi-conteneurs avec Docker Compose
Les applications réelles ont souvent besoin de plusieurs services : un serveur web, une base de données, un cache, etc. Les gérer avec des commandes docker run individuelles est fastidieux. Docker Compose vous permet de définir et d'exécuter des applications multi-conteneurs à l'aide d'un fichier YAML.
Créez un fichier docker-compose.yml :
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Démarrez tous les services avec :
docker compose up -d
Arrêtez-les et supprimez-les avec :
docker compose down
Bonnes pratiques pour le développement
- Utilisez .dockerignore pour exclure les fichiers inutiles (node_modules, .git) du contexte de build.
- Tirez parti de la mise en cache des couches : ordonnez les instructions du Dockerfile pour que les dépendances soient installées avant de copier le code source.
- Utilisez des builds multi-étapes pour garder les images de production légères.
- Stockez les données dans des volumes pour les bases de données et autres services avec état.
- Utilisez Compose pour le développement local afin de reproduire des environnements proches de la production.
FAQ
Quelle est la différence entre une image et un conteneur ?
Une image est un modèle en lecture seule qui définit l'application et ses dépendances. Un conteneur est une instance en cours d'exécution d'une image, avec une couche inscriptible par-dessus.
Puis-je utiliser Docker Compose en production ?
Docker Compose est principalement conçu pour le développement et les tests. Pour la production, envisagez des outils d'orchestration comme Kubernetes ou Docker Swarm.
Comment persister les données dans Docker ?
Utilisez des volumes ou des montages bind. Les volumes sont gérés par Docker et constituent le moyen privilégié pour persister les données générées par les conteneurs.
Prêt à conteneuriser votre application ? Si vous avez besoin de convertir de la documentation ou des guides en PDF pour votre équipe, essayez notre convertisseur Word en PDF pour partager des documents soignés.