Include
Avec include
, vous pouvez incorporer un fichier compose.yaml
distinct directement dans votre fichier compose.yaml
actuel. Cela facilite la modularisation d'applications complexes en sous-fichiers Compose, ce qui permet de rendre les configurations d'application plus simples et plus explicites.
L'
élément de niveau supérieur include
aide à refléter l'équipe d'ingénierie responsable du code directement dans l'organisation du fichier de configuration. Il résout aussi le problème de chemin relatif que extends
et merge présentent.
Chaque chemin listé dans la section include
charge comme un modèle d'application Compose individuel, avec son propre répertoire de projet, afin de résoudre les chemins relatifs.
Une fois que l'application Compose incluse charge, toutes les ressources sont copiées dans le modèle d'application Compose actuel.
Note
include
s'applique récursivement donc un fichier Compose inclus qui déclare sa propre sectioninclude
, résulte en ce que ces autres fichiers soient également inclus.
Exemple
include:
- my-compose-include.yaml #avec serviceB déclaré
services:
serviceA:
build: .
depends_on:
- serviceB #utilise serviceB directement comme s'il était déclaré dans ce fichier Compose
my-compose-include.yaml
gère serviceB
qui détaille quelques répliques, une interface web pour inspecter les données, des réseaux isolés, des volumes pour la persistance des données, etc. L'application qui s'appuie sur serviceB
n'a pas besoin de connaître les détails de l'infrastructure, et consomme le fichier Compose comme un bloc de construction sur lequel elle peut compter.
Cela signifie que l'équipe qui gère serviceB
peut refactoriser son propre composant de base de données pour introduire des services supplémentaires sans impacter les équipes dépendantes. Cela signifie aussi que les équipes dépendantes n'ont pas besoin d'inclure des flags supplémentaires sur chaque commande Compose qu'elles exécutent.
Include et remplacements
Compose signale une erreur si toute ressource de include
entre en conflit avec des ressources du fichier Compose inclus. Cette règle empêche
des conflits inattendus avec des ressources définies par l'auteur du fichier compose inclus. Cependant, il peut y avoir des circonstances où vous pourriez vouloir ajuster le
modèle inclus. Ceci peut être accompli en ajoutant un fichier de remplacement à la directive include :
include:
- path :
- third-party/compose.yaml
- override.yaml # remplacement local pour le modèle tiers
La limitation principale avec cette approche est que vous devez maintenir un fichier de remplacement dédié par include. Pour des projets complexes avec plusieurs includes cela résulterait en de nombreux fichiers Compose.
L'autre option est d'utiliser un fichier compose.override.yaml
. Bien que les conflits soient rejetés du fichier utilisant include
quand la même
ressource est déclarée, un fichier de remplacement Compose global peut remplacer le modèle fusionné résultant, comme démontré dans l'exemple suivant :
Fichier principal compose.yaml
:
include:
- team-1/compose.yaml # déclare service-1
- team-2/compose.yaml # déclare service-2
Fichier de remplacement compose.override.yaml
:
services:
service-1:
# remplace service-1 inclus pour activer le port de débogueur
ports:
- 2345:2345
service-2:
# remplace service-2 inclus pour utiliser le dossier de données local contenant les données de test
volumes:
- ./data:/data
Combiné ensemble, cela vous permet de bénéficier de composants réutilisables tiers, et d'ajuster le modèle Compose pour vos besoins.