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 18/10/2023, 15:52] – vétuste krodelabestioledocker-compose [Le 14/04/2026, 07:28] (Version actuelle) – màj lien interne krodelabestiole
Ligne 1: Ligne 1:
-{{tag> Xenial Focal virtualisation VETUSTE}} +{{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).
  
-====== Docker-Compose ======+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>FIXME+<note important> 
 +**Docker Compose** est une extension de **[[:Docker]]**.
  
-Le contenu de cette page est aujourd'hui en grande partie obsolète. Docker compose est maintenant 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 :
-Elle ne s'installe plus de la même façon et on n'utilise plus la commande+
 <code>docker-compose</code> <code>docker-compose</code>
 mais mais
-<code>docker compose</code></note>+<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é !
  
-[[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)]]+De la même manière un fichier ''docker-compose.yml'' commençant par ''version='' doit être mis à jourcar cette directive n'est plus utilisée. 
 +</note>
  
 ===== Installation ===== ===== Installation =====
 +
 +<note tip>
 +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é) ==== ==== Depuis les dépôts officiels d'Ubuntu (conseillé) ====
-<code bash>apt install docker-compose</code>+ 
 +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) ==== ==== Depuis le dépôt docker (conseillé pour avoir une version plus récente) ====
-Reportez-vous à [[:docker#methode_conseilleeinstallation_depuis_les_depots_officiels|l'installation sur la page docker]]\\ 
-Cette solution installe le plug-in //docker-compose-plugin// à docker qui ajoute la sous-commande //compose// à la commande //docker//, aussi les appels se font par <code bash>docker compose</code> sans le tiret entre les 2 mots. 
-==== Avec le binaire (préférer la solution précédente) ==== 
-Comme la plupart des logiciels, la version obtenue par les dépôts officielles peut-être un peu ancienne 
  
-Docker-compose tient dans un fichier binaire, il est donc facile de passer à la dernière version ou à une version spécifique.\\+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 : 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 chmod +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> +
-Ces commandes toutes en un pour la mise à jour sur un serveur donne ((ne le faites sur un serveur en //production// que si vous êtes sûr de ce que vous faites)) : +
-<code bash> +
-wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 && sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose && docker-compose --version+
 </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''.
 +
 +<note tip>
 +La mise à jour peut être faite alors que des containers sont en cours d'utilisation.
 +</note>
 +
 +===== Utilisation =====
  
 <note> <note>
-La mise à jour peut-être faite alors que des containers tournent.\\ +Depuis la version ''2'', **Docker Compose** est une extension (//plug-in//de docker qui ajoute la sous-commande ''compose'' à la commande ''docker''.\\ 
-Sous [[:bionic]], la version de docker depuis les dépôt officiels est, en mars 2022, la v19.03.13 qui est compatible avec docker-compose v2+Son appel se fait donc par<code bash>docker compose</code>sans le trait d'union ''-'' entre les 2 mots.
 </note> </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]]//+