Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
docker-compose [Le 09/05/2022, 11:43] – ajout §[Problème] bcag2docker-compose [Le 14/04/2026, 07:28] (Version actuelle) – màj lien interne krodelabestiole
Ligne 1: Ligne 1:
-{{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'informationsconsulter [[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 mauvaissigne 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 binaireil 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 -/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 esten 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 chacunentre 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émentvoir 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]]//+