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

Montages tmpfs

Les volumes et les montages bind vous permettent de partager des fichiers entre la machine hôte et le conteneur afin que vous puissiez persister les données même après l'arrêt du conteneur.

Si vous exécutez Docker sur Linux, vous avez une troisième option : les montages tmpfs. Lorsque vous créez un conteneur avec un montage tmpfs, le conteneur peut créer des fichiers en dehors de la couche modifiable du conteneur.

Contrairement aux volumes et aux montages bind, un montage tmpfs est temporaire, et seulement persisté dans la mémoire de l'hôte. Lorsque le conteneur s'arrête, le montage tmpfs est supprimé, et les fichiers écrits là ne seront pas persistés.

Les montages tmpfs sont mieux utilisés dans les cas où vous ne voulez pas que les données persistent ni sur la machine hôte ni dans le conteneur. Cela peut être pour des raisons de sécurité ou pour protéger les performances du conteneur lorsque votre application a besoin d'écrire un grand volume de données d'état non persistantes.

Important

Les montages tmpfs dans Docker correspondent directement à tmpfs dans le noyau Linux. En tant que tel, les données temporaires peuvent être écrites dans un fichier d'échange, et ainsi persistées sur le système de fichiers.

Montage sur des données existantes

Si vous créez un montage tmpfs dans un répertoire du conteneur dans lequel des fichiers ou des répertoires existent, les fichiers préexistants sont obscurcis par le montage. Ceci est similaire à si vous deviez enregistrer des fichiers dans /mnt sur un hôte Linux, puis monter une clé USB dans /mnt. Le contenu de /mnt serait obscurci par le contenu de la clé USB jusqu'à ce que la clé USB soit démontée.

Avec les conteneurs, il n'y a pas de moyen simple de supprimer un montage pour révéler les fichiers obscurcis à nouveau. Votre meilleure option est de recréer le conteneur sans le montage.

Limitations des montages tmpfs

  • Contrairement aux volumes et aux montages bind, vous ne pouvez pas partager les montages tmpfs entre conteneurs.
  • Cette fonctionnalité n'est disponible que si vous exécutez Docker sur Linux.
  • La définition des permissions sur tmpfs peut les faire se réinitialiser après le redémarrage du conteneur. Dans certains cas définir l'uid/gid peut servir de solution de contournement.

Syntaxe

Pour monter un tmpfs avec la commande docker run, vous pouvez utiliser soit le drapeau --mount soit --tmpfs.

$ docker run --mount type=tmpfs,dst=<chemin-montage>
$ docker run --tmpfs <chemin-montage>

En général, --mount est préféré. La principale différence est que le drapeau --mount est plus explicite. D'autre part, --tmpfs est moins verbeux et vous donne plus de flexibilité car il vous permet de définir plus d'options de montage.

Le drapeau --tmpfs ne peut pas être utilisé avec les services swarm. Vous devez utiliser --mount.

Options pour --tmpfs

Le drapeau --tmpfs se compose de deux champs, séparés par un caractère deux-points (:).

$ docker run --tmpfs <chemin-montage>[:opts]

Le premier champ est le chemin du conteneur à monter dans un tmpfs. Le deuxième champ est optionnel et vous permet de définir des options de montage. Les options de montage valides pour --tmpfs incluent :

Option Description
ro Crée un montage tmpfs en lecture seule.
rw Crée un montage tmpfs en lecture-écriture (comportement par défaut).
nosuid Empêche les bits setuid et setgid d'être honorés pendant l'exécution.
suid Permet aux bits setuid et setgid d'être honorés pendant l'exécution (comportement par défaut).
nodev Les fichiers de périphérique peuvent être créés mais ne sont pas fonctionnels (l'accès résulte en erreur).
dev Les fichiers de périphérique peuvent être créés et sont entièrement fonctionnels.
exec Permet l'exécution de binaires exécutables dans le système de fichiers monté.
noexec N'autorise pas l'exécution de binaires exécutables dans le système de fichiers monté.
sync Toutes les E/S vers le système de fichiers sont effectuées de manière synchrone.
async Toutes les E/S vers le système de fichiers sont effectuées de manière asynchrone (comportement par défaut).
dirsync Les mises à jour de répertoire dans le système de fichiers sont effectuées de manière synchrone.
atime Met à jour l'heure d'accès au fichier chaque fois que le fichier est accédé.
noatime Ne met pas à jour les heures d'accès au fichier lorsque le fichier est accédé.
diratime Met à jour les heures d'accès au répertoire chaque fois que le répertoire est accédé.
nodiratime Ne met pas à jour les heures d'accès au répertoire lorsque le répertoire est accédé.
size Spécifie la taille du montage tmpfs, par exemple, size=64m.
mode Spécifie le mode de fichier (permissions) pour le montage tmpfs (par exemple, mode=1777).
uid Spécifie l'ID utilisateur pour le propriétaire du montage tmpfs (par exemple, uid=1000).
gid Spécifie l'ID de groupe pour le propriétaire du montage tmpfs (par exemple, gid=1000).
nr_inodes Spécifie le nombre maximum d'inodes pour le montage tmpfs (par exemple, nr_inodes=400k).
nr_blocks Spécifie le nombre maximum de blocs pour le montage tmpfs (par exemple, nr_blocks=1024).
Exemple
$ docker run --tmpfs /data:noexec,size=1024,mode=1777

Toutes les fonctionnalités de montage tmpfs disponibles dans la commande mount Linux ne sont pas prises en charge avec le drapeau --tmpfs. Si vous avez besoin d'options ou de fonctionnalités tmpfs avancées, vous pourriez avoir besoin d'utiliser un conteneur privilégié ou de configurer le montage en dehors de Docker.

Caution

Exécuter des conteneurs avec --privileged accorde des permissions élevées et peut exposer le système hôte à des risques de sécurité. Utilisez cette option uniquement lorsque c'est absolument nécessaire et dans des environnements de confiance.

$ docker run --privileged -it debian sh
/# mount -t tmpfs -o <options> tmpfs /data

Options pour --mount

Le drapeau --mount se compose de plusieurs paires clé-valeur, séparées par des virgules et chacune constituée d'un tuple <clé>=<valeur>. L'ordre des clés n'est pas significatif.

$ docker run --mount type=tmpfs,dst=<chemin-montage>[,<clé>=<valeur>...]

Les options valides pour --mount type=tmpfs incluent :

Option Description
destination, dst, target Chemin du conteneur à monter dans un tmpfs.
tmpfs-size Taille du montage tmpfs en octets. Si non défini, la taille maximale par défaut d'un volume tmpfs est de 50% de la RAM totale de l'hôte.
tmpfs-mode Mode de fichier du tmpfs en octal. Par exemple, 700 ou 0770. Par défaut à 1777 ou accessible en écriture par tous.
Exemple
$ docker run --mount type=tmpfs,dst=/app,tmpfs-size=21474836480,tmpfs-mode=1770

Utiliser un montage tmpfs dans un conteneur

Pour utiliser un montage tmpfs dans un conteneur, utilisez le drapeau --tmpfs, ou utilisez le drapeau --mount avec les options type=tmpfs et destination. Il n'y a pas de source pour les montages tmpfs. L'exemple suivant crée un montage tmpfs à /app dans un conteneur Nginx. Le premier exemple utilise le drapeau --mount et le second utilise le drapeau --tmpfs.

$ docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app \
  nginx:latest

Vérifiez que le montage est un montage tmpfs en regardant dans la section Mounts de la sortie docker inspect :

$ docker inspect tmptest --format '{{ json .Mounts }}'
[{"Type":"tmpfs","Source":"","Destination":"/app","Mode":"","RW":true,"Propagation":""}]
$ docker run -d \
  -it \
  --name tmptest \
  --tmpfs /app \
  nginx:latest

Vérifiez que le montage est un montage tmpfs en regardant dans la section Mounts de la sortie docker inspect :

$ docker inspect tmptest --format '{{ json .Mounts }}'
{"/app":""}

Arrêtez et supprimez le conteneur :

$ docker stop tmptest
$ docker rm tmptest

Étapes suivantes