| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| docker-compose [Le 09/05/2022, 11:43] – ajout §[Problème] bcag2 | docker-compose [Le 14/04/2026, 07:28] (Version actuelle) – màj lien interne krodelabestiole |
|---|
| {{tag> Xenial Focal virtualisation}} | {{tag>noble serveur virtualisation}} |
| ---- | |
| |
| ====== Docker-Compose ====== | {{ :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 multiple conteneurs [[:docker]].\\ Pour plus d'informations, consulter [[https://docs.docker.com/compose/|la documentation officielle (en)]] | **[[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]]//. |
| | |
| | <note important> |
| | **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 : |
| | <code>docker-compose</code> |
| | mais |
| | <code>docker compose</code> |
| | 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. |
| | </note> |
| |
| ===== Installation ===== | ===== Installation ===== |
| ==== Depuis les dépôts officiels (conseillé) ==== | |
| <code bash>apt install docker-compose</code> | |
| |
| ==== Avec le binaire ==== | <note tip> |
| Comme la plupart des logiciels, la version obtenue par les dépôts officielles peut-être un peu ancienne | 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]]// |
| | </note> |
| | |
| | ==== Depuis les dépôts officiels d'Ubuntu (conseillé) ==== |
| | |
| | Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>docker-compose]]'' : |
| | <code bash>sudo apt install docker-compose</code> |
| | |
| | ==== 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. |
| |
| 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 : | Tout d'abord, si vous aviez installé une précédente version, supprimez-la, par exemple si version des dépôts officiels : |
| <code bash> | <code bash> |
| sudo apt remove docker-compose | sudo apt remove docker-compose |
| </code> | </code> |
| Puis télécharger la version que vous souhaitez à partir de [[https://github.com/docker/compose/releases]] par exemple, pour la v2.2.3 : [[https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64]]\\ | 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 déplacer le fichier dans : | puis créer un répertoire : |
| <code bash> | <code bash> |
| sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose | sudo mkdir -p /usr/local/lib/docker/cli-plugins |
| </code> | </code> |
| puis le rendre exécutable : | pour y déplacer le fichier : |
| <code bash> | <code bash> |
| sudo chown +x /usr/local/bin/docker-compose | sudo mv docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose |
| </code> | </code> |
| Vérifier que docker-compose s'appelle correctement : | puis rendre celui-ci exécutable : |
| <code bash> | <code bash> |
| docker-compose --version | sudo chmod +x /usr/local/bin/docker-compose |
| # qui doit retourné une ligne du type : | |
| Docker Compose version v2.2.3 | |
| </code> | </code> |
| | Vérifier que docker-compose s'appelle correctement : |
| | <code bash>docker compose --version</code> |
| | doit retourner une ligne du type ''Docker Compose version v5.0.1''. |
| |
| Sous [[:bionic]], la version de docker depuis les dépôt officiels est, en ce mois de mars 2022, la v19.03.13 qui est compatible avec docker-compose v2 | <note tip> |
| | La mise à jour peut être faite alors que des containers sont en cours d'utilisation. |
| | </note> |
| | |
| | ===== Utilisation ===== |
| | |
| | <note> |
| | 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 par<code bash>docker compose</code>sans le trait d'union ''-'' entre les 2 mots. |
| | </note> |
| | |
| | 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. |
| | |
| | <note important> |
| | 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. |
| | </note> |
| | |
| | <note tip> |
| | 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 ! |
| | </note> |
| | |
| | Pour arrêter les services, entrez la commande : |
| | docker compose down |
| | |
| | Pour afficher la liste des commandes disponibles : |
| | docker compose help |
| |
| ===== Problèmes ===== | ===== Problèmes ===== |
| Si un docker-compose retourne l'erreur : | |
| | Si la commande ''docker compose'' retourne l'erreur : |
| <code bash> | <code bash> |
| 1 error occurred: | 1 error occurred: |
| * error listing credentials - err: exec: "docker-credential-secretservice": executable file not found in $PATH | * error listing credentials - err: exec: "docker-credential-secretservice": executable file not found in $PATH |
| </code> | </code> |
| dans le fichier ~/.docker/config.json, modifier le mot-clé **credsStore** par **credStore**((source (en) : https://forums.docker.com/t/docker-credential-desktop-exe-executable-file-not-found-in-path-using-wsl2/100225/5)) | 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 ===== | ===== Voir aussi ===== |
| |
| - https://docs.docker.com/compose/install/#install-compose-on-linux-systems | * [[https://github.com/docker/compose|GitHub]] |
| - https://github.com/docker/compose#linux | * **(//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]].// |
| //Contributeurs : // | |
| * //[[:utilisateurs:bcag2|bcag2]]// | |