Utiliser les profils avec Compose
Les profils vous aident à ajuster votre application Compose pour différents environnements ou cas d'utilisation en activant sélectivement les services. Les services peuvent être attribués à un ou plusieurs profils ; les services non attribués démarrent/s'arrêtent par défaut, tandis que les services attribués ne démarrent/s'arrêtent que lorsque leur profil est actif. Cette configuration signifie que des services spécifiques, comme ceux pour le débogage ou le développement, peuvent être inclus dans un seul fichier compose.yml et activés uniquement en cas de besoin.
Assigner des profils aux services
Les services sont associés aux profils à travers l'attribut
profiles qui prend un
tableau de noms de profils :
services:
frontend:
image: frontend
profiles: [frontend]
phpmyadmin:
image: phpmyadmin
depends_on: [db]
profiles: [debug]
backend:
image: backend
db:
image: mysqlIci les services frontend et phpmyadmin sont assignés aux profils
frontend et debug respectivement et en tant que tel ne sont démarrés que quand leurs
profils respectifs sont activés.
Les services sans attribut profiles sont toujours activés. Dans ce
cas exécuter docker compose up ne démarrerait que backend et db.
Les noms de profils valides suivent le format regex de [a-zA-Z0-9][a-zA-Z0-9_.-]+.
TipLes services centraux de votre application ne devraient pas être assignés de
profilespour qu'ils soient toujours activés et démarrés automatiquement.
Démarrer des profils spécifiques
Pour démarrer un profil spécifique fournissez l'
option de ligne de commande --profile ou
utilisez la variable d'environnement COMPOSE_PROFILES :
$ docker compose --profile debug up
$ COMPOSE_PROFILES=debug docker compose up
Les deux commandes démarrent les services avec le profil debug activé.
Dans le fichier compose.yaml précédent, cela démarre les services
db, backend et phpmyadmin.
Démarrer plusieurs profils
Vous pouvez également activer
plusieurs profils, par ex. avec docker compose --profile frontend --profile debug up
les profils frontend et debug seront activés.
Plusieurs profils peuvent être spécifiés en passant plusieurs flags --profile ou
une liste séparée par des virgules pour la variable d'environnement COMPOSE_PROFILES :
$ docker compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker compose up
Si vous voulez activer tous les profils en même temps, vous pouvez exécuter docker compose --profile "*".
Démarrage automatique des profils et résolution des dépendances
Quand un service avec des profiles assignés est explicitement ciblé en ligne de
commande ses profils sont démarrés automatiquement donc vous n'avez pas besoin de les démarrer
manuellement. Cela peut être utilisé pour des services ponctuels et des outils de débogage.
Comme exemple considérez la configuration suivante :
services:
backend:
image: backend
db:
image: mysql
db-migrations:
image: backend
command: myapp migrate
depends_on:
- db
profiles:
- tools# Démarrer seulement backend et db
$ docker compose up -d
# Ceci exécute db-migrations (et, si nécessaire, démarre db)
# en activant implicitement les profils "tools"
$ docker compose run db-migrationsMais gardez à l'esprit que docker compose ne démarre automatiquement que les
profils des services en ligne de commande et pas de toute dépendance.
Cela signifie que tout autre service dont le service ciblé depends_on devrait soit :
- Partager un profil commun
- Toujours être démarré, en omettant
profilesou en ayant un profil correspondant démarré explicitement
services:
web:
image: web
mock-backend:
image: backend
profiles: ["dev"]
depends_on:
- db
db:
image: mysql
profiles: ["dev"]
phpmyadmin:
image: phpmyadmin
profiles: ["debug"]
depends_on:
- db# Démarrer seulement "web"
$ docker compose up -d
# Démarrer mock-backend (et, si nécessaire, db)
# en activant implicitement les profils "dev"
$ docker compose up -d mock-backend
# Ceci échoue car les profils "dev" ne sont pas activés
$ docker compose up phpmyadminBien que cibler phpmyadmin démarre automatiquement les profils debug, il ne démarre pas automatiquement les profils requis par db qui est dev.
Pour corriger cela vous devez soit ajouter le profil debug au service db :
db:
image: mysql
profiles: ["debug", "dev"]ou démarrer le profil dev explicitement :
# Les profils "debug" sont démarrés automatiquement en ciblant phpmyadmin
$ docker compose --profile dev up phpmyadmin
$ COMPOSE_PROFILES=dev docker compose up phpmyadmin
Arrêter l'application et les services avec des profils spécifiques
Comme pour démarrer des profils spécifiques, vous pouvez utiliser l'
option de ligne de commande --profile ou
utiliser la variable d'environnement COMPOSE_PROFILES :
$ docker compose --profile debug down
$ COMPOSE_PROFILES=debug docker compose down
Les deux commandes arrêtent et suppriment les services avec le profil debug et les services sans profil. Dans le fichier compose.yaml suivant, cela arrête les services db, backend et phpmyadmin.
services:
frontend:
image: frontend
profiles: [frontend]
phpmyadmin:
image: phpmyadmin
depends_on: [db]
profiles: [debug]
backend:
image: backend
db:
image: mysqlsi vous voulez seulement arrêter le service phpmyadmin, vous pouvez exécuter
$ docker compose down phpmyadmin
ou
$ docker compose stop phpmyadmin
NoteExécuter
docker compose downarrête seulementbackendetdb.