Fusion
Compose vous permet de définir un modèle d'application Compose via plusieurs fichiers Compose. Ce faisant, Compose suit certaines règles pour fusionner les fichiers Compose.
Ces règles sont décrites ci-dessous.
Mappage
Un mappage
YAML est fusionné en ajoutant les entrées manquantes et en fusionnant celles en conflit.
Fusion des arbres YAML d'exemple suivants :
services:
foo:
key1: value1
key2: value2
services:
foo:
key2: VALUE
key3: value3
Résulte en un modèle d'application Compose équivalent à l'arbre YAML :
services:
foo:
key1: value1
key2: VALUE
key3: value3
Séquence
Une séquence
YAML est fusionnée en ajoutant les valeurs du fichier Compose de remplacement au précédent.
Fusion des arbres YAML d'exemple suivants :
services:
foo:
DNS:
- 1.1.1.1
services:
foo:
DNS:
- 8.8.8.8
Résulte en un modèle d'application Compose équivalent à l'arbre YAML :
services:
foo:
DNS:
- 1.1.1.1
- 8.8.8.8
Exceptions
Commandes shell
Lors de la fusion de fichiers Compose qui utilisent les attributs de services command, entrypoint et healthcheck: test
, la valeur est remplacée par le dernier fichier Compose, et non ajoutée.
Fusion des arbres YAML d'exemple suivants :
services:
foo:
command: ["echo", "foo"]
services:
foo:
command: ["echo", "bar"]
Résulte en un modèle d'application Compose équivalent à l'arbre YAML :
services:
foo:
command: ["echo", "bar"]
Ressources uniques
S'applique aux attributs de services ports, volumes, secrets et configs. Bien que ces types soient modélisés dans un fichier Compose comme une séquence, ils ont des exigences d'unicité spéciales :
Attribut | Clé unique |
---|---|
volumes | target |
secrets | target |
configs | target |
ports | {ip, target, published, protocol} |
Lors de la fusion de fichiers Compose, Compose ajoute de nouvelles entrées qui ne violent pas une contrainte d'unicité et fusionne les entrées qui partagent une clé unique.
Fusion des arbres YAML d'exemple suivants :
services:
foo:
volumes:
- foo:/work
services:
foo:
volumes:
- bar:/work
Résulte en un modèle d'application Compose équivalent à l'arbre YAML :
services:
foo:
volumes:
- bar:/work
Réinitialiser la valeur
En plus du mécanisme précédemment décrit, un fichier Compose de remplacement peut aussi être utilisé pour supprimer des éléments de votre modèle d'application.
À cette fin, l'étiquette YAML personnalisée !reset
peut être définie pour remplacer une valeur définie par le fichier Compose remplacé. Une valeur valide pour l'attribut doit être fournie, mais sera ignorée et l'attribut cible sera défini avec la valeur par défaut du type ou null
.
Pour la lisibilité, il est recommandé de définir explicitement la valeur de l'attribut à null (null
) ou tableau vide []
(avec !reset null
ou !reset []
) afin qu'il soit clair que l'attribut résultant sera effacé.
Un fichier compose.yaml
de base :
services:
app:
image: myapp
ports:
- "8080:80"
environment:
FOO: BAR
Et un fichier compose.override.yaml
:
services:
app:
image: myapp
ports: !reset []
environment:
FOO: !reset null
Résulte en :
services:
app:
image: myapp
Remplacer la valeur
Tandis que !reset
peut être utilisé pour supprimer une déclaration d'un fichier Compose en utilisant un fichier de remplacement, !override
vous permet de remplacer complètement un attribut, en contournant les règles de fusion standard. Un exemple typique est de remplacer complètement une définition de ressource, pour s'appuyer sur un modèle distinct mais en utilisant le même nom.
Un fichier compose.yaml
de base :
services:
app:
image: myapp
ports:
- "8080:80"
Pour supprimer le port original, mais exposer un nouveau, le fichier de remplacement suivant est utilisé :
services:
app:
ports: !override
- "8443:443"
Cela résulte en :
services:
app:
image: myapp
ports:
- "8443:443"
Si !override
n'avait pas été utilisé, les deux 8080:80
et 8443:443
seraient exposés selon les règles de fusion décrites ci-dessus.
Ressources supplémentaires
Pour plus d'informations sur la façon dont la fusion peut être utilisée pour créer un fichier Compose composite, voir Travailler avec plusieurs fichiers Compose