{{tag>sysadmin docker docker-compose}}
====== docker-compose ======
docker-compose fait parti d'un ensemble d'outils de l'environnement Docker qui comprend:
* docker engine: le moteur docker
* docker machine
* docker swarm
docker-compose est un orchestrateur. Lancer un nombre important de conteneurs n'est pas forcément simple. Il faut:
* Coordonner les conteneurs;
* Gérer les dépendances (volumes, réseaux, partages de fichiers etc).
docker-compose orchestre/gère des services. Un service est composé d'un ou plusieurs conteneurs.
docker-compose est paramétré via un fichier texte formaté en YAML, facilement lisible et pouvant être intégré à un outil de révision (versioning) tel que git.
===== Installation =====
apt-get install docker-compose
===== Commandes ======
Construire les images
docker-compose build
Lance l’exécution des services définis, construit les images si nécessaire
docker-compose up -d
Pour gérer les services:
#etat des services
docker-compose ps
# démarrage / arret / destruction d'un service
docker-compose start srv_name
docker-compose stop srv_name
docker-compose rm srv_name
===== Variables =====
Le docker-compose.yml peut comporter des variables qui seront résolues en fonction des valeurs définies dans l'environnement. Par défaut le commande docker-compose lit les valeur du fichier .env s'il existe.
COMPOSE_PROJECT_NAME=test
HOSTNAME=localhost
Dans cet exemple deux variables sont définies, on récupère leur valeur au sein du fichier docker-compose.yml via la syntaxe **%%${MA_VARIABLE}%%**:
${HOSTNAME}
Pour chaque service, on peut redéfinir le fichier contenant les variables d'environnement:
services:
web:
env_file: variables.env
===== Éléments de syntaxe =====
Le fichier docker compose est introduit par un numéro de version majeur (il est également précisé dans la documentation officielle de préciser la version mineure) les mots clés utilisés/disponibles peuvent fortement varier en fonction de la version utilisée.
==== Directive environnement ====
https://docs.docker.com/compose/compose-file/compose-file-v3/#environment
===== Vérifier la syntaxe =====
Après toute modification du fichier, la syntaxe et la complétions des variables du fichier docker-compose.yml peuvent
docker-compose config
La commande retourne sur la sortie standard les valeurs définies dans le fichier: les variables utilisés dans le fichier sont expansées.
===== Scaling =====
docker-compose permet le passage à l’échelle (scaling) via l'option scale de la commande up:
# lance 3 instances du service srv_name
docker-compose up -d --scale srv_name=3
Chaque conteneur doit avoir un nom unique. Le passage à l'échelle échouera si l'utilisateur a défini un nom de conteneur via la directive **container-name**. Le nom du conteneur créé lors de l'opération de mise à l'échelle est la concaténation du nom de projet, du nom de service et d'un numéro d'instance. Il est possible de redéfinir le nom de projet via la variable d'environnement **COMPOSE_PROJECT_NAME**. Par défaut le nom de projet correspond au nom du répertoire parent.
===== Références =====
* https://docs.docker.com/compose/compose-file/
* https://docs.docker.com/compose/compose-file/compose-file-v3/
* https://docs.docker.com/compose/compose-file/compose-versioning/#version-3
* https://docs.docker.com/compose/compose-file/compose-file-v3/#environment