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.
ImportantLes 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 ). |
$ 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.
CautionExé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. |
$ 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
- En savoir plus sur les volumes
- En savoir plus sur les montages bind
- En savoir plus sur les pilotes de stockage