Comment utiliser les profils de service pour simplifier les piles dans Docker Compose

0
162

Docker Compose prend désormais en charge les profils pour une utilisation sélective des services. Les services de votre docker-compose.yml peuvent être liés à un ou plusieurs profils nommés. Passer un nom de profil à docker-compose ne démarrera que les services de ce profil, vous permettant de créer des variantes de votre pile pour des environnements et des configurations spécifiques.

Compose s'est auparavant concentré sur la définition d'une seule pile qui&#8217 ;sa distribution canonique de votre application. Les profils ajoutent plus d'espace pour personnaliser les parties de la pile à utiliser, rendant les ensembles complexes de services plus modulaires et configurables.

Pourquoi utiliser des profils ?

L'utilisation de profils est entièrement facultative. Vos fichiers Docker Compose existants continueront de fonctionner et il n'est pas nécessaire d'adopter des profils immédiatement.

Les profils de service résolvent plusieurs frustrations courantes avec les flux de développement et de test Docker Compose. Vous pouvez avoir des services que vous souhaitez uniquement utiliser dans le développement, tels qu'un conteneur de débogage ou un service de journalisation. Lorsque vous êtes en production, vous n'avez pas besoin de ces services et vous voulez éviter de les démarrer.

Auparavant, pour y parvenir, il fallait diviser vos définitions de service sur plusieurs fichiers. Vous aurez alors besoin d'une commande peu maniable pour tout démarrer en développement :

# version docker-compose.yml : "3" services : application : image : my-app:latest   # version docker-compose-dev.yml : "3" services: débogage: image: my-app-debug:latest # démarrer en production docker-compose up -d # démarrer en développement docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

Les profils vous permettent de combiner les deux définitions de service dans un seul fichier. Vous pouvez utiliser un indicateur ou une variable d'environnement pour sélectionner un profil spécifique, sans saisir manuellement les chemins de fichiers. Cela crée une expérience plus pratique qui est moins compliquée à documenter, écrire et exécuter.

Définition des profils

Les profils sont créés en définissant le profiles sur les services dans votre docker-compose.yml. Les profils sont spécifiés sous forme de liste. Chaque service peut se voir attribuer un ou plusieurs profils.

version : “3” services: app: image: my-app:latest debug: image: my-app-debug:latest profiles: – dev

Les instances de profil sont créées implicitement à partir des noms donnés aux champs de vos profils. Les services qui partagent un profil sont automatiquement joints.

Pour démarrer les services inclus dans un profil, ajoutez l'indicateur –profile à docker-compose up :

docker-compose up –profile dev < p>Cette commande démarrerait à la fois les services d'application et de débogage à partir du fichier de composition ci-dessus. Si vous exécutiez docker-compose en omettant l'indicateur –profile, seul le service d'application démarrerait.

Vous pouvez démarrer plusieurs profils simultanément en répétant l'indicateur –profile. Compose prend également en charge la variable d'environnement COMPOSE_PROFILES comme alternative à –profile. Cela accepte une liste de noms de profils séparés par des virgules.

Publicité

Les services sans champ de profils seront toujours démarrés, quel que soit le profil demandé. Une fois qu'un service a reçu un profil, il ne démarrera que si ce profil a été demandé. Pour les services avec plusieurs profils, demander l'un d'entre eux permettra au service de démarrer.

Démarrages de profil implicites

Les profils seront toujours ignorés si vous démarrez manuellement un service à l'aide de docker-compose run. Dans ce cas, Compose démarrera également tous les services dont dépend le service demandé, s'ils partagent un profil ou n'ont pas de profil attribué.

Ici, l'exécution de docker-compose run debug lancerait le service debug-utils, même si le profil dev n'a pas été explicitement sélectionné :

version : "3" services : app : image : my-app:latest debug-utils : image : my-app-debug-utils:latest profiles : – dev debug : image : my-app-debug:latest depend_on : debug-utils profiles : – dev

Les démarrages implicites ne s'appliquent qu'aux personnes directement dépendantes du service spécifié. Si debug-utils avait également un depend_on et que ce service ne partageait pas le profil de développement, il ne démarrerait pas correctement.

Pour que la résolution des dépendances fonctionne correctement avec docker-compose run, tous les services de l'arborescence doivent partager un profil du service le plus élevé ou être activés de manière permanente. Si aucune de ces conditions n'est remplie, vous devrez ajouter l'indicateur –profile pour activer explicitement les profils supplémentaires requis.

Résumé

Les profils de service sont une fonctionnalité de composition pratique qui facilite la gestion de différentes combinaisons de services. En utilisant des profils, vous pouvez éviter de diviser les services en plusieurs fichiers Compose. L'ajout de –profile semble généralement plus naturel que la fusion de plusieurs fichiers YAML.

Publicité

Les profils vous permettent de créer des sous-piles dans votre application Compose principale. Leur introduction dans le cadre de la spécification Compose est une reconnaissance du fait que les piles en développement incorporent souvent des services supplémentaires au-delà de ceux utilisés en production.

Plus généralement, les profils rendent Compose plus polyvalent en facilitant la personnalisation de la pile. Bien qu'ils soient envisagés comme une approche de la gestion de l'environnement, les profils pourraient également aider la communauté à créer différentes variantes d'images populaires. Pensez à un docker-compose.yml WordPress avec des profils mysql et mariadb : vous pouvez désormais facilement basculer entre les services de base de données préconfigurés pour sélectionner le moteur qui correspond à vos préférences.

Docker Compose 1.28 a introduit des profils plus tôt cette année . Tant que vous disposez d'une version récente du binaire Compose ou de Docker Desktop pour Windows et Mac, vous pouvez ajouter des profils à vos fichiers Compose pour commencer à activer les services de manière sélective.