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

Élément de niveau supérieur volumes

Les volumes sont des magasins de données persistants mis en œuvre par le moteur de conteneur. Compose offre un moyen neutre pour les services de monter des volumes, et des paramètres de configuration pour les allouer à l'infrastructure. La déclaration de niveau supérieur volumes vous permet de configurer des volumes nommés qui peuvent être réutilisés sur plusieurs services.

Pour utiliser un volume à travers plusieurs services, vous devez explicitement accorder l'accès à chaque service en utilisant l'attribut volumes dans l'élément de niveau supérieur services. L'attribut volumes a une syntaxe supplémentaire qui fournit un contrôle plus granulaire.

Tip

Travaillez-vous avec de grands dépôts ou des monorepos, ou avec des systèmes de fichiers virtuels qui ne passent plus à l'échelle avec votre base de code ? Compose tire maintenant parti des Partages de fichiers synchronisés et crée automatiquement des partages de fichiers pour les montages bind. Assurez-vous d'être connecté à Docker avec un abonnement payant et d'avoir activé à la fois Accéder aux fonctionnalités expérimentales et Gérer les partages de fichiers synchronisés avec Compose dans les paramètres de Docker Desktop.

Exemple

L'exemple suivant montre une configuration à deux services où le répertoire de données d'une base de données est partagé avec un autre service comme volume, nommé db-data, afin qu'il puisse être sauvegardé périodiquement.

services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

  backup:
    image: backup-service
    volumes:
      - db-data:/var/lib/backup/data

volumes:
  db-data:

Le volume db-data est monté aux chemins de conteneur /var/lib/backup/data et /etc/data pour backup et backend respectivement.

L'exécution de docker compose up crée le volume s'il n'existe pas déjà. Sinon, le volume existant est utilisé et est recréé s'il est supprimé manuellement en dehors de Compose.

Attributs

Une entrée sous la section de niveau supérieur volumes peut être vide, auquel cas elle utilise la configuration par défaut du moteur de conteneur pour créer un volume. Optionnellement, vous pouvez la configurer avec les clés suivantes :

driver

Spécifie quel pilote de volume devrait être utilisé. Si le pilote n'est pas disponible, Compose retourne une erreur et ne déploie pas l'application.

volumes:
  db-data:
    driver: foobar

driver_opts

driver_opts spécifie une liste d'options comme paires clé-valeur à passer au pilote pour ce volume. Les options sont dépendantes du pilote.

volumes:
  example:
    driver_opts:
      type: "nfs"
      o: "addr=10.40.0.199,nolock,soft,rw"
      device: ":/docker/example"

external

Si défini à true :

  • external spécifie que ce volume existe déjà sur la plateforme et son cycle de vie est géré en dehors de celui de l'application. Compose ne crée donc pas le volume et retourne une erreur si le volume n'existe pas.
  • Tous les autres attributs à part name sont non pertinents. Si Compose détecte un autre attribut, il rejette le fichier Compose comme invalide.

Dans l'exemple suivant, au lieu de tenter de créer un volume appelé {nom_projet}_db-data, Compose recherche un volume existant simplement appelé db-data et le monte dans les conteneurs du service backend.

services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

volumes:
  db-data:
    external: true

labels

labels sont utilisés pour ajouter des métadonnées aux volumes. Vous pouvez utiliser soit un tableau soit un dictionnaire.

Il est recommandé d'utiliser la notation DNS inversée pour empêcher vos étiquettes d'entrer en conflit avec celles utilisées par d'autres logiciels.

volumes:
  db-data:
    labels:
      com.example.description: "Volume de base de données"
      com.example.department: "IT/Ops"
      com.example.label-with-empty-value: ""
volumes:
  db-data:
    labels:
      - "com.example.description=Volume de base de données"
      - "com.example.department=IT/Ops"
      - "com.example.label-with-empty-value"

Compose définit les étiquettes com.docker.compose.project et com.docker.compose.volume.

name

name définit un nom personnalisé pour un volume. Le champ name peut être utilisé pour référencer des volumes qui contiennent des caractères spéciaux. Le nom est utilisé tel quel et n'est pas délimité avec le nom de la pile.

volumes:
  db-data:
    name: "my-app-data"

Cela permet de faire de ce nom de recherche un paramètre du fichier Compose, de sorte que l'ID de modèle pour le volume soit codé en dur mais l'ID de volume réel sur la plateforme soit défini au moment de l'exécution pendant le déploiement.

Par exemple, si DATABASE_VOLUME=my_volume_001 est dans votre fichier .env :

volumes:
  db-data:
    name: ${DATABASE_VOLUME}

L'exécution de docker compose up utilise le volume appelé my_volume_001.

Il peut aussi être utilisé en conjonction avec la propriété external. Cela signifie que le nom utilisé pour rechercher le volume réel sur la plateforme est défini séparément du nom utilisé pour faire référence au volume dans le fichier Compose :

volumes:
  db-data:
    external: true
    name: actual-name-of-volume