⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Fragments

Table des matières

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
Note

YAML 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é.