Présentation de Docker Compose
Problèmes du CLI Docker
La philosophie d'utilisation de Docker veut que l'on favorise la segmentation des différentes applications d'un système dans différents conteneurs, qui communiquent entre-eux, plutôt que la mise en place d'un conteneur qui ferait tourner tout les composants d'une application.
Au fur et à mesure des précédents exercices, de nombreuses options possibles sont venues s'ajouter à la commande docker run
et on se rend vite compte que la manipulation de nombreux conteneurs de cette manière peut devenir fastidieuse pour plusieurs raisons :
tout les conteneurs sont créés manuellement, il faut donc se souvenir de la totalité des options si l'on souhaite recréer le conteneur (par exemple si l'image a été mise à jour)
lorsqu'il y a des dépendances entre les conteneurs (par exemple une application web qui nécessite une base de données) il est nécessaire de connaître le bon ordre de lancement de chaque conteneurs. Lorsque l'on parle d'application d'une dizaine de conteneurs cela devient compliqué relativement complexe.
Docker Compose
Docker Compose est un outil qui permet de résoudre cette problématique.
La base de Docker Compose est le fichier (généralement appelé docker-compose.yml) qui permet de décrire l'ensemble des conteneurs que l'on souhaite faire tourner sur le serveur. C'est un fichier écrit en YAML, une format de représentation de données.
À titre d'exemple, un fichier Docker Compose ressemble à ceci (il n'est pas nécessaire de le comprendre bien entendu) :
version'3'
services
traefik
image traefik latest
container_name traefik
ports
"80:80"
"443:443"
volumes
/var/run/docker.sock:/var/run/docker.sock
/DOCKER/volumes/traefik/traefik.toml:/traefik.toml
/DOCKER/volumes/traefik/certs:/certsregistry
image registry2
container_name registry
environment
REGISTRY_AUTH htpasswd
REGISTRY_AUTH_HTPASSWD_PATH /auth/htpasswd
volumes
/DOCKER/volumes/registry/data:/var/lib/registry
/DOCKER/volumes/registry/auth:/authlabels
"traefik.frontend.rule=Host:registry.picasoft.net"
"traefik.port=5000"
"traefik.enable=true"
Les fichiers Docker Compose permettent ainsi de décrire un groupe de conteneurs, qui pourront être manipulés (démarrés, arrêtés, etc.) en même temps.