Docker Compose¶
Définition¶
Docker Compose permet de :
- manipuler facilement une pile logicielle complète (plusieurs conteneurs en interaction)
- créer un réseau pour les composants de cette même pile.
Exemple¶
Issu d'un exemple générique d'un tuto DevSecOps.
services:
service1: # Nom du premier service
image: nom_de_l_image # Image Docker utilisée pour ce service
ports:
- "port_hôte:port_conteneur" # Mappage des ports
environment:
- VARIABLE_1=valeur_1 # Variables d'environnement
volumes:
- /chemin/hote:/chemin/conteneur # Mappage de volumes
depends_on:
- service2 # Dépendances entre les services
service2:
# Configuration du deuxième service
# ...
networks:
mynetwork: # Définition d'un réseau personnalisé
driver: bridge # Type de réseau
volumes:
workspace:
Toutes les spécifications sont données par compose-spec.json
qui utilise le schéma https://json-schema.org/draft/2019-09/schema#
.
Premier fichier Compose¶
Lancer une application de micro-service via Docker Compose :
-
Copier le fichier
docker-compose.yml
qui permet de lancer un seul service, le serveur Jupyter :services: jupyter: image: myjupyter container_name: jupyter volumes: - $LOCAL_PATH:/home/jovyan/work/local ports: - "127.0.0.1:8888:8888"
Remarque
Il est possible de trouver
version: "3"
en haut des fichiersdocker-compose.yml
, cela a été supprimé depuis Docker Compose v2 (2022) qui utilise toujours le dernier schéma des fichiers Compose. -
Exporter la variable d’environnement LOCAL_PATH :
Remarque
Il est préférable d'utiliser un fichier
.env
pour gérer les variables d'environement. Il suffit de le mettre dans le même répertoire quedocker-compose.yml
. -
Exécuter le fichier YAML avec Docker Compose :
-
Exécuter des instructions dans le conteneur :
-
Terminer la pile logicielle :
Deuxième fichier Compose : utilisation avancée¶
- avec les balises, les sondes healthcheck
Vers Kubernetes¶
Kompose permet de convertir un descripteur docker-compose.yml
en manifestes Kubernetes. Pour cela, il faut un peu modifier le fichier docker-compose.yml
pour gérer proprement l'export du volume.
services:
jupyter:
image: myjupyter
container_name: jupyter
volumes:
- $PWD/data_jupyter:/home/jovyan/work/local
ports:
- "127.0.0.1:8888:8888"
- Pour installer Kompose :
ou télécharge directement le binaire
curl -L https://github.com/kubernetes/kompose/releases/download/v1.35.0/kompose-linux-amd64 -o ~/.local/bin/kompose &&\
chmod +x ~/.local/bin/kompose
- Pour convertir le fichier Docker Compose en manifeste :
Et cela produit 3 fichiers que nous utiliserons dans la partie sur Kubernetes :