É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.
TipTravaillez-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