Pourquoi Docker Compose : multi-conteneurs ?
Dans un environnement professionnel, il est fréquent que plusieurs services ou microservices soient nécessaires pour construire une application complète. Docker Compose permet de gérer facilement et efficacement ces multiples conteneurs en les déployant ensemble dans un seul fichier de configuration.
Un cas d'usage concret pourrait être la construction d'un blog simple avec WordPress comme le CMS principal, MySQL pour la base de données et Nginx comme serveur Web. Docker Compose permet de définir et de gérer tous ces services en un seul endroit, facilitant ainsi le développement, le déploiement et le maintien de l'application.
Prerequis
- Connaissance de Docker
- Installation de Docker (https://docs.docker.com/get-docker/)
- Connaissance de base du terminal
Concepts fondamentaux
1. Fichier docker-compose.yml
Le fichier docker-compose.yml est la configuration principale qui définit les services, les réseaux et les volumes nécessaires pour votre application.
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:mysql:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_NAME: wordpress
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: wordpress
volumes:
db_data:
2. Services
Les services définissent des conteneurs individuels qui forment votre application.
services:
web:
image: nginx:latest
ports:
- "80:80"
3. Images
Les images sont les bases sur lesquelles Docker construit les conteneurs. Vous pouvez utiliser des images officielles ou créer vos propres images.
services:
web:
image: my-web-app:latest
4. Ports
Les ports permettent de mapper des ports entre le hôte et les conteneurs.
services:
web:
image: nginx:latest
ports:
- "80:80"
5. Environnement
Les variables d'environnement peuvent être définies pour configurer les services.
services:
web:
image: my-web-app:latest
environment:
- MY_ENV_VAR=value
Mise en pratique : projet fil rouge
Nous allons créer un simple blog avec WordPress et MySQL à l'aide de Docker Compose.
Étape 1 : Création du fichier docker-compose.yml
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:mysql:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_NAME: wordpress
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: wordpress
volumes:
db_data:
Étape 2 : Lancement du projet
docker-compose up -d
Cette commande démarre les deux services en arrière-plan.
Étape 3 : Accès au blog
Ouvrez un navigateur et allez à http://localhost:8080. Vous devriez voir l'interface d'installation de WordPress.
Erreurs frequentes et debugging
1. "Error starting userland proxy"
Cette erreur peut se produire si Docker ne peut pas démarrer le proxy utilisateur.
## ❌ Mauvais
docker-compose up -d
bash
## ✅ Correct
sudo systemctl restart docker
docker-compose up -d
2. "Cannot connect to the Docker daemon"
Cette erreur indique que vous n'avez pas les droits pour accéder au Docker daemon.
## ❌ Mauvais
docker-compose up -d
bash
## ✅ Correct
sudo docker-compose up -d
3. "Image not found"
Cette erreur se produit si l'image spécifiée n'est pas trouvée sur votre système local.
## ❌ Mauvais
docker-compose up -d
bash
## ✅ Correct
sudo docker pull wordpress:latest
sudo docker-compose up -d
Pour aller plus loin
- Docker Secrets : Apprenez à gérer les mots de passe et autres informations sensibles en utilisant Docker Secrets.
- Docker Networks : Explorez la création et la gestion des réseaux Docker pour une meilleure isolation entre les services.
- Docker Swarm : Découvrez comment déployer votre application sur un cluster Docker avec Docker Swarm.
Défi pratique : Créez une application simple qui utilise plusieurs services (par exemple, une base de données PostgreSQL, un backend Node.js et un frontend React) et configurez-le avec Docker Compose.