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
includes'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 Composemy-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 tiersLa 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-2Fichier 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:/dataCombiné ensemble, cela vous permet de bénéficier de composants réutilisables tiers, et d'ajuster le modèle Compose pour vos besoins.