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

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_.-]+.

Tip

Les 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
Note

Exécuter docker compose down arrête seulement backend et db.

Informations de référence

profiles