Docker Compose : Guide pour les débutants
Salut à toi, futur maître de Docker ! Je suis excité de devenir ton guide dans ce voyage dans le monde de Docker Compose. En tant que quelqu'un qui enseigne l'informatique depuis des années, j'ai vu beaucoup d'étudiants se débattre avec les concepts de conteneurisation. Mais n'ayez pas peur ! À la fin de ce tutoriel, vous orchestrerez des conteneurs comme un pro.
Qu'est-ce que Docker Compose ?
Avant de plonger dedans, penchons-nous sur les bases. Imaginez que vous préparez une grande fête (car qui n'aime pas une bonne analogie ?). Vous devez coordonner la nourriture, les boissons, la musique et les décorations. Docker Compose est comme votre outil de planification de fête, mais pour les conteneurs !
En termes techniques, Docker Compose est un outil pour définir et exécuter des applications Docker multi-conteneurs. Il vous permet d'utiliser un fichier YAML pour configurer les services, les réseaux et les volumes de votre application, puis de créer et de démarrer tous les services depuis votre configuration avec une seule commande.
Installation de Docker Compose
Maintenant, installons Docker Compose sur votre système. Le processus est aussi simple que du gâteau (mmm... gâteau).
Pour les utilisateurs de Windows et Mac
Si vous avez déjà installé Docker Desktop, félicitations ! Vous avez déjà Docker Compose. Il est inclus dans l'installation. Vous pouvez passer à la section suivante et faire une danse de joie.
Pour les utilisateurs de Linux
Pour nos amis sous Linux, vous devez installer Docker Compose séparément. Voici comment faire :
- Téléchargez la version stable actuelle de Docker Compose :
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Appliquez les permissions exécutables au binaire :
sudo chmod +x /usr/local/bin/docker-compose
- Vérifiez l'installation :
docker-compose --version
Si vous voyez le numéro de version, vous êtes prêt !
Création de votre premier fichier Docker-Compose
Maintenant que nous avons Docker Compose installé, créons notre premier fichier docker-compose.yml
. Ce fichier est comme la recette de votre application - il indique à Docker quels ingrédients (services) vous avez besoin et comment les préparer.
Créons une application web simple utilisant Python Flask et Redis. Ne vous inquiétez pas si vous n'êtes pas familier avec ces technologies - nous allons le garder simple !
Créez un nouveau répertoire pour votre projet et naviguez dedans :
mkdir mon_premier_projet_compose
cd mon_premier_projet_compose
Maintenant, créons notre fichier docker-compose.yml
:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
Décomposons cela :
-
version: '3'
: Cela spécifie la version du format de fichier Docker Compose que nous utilisons. -
services
: Cette section définit les conteneurs que nous voulons exécuter. -
web
: C'est notre service d'application Flask. -
build: .
: Cela indique à Docker de construire une image à partir d'un fichier Dockerfile dans le répertoire actuel. -
ports: - "5000:5000"
: Cela mappe le port 5000 de l'hôte au port 5000 dans le conteneur. -
redis
: C'est notre service Redis. -
image: "redis:alpine"
: Cela indique à Docker d'utiliser l'image officielle Redis de Docker Hub.
Création de l'application Flask
Maintenant, créons une application Flask simple. Créez un fichier nommé app.py
:
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return f'Hello World ! J\'ai été vu {redis.get("hits").decode("utf-8")} fois.'
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Cette application simple incrémente un compteur dans Redis chaque fois que la page est visitée.
Création du Dockerfile
Ensuite, nous devons créer un Dockerfile pour construire notre application Flask. Créez un fichier nommé Dockerfile
:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
Ce Dockerfile :
- Démarre à partir de l'image Python 3.7 Alpine
- Définit le répertoire de travail à
/code
- Définit les variables d'environnement pour Flask
- Installe les dépendances nécessaires
- Copie et installe les dépendances Python
- Expose le port 5000
- Copie le répertoire actuel dans le conteneur
- Définit la commande pour exécuter Flask
Création du fichier de requirements
Enfin, nous devons spécifier nos dépendances Python. Créez un fichier nommé requirements.txt
:
flask
redis
Exécution de votre application Docker Compose
Maintenant, passons à la partie passionnante - exécuter votre application ! Dans votre terminal, exécutez :
docker-compose up
Vous devriez voir Docker Compose construire vos images et démarrer vos services. Une fois terminé, ouvrez un navigateur web et allez à http://localhost:5000
. Vous devriez voir votre message "Hello World", et le compteur devrait augmenter chaque fois que vous actualisez la page.
Commandes Docker Compose
Voici un tableau pratique des commandes Docker Compose courantes :
Commande | Description |
---|---|
docker-compose up |
Créer et démarrer des conteneurs |
docker-compose down |
Arrêter et supprimer des conteneurs, réseaux, images et volumes |
docker-compose ps |
Lister des conteneurs |
docker-compose logs |
Voir les sorties des conteneurs |
docker-compose build |
Construire ou reconstruire des services |
docker-compose start |
Démarrer des services |
docker-compose stop |
Arrêter des services |
Conclusion
Félicitations ! Vous venez de créer et d'exécuter votre première application multi-conteneurs avec Docker Compose. Nous n'avons touché que la surface de ce que Docker Compose peut faire, mais j'espère que ce tutoriel vous a donné une bonne base pour construire.
Souvenez-vous, apprendre Docker et la conteneurisation est comme apprendre à cuisiner - cela prend de la pratique, mais une fois que vous avez compris, vous serez bientôt en train de préparer des recettes complexes de multi-conteneurs en un rien de temps !
Bonne composition, futurs chefs Docker !
Credits: Image by storyset