Fragments
Avec Compose, vous pouvez utiliser les fonctionnalités intégrées de YAML pour rendre votre fichier Compose plus propre et plus efficace. Les ancres et les alias vous permettent de créer des blocs réutilisables. C'est utile si vous commencez à trouver des configurations communes qui s'étendent sur plusieurs services. Avoir des blocs réutilisables minimise les erreurs potentielles.
Les ancres sont créées en utilisant le signe &
. Le signe est suivi d'un nom d'alias. Vous pouvez utiliser cet alias avec le signe *
plus tard pour référencer la valeur suivant l'ancre. Assurez-vous qu'il n'y a pas d'espace entre les caractères &
et *
et le nom d'alias suivant.
Vous pouvez utiliser plus d'une ancre et alias dans un seul fichier Compose.
Exemple 1
volumes:
db-data: &default-volume
driver: default
metrics: *default-volume
Dans l'exemple ci-dessus, une ancre default-volume
est créée basée sur le volume db-data
. Elle est plus tard réutilisée par l'alias *default-volume
pour définir le volume metrics
.
La résolution d'ancre a lieu avant l'interpolation des variables, donc les variables ne peuvent pas être utilisées pour définir des ancres ou des alias.
Exemple 2
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env
Si vous avez une ancre que vous voulez utiliser dans plus d'un service, utilisez-la en conjonction avec une extension pour rendre votre fichier Compose plus facile à maintenir.
Exemple 3
Vous pouvez vouloir remplacer partiellement les valeurs. Compose suit la règle définie par YAML merge type.
Dans l'exemple suivant, la spécification du volume metrics
utilise l'alias pour éviter la répétition mais remplace l'attribut name
:
services:
backend:
image: example/database
volumes:
- db-data
- metrics
volumes:
db-data: &default-volume
driver: default
name: "data"
metrics:
<<: *default-volume
name: "metrics"
Exemple 4
Vous pouvez aussi étendre l'ancre pour ajouter des valeurs supplémentaires.
services:
first:
image: my-image:latest
environment: &env
FOO: BAR
ZOT: QUIX
second:
image: another-image:latest
environment:
<<: *env
YET_ANOTHER: VARIABLE
NoteYAML merge s'applique seulement aux mappages, et ne peut pas être utilisé avec les séquences.
Dans l'exemple ci-dessus, les variables d'environnement doivent être déclarées en utilisant la syntaxe de mappage FOO: BAR
, tandis que la syntaxe de séquence - FOO=BAR
n'est valide que quand aucun fragment n'est impliqué.