{{tag>noble serveur virtualisation}} {{ :icons:docker-mark-blue.png?110|Icône de Docker}} ====== Docker Compose ====== **[[wpfr>Docker_(logiciel)#Outils_associés|Docker Compose]]** permet de définir et exécuter de multiples conteneurs [[:docker]], en les décrivant et les paramétrant dans un fichier texte (ou plus précisément [[wpfr>YAML]], un format particulièrement simple et lisible). Ceci permet en premier lieu de simplifier extrêmement la ligne de commande ''[[man>docker]]'', et surtout //in fine// de décrire des services avec leurs environnements complets et éventuellement indépendants, et de toucher à ce qu'on appelle l'//[[wpfr>infrastructure as code]]//. **Docker Compose** est une extension de **[[:Docker]]**. C'était auparavant une application autonome. Elle ne s'installe plus de la même façon et on n'utilise plus la commande : docker-compose mais docker compose Certaines documentations anciennes sont donc à ajuster, et tomber sur la commande ''docker-compose'' dans une documentation est un (assez mauvais) signe de son ancienneté ! De la même manière un fichier ''docker-compose.yml'' commençant par ''version='' doit être mis à jour, car cette directive n'est plus utilisée. ===== Installation ===== Voir aussi les documentations officielles : * **(//en//)** //[[https://docs.docker.com/desktop/setup/install/linux/|Install Docker Desktop on Linux]]// * **(//en//)** //[[https://github.com/docker/compose#linux|Where to get Docker Compose]]// ==== Depuis les dépôts officiels d'Ubuntu (conseillé) ==== Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>docker-compose]]'' : sudo apt install docker-compose ==== Depuis le dépôt docker (conseillé pour avoir une version plus récente) ==== Reportez-vous au chapitre //[[:docker#Dépôt APT Docker]]//. ==== Avec le binaire (préférer une des solutions précédentes) ==== **Docker Compose** tient dans un fichier binaire, il est donc facile de passer à la dernière version ou à une version spécifique. Tout d'abord, si vous aviez installé une précédente version, supprimez-la, par exemple si version des dépôts officiels : sudo apt remove docker-compose Télécharger ensuite la version que vous souhaitez à partir de [[https://github.com/docker/compose/releases]] par exemple, pour la v5.0.1 : [[https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86_64]]\\ puis créer un répertoire : sudo mkdir -p /usr/local/lib/docker/cli-plugins pour y déplacer le fichier : sudo mv docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose puis rendre celui-ci exécutable : sudo chmod +x /usr/local/bin/docker-compose Vérifier que docker-compose s'appelle correctement : docker compose --version doit retourner une ligne du type ''Docker Compose version v5.0.1''. La mise à jour peut être faite alors que des containers sont en cours d'utilisation. ===== Utilisation ===== Depuis la version ''2'', **Docker Compose** est une extension (//plug-in//) de docker qui ajoute la sous-commande ''compose'' à la commande ''docker''.\\ Son appel se fait donc pardocker composesans le trait d'union ''-'' entre les 2 mots. La commande ''docker compose'' va chercher un fichier ''[[https://docs.docker.com/compose/intro/compose-application-model/#illustrative-example|docker-compose.yml]]'' qui décrit au format [[wpfr>YAML]] des services [[:docker]] et leur configuration : * nom d'un ou plusieurs services docker avec pour chacun, entre autre : * une //image// docker (éventuellement à construire -- //build// -- et) à lancer * des variables d'environnement (//environment//) * des //volumes// ou montages (type //[[:fstab#monter_un_repertoire_avec_l_option_bind_de_la_commande_mount|bind mount]]//) à utiliser * l'ID de utilisateur (//user//) qui lance le processus * le réseau (//network//) docker auquel se connecter * la déclaration et les paramètres des volumes (espaces de stockages persistés et points de montage) * la déclaration et les paramètres des réseaux docker etc. Pour la liste complète et la description de chaque élément, voir la [[https://docs.docker.com/reference/compose-file/|documentation officielle]] (malheureusement non traduite). Ces éléments sont assez directement tirés des paramètres de la commande ''[[man>docker]]''. Un seul fichier ''docker-compose.yml'' permet de décrire plusieurs containers (pour un serveur [[:LAMP]] par exemple [[:apache2|Apache]], [[:php|PHP-FPM]], [[:MariaDB]], [[https://github.com/mailhog/MailHog|MailHog]], etc.).\\ Le déploiement d'un environnement complet pour une, voire plusieurs application(s) web peut alors se résumer à la récupération d'un ''docker-compose.yml'' (parfois accompagné d'autres fichiers : ''Dockerfile'', fichiers de configuration destinés à être copiés dans le container, etc.) suivie de la commande : docker compose up La définition complète de l'environnement pèse ainsi seulement quelques kilo-octets, et son partage ou sa migration vers une nouvelle machine sont extrêmement rapides et faciles. Avec le format [[wpfr>YAML]] l'indentation est très importante et devient sémantique ! La moindre espace en trop ou au contraire oubliée au début d'une ligne rend le fichier inutilisable. Les fichiers sont très lisibles, clairs et rapides à écrire mais c'est un détail auquel il faut faire attention. Les développeurs d'applications web et autres services libres fournissent très souvent des fichiers ''docker-compose.yml'' en exemple, qu'on peut adapter rapidement, et exploiter en quelques minutes ! Pour arrêter les services, entrez la commande : docker compose down Pour afficher la liste des commandes disponibles : docker compose help ===== Problèmes ===== Si la commande ''docker compose'' retourne l'erreur : 1 error occurred: * error listing credentials - err: exec: "docker-credential-secretservice": executable file not found in $PATH dans le fichier ''~/.docker/config.json'', modifier le mot-clé ''credsStore'' pour ''credStore''.((source **(//en//)** : //[[https://forums.docker.com/t/docker-credential-desktop-exe-executable-file-not-found-in-path-using-wsl2/100225/5| Docker-credential-desktop.exe executable file not found in $PATH using wsl2 ]]//)) ===== Voir aussi ===== * [[https://github.com/docker/compose|GitHub]] * **(//en//)** [[https://docs.docker.com/compose/|documentation officielle]] * [[:Docker]] * [[https://podman.io/|Podman]], une alternative à **Docker** * Avec **Podman** un équivalent de **Docker Compose** serait **[[https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html|Quadlet]]** (basé sur [[:systemd]]), mais il s'en éloigne cette fois beaucoup plus (que **Podman** par rapport à **Docker**). * **[[https://doc.traefik.io/traefik/reference/install-configuration/providers/docker/|Traefik]]**, un //reverse proxy// pour **Docker** (et en particulier **Docker Compose**), permettant d'associer les services à des [[:web#noms de domaines]], gérer les redirections, les [[:tutoriel:securiser_apache2_avec_ssl|certificats SSL]], etc., simplement en ajoutant des directives aux fichiers ''docker-compose.yml''. ---- //Contributeurs : [[:utilisateurs:bcag2]], [[:utilisateurs:krodelabestiole]].//