Comment fonctionne Compose
Avec Docker Compose vous utilisez un fichier de configuration YAML, connu sous le nom de fichier Compose, pour configurer les services de votre application, puis vous créez et démarrez tous les services à partir de votre configuration avec la CLI Compose.
Le fichier Compose, ou fichier compose.yaml
, suit les règles fournies par la
spécification Compose pour définir les applications multi-conteneurs. Ceci est l'implémentation Docker Compose de la spécification Compose formelle.
Les composants informatiques d'une application sont définis comme des services. Un service est un concept abstrait implémenté sur les plateformes en exécutant la même image de conteneur, et configuration, une ou plusieurs fois.
Les services communiquent entre eux à travers des réseaux. Dans la spécification Compose, un réseau est une abstraction de capacité de plateforme pour établir une route IP entre conteneurs au sein de services connectés ensemble.
Les services stockent et partagent des données persistantes dans des volumes. La spécification décrit de telles données persistantes comme un montage de système de fichiers de haut niveau avec des options globales.
Certains services nécessitent des données de configuration qui dépendent de l'environnement d'exécution ou de la plateforme. Pour cela, la spécification définit un concept dédié de configs. Du point de vue du conteneur de service, les configs sont comparables aux volumes, en ce qu'ils sont des fichiers montés dans le conteneur. Mais la définition réelle implique des ressources et services de plateforme distincts, qui sont abstraits par ce type.
Un secret est une variante spécifique de données de configuration pour les données sensibles qui ne devraient pas être exposées sans considérations de sécurité. Les secrets sont rendus disponibles aux services comme des fichiers montés dans leurs conteneurs, mais les ressources spécifiques à la plateforme pour fournir des données sensibles sont suffisamment spécifiques pour mériter un concept et une définition distincts dans la spécification Compose.
NoteAvec les volumes, configs et secrets vous pouvez avoir une déclaration simple au niveau supérieur et ensuite ajouter plus d'informations spécifiques à la plateforme au niveau du service.
Un projet est un déploiement individuel d'une spécification d'application sur une plateforme. Le nom d'un projet, défini avec l'attribut
name
de niveau supérieur, est utilisé pour regrouper les ressources ensemble et les isoler d'autres applications ou d'autres installations de la même application spécifiée par Compose avec des paramètres distincts. Si vous créez des ressources sur une plateforme, vous devez préfixer les noms de ressources par le projet et définir l'étiquette com.docker.compose.project
.
Compose offre une façon de définir un nom de projet personnalisé et de remplacer ce nom, de sorte que le même fichier compose.yaml
peut être déployé deux fois sur la même infrastructure, sans changements, en passant simplement un nom distinct.
Le fichier Compose
Le chemin par défaut pour un fichier Compose est compose.yaml
(préféré) ou compose.yml
qui est placé dans le répertoire de travail.
Compose prend également en charge docker-compose.yaml
et docker-compose.yml
pour la rétrocompatibilité des versions antérieures.
Si les deux fichiers existent, Compose préfère le compose.yaml
canonique.
Vous pouvez utiliser des fragments et des extensions pour garder votre fichier Compose efficace et facile à maintenir.
Plusieurs fichiers Compose peuvent être fusionnés ensemble pour définir le modèle d'application. La combinaison de fichiers YAML est implémentée en ajoutant ou en remplaçant les éléments YAML basés sur l'ordre de fichier Compose que vous définissez. Les attributs simples et les cartes sont remplacés par le fichier Compose d'ordre le plus élevé, les listes sont fusionnées par ajout. Les chemins relatifs sont résolus basés sur le dossier parent du premier fichier Compose, chaque fois que des fichiers complémentaires en cours de fusion sont hébergés dans d'autres dossiers. Comme certains éléments de fichier Compose peuvent être exprimés à la fois comme des chaînes simples ou des objets complexes, les fusions s'appliquent à la forme développée. Pour plus d'informations, voir Travailler avec plusieurs fichiers Compose.
Si vous voulez réutiliser d'autres fichiers Compose, ou factoriser des parties de votre modèle d'application dans des fichiers Compose séparés, vous pouvez également utiliser
include
. Ceci est utile si votre application Compose dépend d'une autre application qui est gérée par une équipe différente, ou doit être partagée avec d'autres.
CLI
La CLI Docker vous permet d'interagir avec vos applications Docker Compose à travers la commande docker compose
, et ses sous-commandes. En utilisant la CLI, vous pouvez gérer le cycle de vie de vos applications multi-conteneurs définies dans le fichier compose.yaml
. Les commandes CLI vous permettent de démarrer, arrêter et configurer vos applications sans effort.
Commandes clés
Pour démarrer tous les services définis dans votre fichier compose.yaml
:
$ docker compose up
Pour arrêter et supprimer les services en cours d'exécution :
$ docker compose down
Si vous voulez surveiller la sortie de vos conteneurs en cours d'exécution et déboguer les problèmes, vous pouvez voir les journaux avec :
$ docker compose logs
Pour lister tous les services avec leur statut actuel :
$ docker compose ps
Pour une liste complète de toutes les commandes CLI Compose, voir la documentation de référence.
Exemple illustratif
L'exemple suivant illustre les concepts Compose décrits ci-dessus. L'exemple est non normatif.
Considérez une application divisée en une application web frontend et un service backend.
Le frontend est configuré à l'exécution avec un fichier de configuration HTTP géré par l'infrastructure, fournissant un nom de domaine externe, et un certificat de serveur HTTPS injecté par le magasin de secrets sécurisé de la plateforme.
Le backend stocke des données dans un volume persistant.
Les deux services communiquent entre eux sur un réseau back-tier isolé, tandis que le frontend est également connecté à un réseau front-tier et expose le port 443 pour un usage externe.


L'exemple d'application est composé des parties suivantes :
- 2 services, supportés par des images Docker :
webapp
etdatabase
- 1 secret (certificat HTTPS), injecté dans le frontend
- 1 configuration (HTTP), injectée dans le frontend
- 1 volume persistant, attaché au backend
- 2 réseaux
services:
frontend:
image: example/webapp
ports:
- "443:8043"
networks:
- front-tier
- back-tier
configs:
- httpd-config
secrets:
- server-certificate
backend:
image: example/database
volumes:
- db-data:/etc/data
networks:
- back-tier
volumes:
db-data:
driver: flocker
driver_opts:
size: "10GiB"
configs:
httpd-config:
external: true
secrets:
server-certificate:
external: true
networks:
# La présence de ces objets est suffisante pour les définir
front-tier: {}
back-tier: {}
La commande docker compose up
démarre les services frontend
et backend
, crée les réseaux et volumes nécessaires, et injecte la configuration et le secret dans le service frontend.
docker compose ps
fournit un instantané de l'état actuel de vos services, facilitant la visualisation des conteneurs qui sont en cours d'exécution, leur statut, et les ports qu'ils utilisent :
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
example-frontend-1 example/webapp "nginx -g 'daemon of…" frontend 2 minutes ago Up 2 minutes 0.0.0.0:443->8043/tcp
example-backend-1 example/database "docker-entrypoint.s…" backend 2 minutes ago Up 2 minutes