8.1 Introduction aux disques virtuels
Le montage des volumes (Volumes) est l’une des fonctionnalités les plus utiles de Docker. Grâce à cela, les conteneurs peuvent facilement manipuler les données de la machine hôte. Cette fonction rend la gestion des données flexible et pratique : vous pouvez conserver les informations à long terme, les partager entre les conteneurs et effectuer des sauvegardes ou restaurer les données sans problème si quelque chose tourne mal.
Les volumes (Volumes) dans Docker sont un moyen de conserver des données afin qu'elles soient indépendantes des conteneurs. Même si un conteneur est supprimé, les informations stockées dans les volumes restent en sécurité. Les volumes peuvent être connectés (montés) aux conteneurs, ce qui permet de stocker les données séparément et de les réutiliser, peu importe combien de fois vous créez ou supprimez les conteneurs.
Types principaux de volumes
- Volumes anonymes (Anonymous Volumes)
- Créés automatiquement par Docker si aucun volume n’est explicitement indiqué pour un conteneur.
- Utilisés pour le stockage temporaire des données.
- Volumes nommés (Named Volumes)
- Créés et gérés par Docker.
- Peuvent être connectés à plusieurs conteneurs et sont conservés même après leurs suppressions ou arrêts.
- Volumes avec liaison (Bind Mounts)
- Relient un répertoire de la machine hôte à un répertoire dans le conteneur.
- Idéals pour accéder aux données du système hôte et pratiques en développement.
Syntaxe de base de la commande docker run
pour le montage des volumes
-v <host_path>:<container_path>
Syntaxe complète :
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
Paramètres principaux pour le montage des volumes
1. Paramètre -v
ou --volume
Utilisé pour créer un volume nommé ou un Bind Mount.
Exemple :
docker run -d -v /host/data:/container/data nginx
2. Paramètre --mount
Fournit une méthode de montage plus flexible et détaillée, prenant en charge des paramètres supplémentaires.
Exemple :
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 Création et utilisation des volumes
1. Volumes nommés
Les volumes nommés sont créés et gérés par Docker. Ils sont conçus pour le stockage à long terme des données qui doivent être conservées entre les redémarrages ou les suppressions des conteneurs.
Création d’un volume nommé :
docker volume create my_volume
Lancement d’un conteneur avec montage de volume :
Dans cet exemple, le volume my_volume
est monté dans le répertoire /data
à l'intérieur du conteneur my_container
. Toutes les données écrites dans /data
seront sauvegardées dans le volume et resteront accessibles même après la suppression du conteneur.
docker run -d -v my_volume:/data --name my_container nginx
2. Volumes anonymes
Les volumes anonymes sont créés automatiquement par Docker et associés à un conteneur spécifique. Ils sont utiles pour les données temporaires qui ne doivent pas être conservées après la suppression du conteneur.
Lancement d’un conteneur avec un volume anonyme :
Dans cet exemple, Docker créera automatiquement un volume anonyme et le montera dans le répertoire /data
à l'intérieur du conteneur.
docker run -d -v /data --name my_container nginx
3. Répertoires liés
Les répertoires liés permettent de monter les répertoires du système hôte dans les conteneurs. C’est pratique pour partager des données entre les conteneurs et le système hôte. Cette méthode est également souvent utilisée durant le développement, lorsque le code source est stocké sur le système hôte.
Lancement d’un conteneur avec un répertoire lié :
Dans cet exemple, le répertoire /host/data
sur la machine hôte est monté dans le répertoire /container/data
à l'intérieur du conteneur my_container
.
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 Exemples d'utilisation des volumes
1. Sauvegarde des données de la base de données
L'utilisation des volumes pour les bases de données permet de conserver les données même lors des redémarrages et des mises à jour de conteneur. C'est particulièrement important pour un fonctionnement fiable dans des environnements de production.
Exemple :
Dans cet exemple, les données PostgreSQL sont sauvegardées dans le volume db_data
, ce qui garantit leur conservation en cas de redémarrage ou de suppression du conteneur.
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. Partage des données entre conteneurs
Parfois, il peut être nécessaire de partager des données entre plusieurs conteneurs. Les volumes permettent de le faire facilement.
Exemple :
Créons un volume et lançons deux conteneurs qui utiliseront ce volume. Les deux conteneurs auront accès aux données du volume shared_data
, ce qui leur permettra d'échanger des données.
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. Développement et test
Lors du développement d'applications, il est pratique d'utiliser des répertoires montés pour partager le code source entre le conteneur et la machine hôte. Cela permet aux développeurs de modifier le code sur l'hôte, et au conteneur d'utiliser immédiatement les mises à jour.
Exemple :
Dans cet exemple, le répertoire /path/to/source
sur la machine hôte est monté dans le répertoire /app
à l'intérieur du conteneur dev_container
. Ainsi, le conteneur peut utiliser le code source à jour directement depuis le système hôte.
docker run -d -v /path/to/source:/app --name dev_container node
8.4 Gestion des volumes
Docker propose des commandes pratiques pour gérer les volumes, ce qui permet de créer, supprimer et consulter facilement des informations sur les volumes.
1. Afficher tous les volumes
Cette commande affiche une liste de tous les volumes disponibles sur la machine hôte.
docker volume ls
2. Consulter les informations sur un volume
Avec cette commande, tu peux obtenir des détails sur le volume my_volume
: son emplacement sur le système de fichiers de l'hôte ainsi que des infos sur les conteneurs qui utilisent ce volume.
docker volume inspect my_volume
3. Supprimer un volume
Cette commande supprime le volume my_volume
. Avant de supprimer, il est important de vérifier que le volume n'est utilisé par aucun conteneur, sinon la commande échouera.
docker volume rm my_volume
8.5 Sauvegarde des volumes
Pour garantir la sécurité des données, il est important d'avoir la possibilité de créer des copies de sauvegarde des volumes et de les restaurer si nécessaire.
1. Sauvegarde d’un volume
Dans cet exemple, le contenu du volume my_volume
est archivé dans un fichier my_volume_backup.tar.gz
, qui est sauvegardé dans le répertoire /backup
sur la machine hôte.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. Restauration d’un volume
Cet exemple restaure le contenu du volume my_volume
à partir de la sauvegarde, qui est stockée dans le fichier my_volume_backup.tar.gz
.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
GO TO FULL VERSION