Docker Compose prend désormais en charge les profils pour une utilisation sélective des services. Services dans votre docker-compose.yml
peut être lié à un ou plusieurs profils nommés. Passer un nom de profil à docker-compose up
démarrera uniquement 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 pile unique qui est une distribution canonique de votre application. Les profils ajoutent plus de place pour personnaliser les parties de la pile à utiliser, ce qui rend les ensembles complexes de services plus modulaires et configurables.
Pourquoi utiliser les profils ?
L'utilisation des 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 ne souhaitez utiliser qu'en 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 répartir vos définitions de service sur plusieurs fichiers. Vous auriez alors besoin d'un up
peu maniable commande pour tout démarrer en développement :
# docker-compose.ymlversion :"3"services :app :image :my-app:latest # docker-compose-dev.ymlversion :"3"services :debug :image :my-app-debug:latest# démarrer en productiondocker-compose up -d# démarrer en développementdocker-compose -f docker-compose.yml -f docker-compose-dev.yml up -dLes 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 d'accès aux fichiers. Cela crée une expérience plus pratique qui simplifie la documentation, l'écriture et l'exécution.
Définir des profils
Les profils sont créés en définissant les
profiles
champ sur les services dans votredocker-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 :- devLes instances de profil sont créées implicitement à partir des noms donnés à vos
profiles
des champs. Les services qui partagent un profil sont automatiquement joints.Pour démarrer les services inclus dans un profil, ajoutez le
--profile
indicateur pourdocker-compose up
:docker-composer --profile devCette commande démarrerait à la fois l'
app
etdebug
services du fichier Compose ci-dessus. Si vous avez exécutédocker-compose up
, en omettant le--profile
flag, uniquement l'app
le service commencerait.Vous pouvez démarrer plusieurs profils simultanément en répétant le
--profile
drapeau. Compose prend également en charge lesCOMPOSE_PROFILES
variable d'environnement comme alternative à--profile
. Ceci accepte une liste de noms de profils séparés par des virgules.Services sans
profiles
champ sera toujours démarré, 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 implicites du profil
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, en exécutant
docker-compose run debug
lancerait ledebug-utils
service, même si ledev
le profil 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 :profils debug-utils :- devLes démarrages implicites s'appliquent uniquement aux personnes à charge directes du service spécifié. Si
debug-utils
avait aussi undepends_on
, et ce service n'a pas partagé ledev
profil, 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 en permanence. Si aucune de ces conditions ne tient, vous devrez ajouter le--profile
flag pour activer explicitement tous les profils supplémentaires requis.Résumé
Les profils de service sont une fonction 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. Ajout de
--profile
semble généralement plus naturel que de fusionner plusieurs fichiers YAML ensemble.Les profils vous permettent de créer des sous-piles au sein de 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 intègrent 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'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 WordPress
docker-compose.yml
avecmysql
etmariadb
profils :vous pouvez désormais basculer facilement 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
profiles
à vos fichiers Compose pour commencer à activer les services de manière sélective.