Icône de Docker

Docker Compose

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 YAML, un format particulièrement simple et lisible).

Ceci permet en premier lieu de simplifier extrêmement la ligne de commande 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'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.

Voir aussi les documentations officielles :

Depuis les dépôts officiels d'Ubuntu (conseillé)

Il suffit d'installer le paquet 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 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.
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
docker compose

sans le trait d'union - entre les 2 mots.

La commande docker compose va chercher un fichier docker-compose.yml qui décrit au format 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 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 documentation officielle (malheureusement non traduite). Ces éléments sont assez directement tirés des paramètres de la commande docker.

Un seul fichier docker-compose.yml permet de décrire plusieurs containers (pour un serveur LAMP par exemple Apache, PHP-FPM, MariaDB, 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 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

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.1)

  • Podman, une alternative à Docker
  • Avec Podman un équivalent de Docker Compose serait Quadlet (basé sur systemd), mais il s'en éloigne cette fois beaucoup plus (que Podman par rapport à Docker).
  • Traefik, un reverse proxy pour Docker (et en particulier Docker Compose), permettant d'associer les services à des noms de domaines, gérer les redirections, les certificats SSL, etc., simplement en ajoutant des directives aux fichiers docker-compose.yml.

Contributeurs : bcag2, krodelabestiole.


  • docker-compose.txt
  • Dernière modification: Le 20/12/2025, 06:13
  • par krodelabestiole