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

Include

Requires: Docker Compose 2.20.0 and later

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 section include, 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.

Informations de référence

Élément de niveau supérieur include