Agence web » Actualités du digital » Que sont les volumes Docker et comment les utilisez-vous? –

Que sont les volumes Docker et comment les utilisez-vous? –

les-conteneurs-valent-ils-le-mal-de-tete-cloudsavvy-it-3358835

Par défaut, les conteneurs Docker sont entièrement sans état. Les données stockées sur le conteneur sont éphémères et seront effacées lorsque le conteneur s’arrêtera. Ce n’est évidemment pas idéal pour de nombreuses applications, c’est pourquoi Docker propose quelques moyens de gérer l’état.

Que sont les volumes?

Le moyen le plus simple de rendre les données Docker persistantes est lier les montures, qui lie littéralement un emplacement sur le disque de l’hôte à un emplacement sur le disque du conteneur. Ceux-ci sont simples à créer et à utiliser, mais sont un peu capricieux car vous devez configurer les répertoires et les gérer vous-même.

Les volumes sont comme des disques durs virtuels gérés par Docker. Docker gère leur stockage sur disque (généralement dans /var/lib/docker/volumes/), et leur donne un nom unique facilement mémorable plutôt qu’un chemin de répertoire. Il est facile de les créer et de les supprimer à l’aide de la CLI Docker.

Ceux-ci présentent quelques autres avantages en plus d’être gérés par Docker. Ils fonctionnent à la fois sur des conteneurs Linux et Windows, ils peuvent être partagés de manière plus sûre entre plusieurs conteneurs et les pilotes de volume permettent aux fournisseurs de cloud de fournir un hébergement à distance pour les données sous-jacentes. Dans l’ensemble, les volumes sont plus faciles à utiliser que les montages de liaison et sont recommandés par Docker pour la gestion de l’état.

Bien sûr, vous devez vous demander si vous avez vraiment besoin que les données Docker soient stockées sur le serveur. Pour de nombreuses applications, l’utilisation d’un magasin de données distant externe comme Amazon S3 ou d’une base de données externe suffit pour stocker les données qu’elles utilisent sans les attacher sur le serveur frontal.

Comment les utilisez-vous?

Vous pouvez créer un nouveau volume à partir de la ligne de commande avec la commande suivante:

docker volume create nginx-config

Et puis, lorsque vous allez exécuter votre conteneur Docker, liez-le à la cible dans le conteneur avec le --mount drapeau:

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Si vous courez docker inspect <name>, vous verrez le volume répertorié sous Mounts section.

Si vous utilisez Docker Compose, la configuration est également simple. Ajoutez simplement un volumes pour chaque service de conteneur dont vous disposez, puis mappez un nom de volume à un emplacement dans l’invité. Vous devrez également fournir une liste de volumes dans un niveau supérieur volumes clé pour Compose à provisionner.

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Cela créera automatiquement le volume pour ce Compose. Si vous souhaitez utiliser un volume prédéfini depuis l’extérieur de Compose, spécifiez external: true dans la configuration du volume:

volumes:
  cms-content:
    external: true

Si vous souhaitez à la place faire simplement un montage de liaison et ne pas vous soucier des volumes, entrez simplement un nom de chemin à la place du nom de volume et évitez de définir les noms de volume.

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /docker/nginx-config/:/etc/nginx/

Vous pouvez lire la documentation complète de Docker sur l’utilisation des volumes avec Compose si votre cas d’utilisation nécessite quelque chose de plus spécifique que cela.

Transfert de volumes Docker

Les volumes Docker ne sont que des dossiers créés automatiquement et stockés dans /var/lib/docker/volumes/, chaque volume étant stocké sous ./volumename/_data/. Pour sauvegarder et restaurer, vous pouvez simplement sauvegarder ces volumes directement.

Si vous souhaitez plutôt utiliser la CLI Docker, ils ne fournissent malheureusement pas un moyen facile de le faire. Pour sauvegarder les volumes d’un conteneur, vous aurez besoin du nom du conteneur, ainsi que de l’emplacement de montage dans lequel les données sont stockées.

La façon de le faire est un peu un hack – vous devrez exécuter une commande dans un nouveau conteneur Docker, lier monter le répertoire shell actuel, monter le volume sur ce conteneur, puis tar le répertoire dans une sauvegarde. Vous vous retrouverez avec un backup.tar du volume:

docker run --rm --volumes-from containername -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /mountlocation

Ensuite, de la même manière, vous pouvez extraire l’archive dans le répertoire cible:

docker run --rm --volumes-from containername -v $(pwd):/backup ubuntu bash -c "cd /mountlocation && tar xvf /backup/backup.tar --strip 1"

C’est toujours mieux que d’avoir à connaître l’emplacement de l’hôte, vous pouvez donc automatiser cela si vous le souhaitez.

★★★★★