Comment utiliser plusieurs contextes de construction Docker pour rationaliser l'assemblage d'images
Agence web » Actualités du digital » Comment sauvegarder vos volumes Docker

Comment sauvegarder vos volumes Docker

Les volumes Docker sont utilisés pour stocker les données persistantes séparément de vos conteneurs. Les données conservées dans un volume restent accessibles après l’arrêt de vos conteneurs, ce qui vous permet de conteneuriser les charges de travail avec état.

Bien que les volumes survivent aux conteneurs, cette protection n’est pas suffisante pour les applications de production. Vous devez sauvegarder vos volumes afin de pouvoir les récupérer après un sinistre. La création de sauvegardes de volume régulières vous permet de restaurer votre environnement si votre hôte Docker est compromis ou si des données sont accidentellement supprimées.

Gestion des sauvegardes de volume

Docker n’a pas de mécanisme intégré pour sauvegarder des volumes ou exporter leur contenu. Vous devez configurer votre propre solution pour accéder au volume et copier ses données vers votre destination de sauvegarde.

La création d’un conteneur temporaire qui monte le volume que vous devez sauvegarder est généralement la manière la plus simple de procéder. Ajouter le --volumes-from drapeau à un docker run pour monter automatiquement les volumes d’un conteneur existant dans votre conteneur de sauvegarde. Vous pouvez alors utiliser des outils tels que tar et gzip pour déposer une archive du contenu du volume dans votre répertoire de travail.

Voici un exemple complet de cette technique :

# Create a container that stores data in the "mysql_data" volume
docker run -d 
    --name mysql 
    -v mysql_data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=mysql 
    mysql:8

# Start a temporary container to back up the "mysql_data" volume
docker run --rm 
    --volumes-from mysql
    -v $PWD:/backup-dir 
    ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql

La --volumes-from signifie que le conteneur de sauvegarde temporaire reçoit l’accès au mysql volumes du conteneur. La /var/lib/mysql répertoire à l’intérieur du conteneur de sauvegarde expose le contenu du volume car il s’agit du chemin utilisé par le mysql récipient. Le tarage du chemin produira une archive de votre volume que vous pourrez utiliser comme sauvegarde. Il est déposé dans votre répertoire de travail en raison du montage de liaison configuré par le -v drapeau.

La --rm flag supprimera le conteneur de sauvegarde dès que la commande sera terminée. Cela laisse l’archive dans votre répertoire de travail, prête à être déplacée vers un stockage à long terme. Vous pouvez automatiser la création de sauvegarde en ajoutant le docker run commande en tant que tâche périodique.

Restauration de votre sauvegarde

Vous pouvez utiliser une technique similaire pour restaurer votre sauvegarde. Lorsque vous remplacez le contenu d’un volume existant, créez un autre conteneur temporaire avec le volume et un montage lié à votre archive de sauvegarde. Extrayez le contenu de l’archive dans le chemin de montage du volume.

$ docker run --rm 
    --volumes-from mysql
    -v $PWD:/backup-dir
    bash -c "cd /var/lib/mysql && tar xvf /backup-dir/mysql-backup.tar"

Cela peut être risqué si les conteneurs utilisent activement le volume. L’écrasement des fichiers en cours d’utilisation peut entraîner des erreurs et un comportement inattendu. Vous pouvez utiliser le docker stop commande d’arrêter temporairement vos conteneurs avant de les remonter avec docker start.

$ docker stop mysql

# Restore the backup
# ...

$ docker start mysql

Créez le volume avant de démarrer votre conteneur si vous restaurez une sauvegarde sur un nouvel hôte :

$ docker volume create new_volume

Montez ensuite ce volume dans votre conteneur temporaire :

docker run --rm 
    -v new_volume:/var/lib/mysql
    -v $PWD:/backup-dir 
    ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql

Démarrer votre conteneur d’applications avec le même volume vous permettra d’accéder aux fichiers que vous avez restaurés :

docker run -d 
    --name mysql 
    -v new_volume:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=mysql 
    mysql:8

Tester ces procédures vous permet de vérifier que vos sauvegardes seront utilisables en cas de sinistre.

Sauvegarde directe des volumes

La procédure décrite ci-dessus est la méthode recommandée pour sauvegarder les volumes Docker. Cependant, certaines situations pourraient être mieux servies en copiant directement le contenu à partir de l’endroit où les volumes sont stockés sur le système de fichiers de votre hôte.

Vous trouverez généralement le contenu de vos volumes dans /var/lib/docker/volumes. Chaque volume obtient son propre sous-répertoire, tel que /var/lib/docker/volumes/mysql. Dans ce chemin de niveau supérieur, vous trouverez un _data dossier qui contient tous les fichiers stockés à l’intérieur du volume.

Archivage du /var/lib/docker/volumes peut être un moyen pratique de sauvegarder rapidement tout sur votre hôte. Vous devrez utiliser sudo bien que parce que tout ce qui se trouve sous ce chemin appartient à root.

La sauvegarde de volumes de cette manière n’est pas recommandée pour une utilisation régulière, car elle n’est pas portable d’une installation à l’autre. Le système de pilote de volume de Docker signifie que les données de volume ne seront pas nécessairement stockées sur le système de fichiers de votre hôte – il peut s’agir d’un partage réseau ou d’un autre emplacement distant. Cette technique ne doit être tentée que lorsque vous souhaitez effectuer une sauvegarde rapide avant d’exécuter la maintenance sur une machine spécifique.

Sommaire

Les volumes Docker doivent être traités avec précaution car ils contiennent les données persistantes de votre application. La création de sauvegardes régulières vous protégera de la perte de données au cas où votre hôte serait compromis ou si un processus de conteneur errant supprimait des fichiers par erreur.

Bien que vous puissiez créer des sauvegardes en archivant le répertoire d’installation de Docker, cela doit être évité dans la mesure du possible. Les conteneurs de sauvegarde temporaires peuvent sembler encombrants, mais ils peuvent être facilement scriptés et fournir des résultats prévisibles sur les pilotes de volume.

Une fois que vous avez créé une archive de sauvegarde de volume, n’oubliez pas de la télécharger sur le stockage distant dès que possible. Une sauvegarde stockée sur la machine dont elle provient ne sera d’aucune utilité si vous perdez l’accès ou si une panne matérielle se produit.

★★★★★