# 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. - [Volumes (MOUNT)](#volumes-mount) - [**bind volume**](#bind-volume) - [**named volume**](#named-volume) - [**dockerfile volume**](#dockerfile-volume) ### **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). ```bash docker run -d -p 8080:80 --name webserver -v C:\chemin\vers\mon\code:/usr/share/nginx/html nginx ``` Dans cet exemple : ```bash -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. ```bash 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. ```docker 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.