Travailler avec les volumes Docker

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à gérer les données dans les conteneurs Docker à l'aide de volumes. Les volumes Docker sont le mécanisme préféré pour conserver les données générées et utilisées par les conteneurs Docker. Ce laboratoire vous guidera à travers divers aspects des volumes Docker, notamment la création, la gestion, le partage de données, la sauvegarde et la restauration. À la fin de ce laboratoire, vous aurez une bonne compréhension de la gestion efficace des données dans les environnements Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/ls -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/stop -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/rm -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/exec -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/inspect -.-> lab-389189{{"Travailler avec les volumes Docker"}} docker/volume -.-> lab-389189{{"Travailler avec les volumes Docker"}} end

Comprendre les options de stockage Docker

Avant de plonger dans les volumes Docker, il est important de comprendre les différentes options de stockage disponibles dans Docker. Docker propose trois options principales pour stocker des données :

  1. Volumes : Le mécanisme préféré pour conserver les données dans Docker.
  2. Bind mounts (montages liés) : Connectent un chemin spécifique de la machine hôte à un conteneur.
  3. tmpfs mounts (montages tmpfs) : Stockent temporairement les données dans la mémoire de la machine hôte.

Dans ce laboratoire (lab), nous nous concentrerons principalement sur les volumes, car ils sont l'option la plus flexible et recommandée pour gérer les données dans Docker.

Commençons par lister les volumes actuels sur votre système :

docker volume ls

Vous verrez une sortie similaire à celle-ci :

DRIVER    VOLUME NAME
local     jenkins-data

Cette commande liste tous les volumes Docker sur votre système. La sortie affiche le pilote de volume (généralement "local") et le nom du volume. Vous pourriez voir certains volumes existants, ou la liste pourrait être vide si vous n'avez pas encore créé de volumes.

Ne vous inquiétez pas si vous voyez des noms de volumes différents ou aucun volume du tout. C'est normal et dépend de ce que vous avez fait avec Docker précédemment sur votre système.

Création et gestion de volumes nommés

Maintenant, créons un nouveau volume nommé. Un volume nommé est un volume que vous créez explicitement et auquel vous donnez un nom spécifique. Cela facilite la référence et la gestion ultérieure.

Exécutez cette commande pour créer un nouveau volume :

docker volume create my_data

Cette commande crée un nouveau volume nommé my_data. Docker gérera tous les détails concernant l'emplacement et la manière dont ce volume est stocké sur votre système hôte.

Vérifions que le volume a été créé :

docker volume ls

Vous devriez maintenant voir my_data dans la liste des volumes, ainsi que tous les volumes qui étaient déjà présents.

Pour obtenir des informations plus détaillées sur le volume, nous pouvons utiliser la commande inspect :

docker volume inspect my_data

Cela affichera quelque chose comme :

[
  {
    "CreatedAt": "2024-08-22T14:31:09+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my_data/_data",
    "Name": "my_data",
    "Options": {},
    "Scope": "local"
  }
]

Cette sortie nous indique plusieurs choses sur notre volume :

  • Quand il a été créé
  • Le pilote qu'il utilise (local dans ce cas)
  • Le point de montage (où les données sont réellement stockées sur votre système hôte)
  • Le nom que nous lui avons donné

Ne vous inquiétez pas si vous ne comprenez pas tous ces détails pour l'instant. Les parties les plus importantes pour nous sont le Name (Nom) et le Mountpoint (Point de montage).

Utilisation de volumes avec des conteneurs

Maintenant que nous avons un volume, utilisons-le avec un conteneur. Nous allons démarrer un nouveau conteneur et monter notre volume sur celui-ci.

Exécutez cette commande :

docker run -d --name my_container -v my_data:/app/data ubuntu:latest sleep infinity

Décortiquons cette commande :

  • docker run : Cela indique à Docker de lancer un nouveau conteneur.
  • -d : Cela exécute le conteneur en mode détaché (en arrière-plan).
  • --name my_container : Cela attribue un nom à notre conteneur, facilitant ainsi sa référence ultérieure.
  • -v my_data:/app/data : Cela monte notre volume my_data sur le répertoire /app/data à l'intérieur du conteneur.
  • ubuntu:latest : C'est l'image que nous utilisons pour notre conteneur.
  • sleep infinity : C'est la commande que le conteneur exécutera. Elle maintient simplement le conteneur en cours d'exécution indéfiniment.

Maintenant, notre conteneur est en cours d'exécution avec le volume monté. Créons des données dans le volume :

docker exec my_container sh -c "echo 'Hello from Docker volume' > /app/data/test.txt"

Cette commande effectue plusieurs opérations :

  • docker exec : Cela nous permet d'exécuter une commande dans un conteneur en cours d'exécution.
  • my_container : C'est le nom de notre conteneur.
  • sh -c "..." : Cela exécute une commande shell à l'intérieur du conteneur.
  • La commande réelle crée un fichier nommé test.txt dans notre volume avec le contenu "Hello from Docker volume".

Pour vérifier que les données ont été écrites, nous pouvons lire le fichier :

docker exec my_container cat /app/data/test.txt

Vous devriez voir le message "Hello from Docker volume" affiché dans la console.

Partage de données entre conteneurs

L'un des grands avantages des volumes Docker est la capacité de partager des données entre les conteneurs. Créons un autre conteneur qui utilise le même volume :

docker run -d --name another_container -v my_data:/app/shared_data ubuntu:latest sleep infinity

Cette commande est très similaire à celle que nous avons utilisée précédemment, mais nous donnons au conteneur un nom différent et nous montons le volume sur un chemin différent à l'intérieur du conteneur.

Maintenant, vérifions que ce nouveau conteneur peut accéder aux données que nous avons créées plus tôt :

docker exec another_container cat /app/shared_data/test.txt

Vous devriez voir le même message "Hello from Docker volume" que nous avons écrit plus tôt. Cela montre que les deux conteneurs accèdent aux mêmes données.

Ajoutons plus de données depuis ce nouveau conteneur :

docker exec another_container sh -c "echo 'Data from another container' >> /app/shared_data/test.txt"

Cette commande ajoute une nouvelle ligne à notre fichier test.txt.

Maintenant, si nous vérifions le contenu du fichier depuis l'un ou l'autre des conteneurs, nous devrions voir les deux lignes :

docker exec my_container cat /app/data/test.txt

Vous devriez voir à la fois "Hello from Docker volume" et "Data from another container" dans la sortie.

Cela démontre comment les volumes Docker peuvent être utilisés pour partager des données entre les conteneurs, ce qui est incroyablement utile pour de nombreuses applications.

Sauvegarde et restauration de volumes

La sauvegarde et la restauration des volumes Docker sont cruciales pour la préservation des données. Parcourons le processus :

Tout d'abord, nous devons arrêter et supprimer les conteneurs qui utilisaient le volume. En effet, nous ne pouvons pas supprimer un volume lorsqu'il est en cours d'utilisation :

docker stop my_container another_container
docker rm my_container another_container

Maintenant, créons une sauvegarde de notre volume :

docker run --rm -v my_data:/source:ro -v $(pwd):/backup ubuntu tar cvf /backup/my_data_backup.tar -C /source.

Cette commande peut sembler complexe, décomposons-la :

  • docker run --rm : Exécute un conteneur temporaire et le supprime une fois terminé.
  • -v my_data:/source:ro : Monte notre volume en lecture seule dans le conteneur.
  • -v $(pwd):/backup : Monte le répertoire actuel en tant que /backup dans le conteneur.
  • ubuntu : Utilise l'image Ubuntu.
  • tar cvf /backup/my_data_backup.tar -C /source. : Crée une archive tar des données du volume.

Maintenant, supprimons notre volume d'origine :

docker volume rm my_data

Pour restaurer les données, nous allons créer un nouveau volume et extraire la sauvegarde dans celui-ci :

docker volume create my_restored_data
docker run --rm -v my_restored_data:/dest -v $(pwd):/backup ubuntu bash -c "tar xvf /backup/my_data_backup.tar -C /dest"

Cela crée un nouveau volume et extrait notre sauvegarde dans celui-ci.

Vérifions que les données ont été restaurées :

docker run --rm -v my_restored_data:/app/data ubuntu cat /app/data/test.txt

Vous devriez voir le contenu du fichier que nous avons créé plus tôt.

Résumé

Dans ce laboratoire, vous avez appris à travailler avec les volumes Docker. Vous avez créé et géré des volumes nommés, utilisé des volumes avec des conteneurs, partagé des données entre des conteneurs et effectué des opérations de sauvegarde et de restauration. Ces compétences sont essentielles pour une gestion efficace des données dans les environnements Docker.

Points clés à retenir :

  • Les volumes Docker offrent un moyen flexible et efficace de gérer les données persistantes dans les conteneurs.
  • Les volumes peuvent être facilement créés, inspectés et supprimés à l'aide de commandes de l'interface en ligne de commande (CLI) Docker.
  • Les données dans les volumes peuvent être partagées entre plusieurs conteneurs.
  • La sauvegarde et la restauration des volumes sont cruciales pour la préservation des données et peuvent être réalisées à l'aide de commandes Linux standard.

Au fur et à mesure que vous continuerez à travailler avec Docker, n'oubliez pas que la persistance et la gestion des données sont des aspects essentiels de vos applications conteneurisées. Planifiez toujours la sauvegarde et la récupération des données, en particulier dans les environnements de production.