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: mysql
Ici 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
profiles
pour 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-migrations
Mais 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
profiles
ou 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 phpmyadmin
Bien 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: mysql
si 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 down
arrête seulementbackend
etdb
.