Volumes (MOUNT)
Un volume Docker est un mécanisme de stockage persistant utilisé pour conserver les données d’un conteneur, même après son arrêt, son redémarrage ou sa suppression.
bind volume
Un volume de type bind permet de mapper un dossier ou un fichier existant sur la machine hôte à un dossier ou un fichier dans un conteneur Docker. Cela signifie que le conteneur peut accéder et manipuler les fichiers directement sur le système de fichiers de l’hôte (votre machine).
docker run -d -p 8080:80 --name webserver -v C:\chemin\vers\mon\code:/usr/share/nginx/html nginx
Dans cet exemple :
-v C:\chemin\vers\mon\code:/usr/share/nginx/html
Cela crée un bind mount. Le dossier C:\chemin\vers\mon\code sur la machine hôte est monté dans le conteneur à l’emplacement /usr/share/nginx/html.
le chemin /usr/share/nginx/html est selon la configuration par défaut de l’image nginx (voir doc).
Les modifications apportées aux fichiers dans C:\chemin\vers\mon\code sur l’hôte seront directement visibles dans /usr/share/nginx/html dans le conteneur.
named volume
Dans Docker, un named volume (ou montée de volume nommé) est une méthode de stockage des données générées et utilisées par les conteneurs Docker. Contrairement aux bind mounts qui s’appuient sur la structure du système de fichiers de l’hôte, les named volumes sont complètement gérés par Docker. Ils sont utilisés pour persister les données indépendamment du cycle de vie des conteneurs, fournissant ainsi une méthode de stockage plus robuste et sécurisée.
docker run -d -p 3306:3306 --name mydb -v db_data:/var/lib/mysql mysql
Dans cet exemple :
-v db_data:/var/lib/mysql spécifie que Docker doit utiliser un volume nommé db_data pour persister les données de MySQL stockées dans /var/lib/mysql à l’intérieur du conteneur.
Si le volume db_data n’existe pas encore, Docker le crée automatiquement. Si le volume existe déjà, Docker réutilisera les données existantes.
dockerfile volume
Un dockerfile VOLUME est une instruction dans un Dockerfile qui est utilisée pour indiquer les points de montage de volumes à l’intérieur du conteneur Docker. L’instruction VOLUME crée un volume anonyme que Docker gère automatiquement. Ce volume peut être utilisé pour stocker des données produites ou utilisées par le conteneur, et il persiste même après que le conteneur soit arrêté ou supprimé.
Volumes Anonymes : Les volumes créés avec l’instruction VOLUME sont anonymes, ce qui signifie que Docker gère leur emplacement sur le système de fichiers de l’hôte et génère un nom unique pour le volume. L’utilisateur n’a pas besoin de spécifier un chemin sur l’hôte.
Partage entre Conteneurs : Bien que les volumes soient créés pour un conteneur spécifique, ils peuvent être partagés avec d’autres conteneurs, ce qui permet une certaine forme de communication ou de partage de données entre conteneurs.
dockerfile
FROM mysql:5.7
VOLUME /var/lib/mysql
ENV MYSQL_ROOT_PASSWORD=example
Dans cet exemple:
/var/lib/mysql est le répertoire où MySQL stocke ses données. L’instruction VOLUME garantit que les données de la base de données persistent au-delà de la durée de vie du conteneur.