====== EXPLICATION ====== Les commandes docker run pouvant être contenu dans le dockerfile peuvent être assez longues et difficilement lisibles. Il faudra aussi lancer cette commande pour chaque nouveau démarrage de l'application et gérer les différents conteneurs séparement.\\ Pour ces motifs, le fichier docker-compose.yml permet de centraliser la gestion de multiples conteneurs d'une application docker en même temps depuis un seul fichier pour exécuter, définir des services, des volumes et mettre en relation différents conteneurs d'une application.\\ Il permet également de les relier via un ou plusieurs réseaux plus facilement. Son format d'écriture est le YAML.\\ Les fichiers .yml permettent de structurer les données. C'est un équivalent du XML ou du JSON et plus lisible pour un humain.\\ La commande docker compose va chercher un fichier docker-compose.yml qui décrit des objets docker (principalement des containers) et leur configuration :\\ * Nom d'une ou plusieurs images docker (éventuellement à construire et) à lancer\\ * variables d'environnement\\ * utilisateurs\\ * volumes (espaces de stockages persistés et points de montage)\\ * réseaux docker\\ * etc.\\ \\ Cela permet de décrire un environnement, et de toucher à ce qu'on appelle l'infrastructure as code.\\ \\ Voici des commandes courantes du docker-compose : ## Exécuter les services du docker-compose.yml docker-compose up -d : Exécuter les conteneurs en arrière-plan ## Lister des conteneurs du Docker Compose docker-compose ls -a ou --all : afficher aussi les conteneurs stoppés ## Sorties/erreurs des conteneurs du Docker Compose docker-compose logs -f : suivre en permanence les logs du conteneur -t : afficher la date et l'heure de la réception de la ligne de log --tail = : nombre de lignes à afficher à partir de la fin pour chaque conteneur. ## Tuer les conteneurs du Docker Compose docker-compose kill ## Stopper les conteneurs du Docker Compose docker-compose stop -t ou --timeout : spécifier un timeout en seconde avant le stop (par défaut : 10s) ## Démarrer les conteneurs du Docker Compose docker-compose start ## Arrêtez les conteneurs et supprimer les conteneurs, réseaux, volumes, et les images docker-compose down -t ou --timeout : spécifier un timeout en seconde avant la suppression (par défaut : 10s) ## Supprimer des conteneurs stoppés du Docker Compose docker-compose rm -f ou --force : forcer la suppression ## Lister les images utilisées dans le docker-compose.yml docker-compose images ====== STRUCTURE ====== Dans le cadre d'une d'un container composé de plusieurs services, nous pouvons définir une arborescence de dossiers pour une stack Docker avec plusieurs Dockerfiles pour plusieurs services, voici une structure typique que nous pouvons utiliser : project-root/ │ ├── docker-compose.yml ├── service1/ │ ├── Dockerfile │ └── ... (autres fichiers nécessaires pour service1) │ ├── service2/ │ ├── Dockerfile │ └── ... (autres fichiers nécessaires pour service2) │ └── service3/ ├── Dockerfile └── ... (autres fichiers nécessaires pour service3) ====== ATTRIBUT ====== build: ./web/ #indiquer le chemin d'un dockerfile pour construire son propre conteneur. build: # contexte où le conteneur devra récupérer les fichiers partagés nécessaires à son context: . dockerfile: ./dockerfile ports: #choix du port (8000 port machine hôte, 80 port du service du conteneur) - 8000:80 volumes: # mapping des répertoires partagés entre la machine hôte et le conteneur : - ./web:/var/www/html ====== LE SAVIEZ-VOUS ====== Un tiret dans un docker compose constitue un tableau