J'ai utilisé ce tutum / wordpress Docker-image pour démontrer un site Web Wordpress. Récemment, j'ai découvert que l'image utilise des volumes pour les données MySQL.
Le problème est donc le suivant: si je veux sauvegarder et restaurer le conteneur, je peux essayer de valider une image, puis supprimer plus tard le conteneur et créer un nouveau conteneur à partir de l'image validée. Mais si je fais cela, le volume est supprimé et toutes mes données ont disparu.
Il doit y avoir un moyen simple de sauvegarder mon conteneur ainsi que ses données de volume, mais je ne le trouve nulle part.
backup
docker
linux-containers
pguardiario
la source
la source
Réponses:
Comme l'explique le guide de l'utilisateur du docker, les volumes de données sont censés conserver les données en dehors d'un système de fichiers de conteneur. Cela facilite également le partage de données entre plusieurs conteneurs.
Alors que Docker ne supprimera jamais les données des volumes (sauf si vous supprimez le conteneur associé avec
docker rm -v
), les volumes qui ne sont référencés par aucun conteneur Docker sont appelés volumes suspendus . Ces volumes suspendus sont difficiles à éliminer et d'accès difficile.Cela signifie que dès que le dernier conteneur utilisant un volume est supprimé, le volume de données devient suspendu et son contenu difficile d'accès.
Afin d'éviter ces volumes suspendus, l'astuce consiste à créer un conteneur Docker supplémentaire en utilisant le volume de données que vous souhaitez conserver; afin qu'il y ait toujours au moins ce conteneur docker référençant le volume. De cette façon, vous pouvez supprimer le conteneur Docker exécutant l'application wordpress sans perdre la facilité d'accès au contenu de ce volume de données.
Ces conteneurs sont appelés conteneurs de volume de données .
images du docker de sauvegarde
Pour sauvegarder des images docker, utilisez la commande docker save qui produira une archive tar qui pourra être utilisée plus tard pour créer une nouvelle image docker avec la commande docker load .
conteneurs docker de sauvegarde
Vous pouvez sauvegarder un conteneur Docker par différents moyens
Sachez que ces commandes ne sauvegarderont que le système de fichiers en couches du conteneur Docker. Cela exclut les volumes de données .
sauvegarde des volumes de données du docker
Pour sauvegarder un volume de données, vous pouvez exécuter un nouveau conteneur en utilisant le volume que vous souhaitez sauvegarder et en exécutant la commande tar pour produire une archive du contenu du volume comme décrit dans le guide de l'utilisateur du docker .
Dans votre cas particulier, le volume de données est utilisé pour stocker les données d'un serveur MySQL. Donc, si vous souhaitez exporter une archive tar pour ce volume, vous devrez d'abord arrêter le serveur MySQL. Pour ce faire, vous devrez arrêter le conteneur wordpress.
sauvegarder les données MySQL
Une autre façon est de se connecter à distance au serveur MySQL pour produire un vidage de la base de données avec la commande mysqldump . Cependant, pour que cela fonctionne, votre serveur MySQL doit être configuré pour accepter les connexions à distance et avoir également un utilisateur autorisé à se connecter à distance. Ce n'est peut-être pas le cas avec l'image docker wordpress que vous utilisez.
Éditer
Docker a récemment introduit des plugins de volume Docker qui permettent de déléguer la gestion des volumes aux plugins implémentés par les fournisseurs.
La
docker run
commande a un nouveau comportement pour l'-v
option. Il est maintenant possible de lui passer un nom de volume . Les volumes créés de cette manière sont nommés et faciles à référencer ultérieurement, ce qui simplifie les problèmes liés aux volumes suspendus .Modifier 2
Docker a introduit la
docker volume prune
commande pour supprimer facilement tous les volumes suspendus.la source
Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container.
donc seuls les conteneurs de données sont héritésmysqldump
. Il suffit de décortiquer le conteneur, de le vider, puis de le copier avecdocker cp
.data only container obsolete?
Pas du tout. Le conteneur de données uniquement vous donne un conteneur versdocker exec data-container tar -czf snapshot.tgz /data
alorsdocker cp data-container:snapshot.tgz ./snapshot.tgz
et autres. Si vous voulez que le conteneur dure longtemps, faites en sorte que sa commandetail -f /dev/null
ne se termine jamais, en utilisant un minimum de ressources.MISE À JOUR 2
Script bash de sauvegarde de volume unique brut:
Script bash de restauration de volume unique brut:
L'utilisation peut être comme ceci:
Les hypothèses sont les suivantes: le fichier de sauvegarde est nommé backup.tar, il réside dans le même répertoire que le script de sauvegarde et de restauration, le nom du volume est le même entre les conteneurs.
METTRE À JOUR
Il me semble que la sauvegarde de volumes à partir de conteneurs n'est pas différente de la sauvegarde de volumes à partir de conteneurs de données.
Les volumes ne sont rien d'autre que des chemins liés à un conteneur, le processus est donc le même.
Je ne sais pas si docker-backup fonctionne également pour les mêmes volumes de conteneurs mais vous pouvez utiliser:
et:
FIN DE LA MISE À JOUR
Il existe ce bel outil disponible qui vous permet de sauvegarder et de restaurer les conteneurs de volumes docker:
https://github.com/discordianfish/docker-backup
si vous avez un conteneur lié à certains volumes de conteneurs comme celui-ci:
vous pouvez sauvegarder tous les volumes comme ceci:
et restaurez comme ceci:
Ou vous pouvez suivre la voie officielle:
Comment porter des volumes de données uniquement d'un hôte à un autre?
la source
unknown shorthand flag: 'r' in -rm.
que ça devrait l'être--rm
? (Docker version 18.09.5, build e8ff056)Si vous avez seulement besoin de sauvegarder des volumes montés, vous pouvez simplement copier des dossiers à partir de votre Dockerhost .
Sur Ubuntu
Vous pouvez trouver tous les dossiers avec des volumes ici:
/var/lib/docker/volumes/
vous pouvez donc les copier et les archiver où vous le souhaitez.Sur MAC
Ce n'est pas aussi simple que sur Ubuntu. Vous devez copier les fichiers de la VM.
Voici un script expliquant comment copier tous les dossiers avec des volumes de la machine virtuelle (sur laquelle le serveur Docker est en cours d'exécution) sur votre machine locale. Nous supposons que votre machine virtuelle docker-machine nommée default .
Il va créer un dossier ./backup_volumes dans votre répertoire actuel et copier tous les volumes dans ce dossier.
Voici un script expliquant comment copier tous les volumes enregistrés de votre répertoire local ( ./backup_volumes ) vers la machine Dockerhost
Vous pouvez maintenant vérifier si cela fonctionne en:
la source
/var/lib/docker/volumes
sous Ubuntu?Disons que le nom de votre volume est
data_volume
. Vous pouvez utiliser les commandes suivantes pour sauvegarder et restaurer le volume vers et à partir d'une image Docker nomméedata_image
:Pour sauvegarder:
Restaurer:
la source
Je sais que c'est vieux, mais je me rends compte qu'il n'y a pas de solution bien documentée pour pousser un conteneur de données (en tant que sauvegarde) vers docker hub. Je viens de publier un court exemple sur la manière de le faire sur https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub
Voici la ligne du bas
Le tutoriel docker suggère que vous pouvez sauvegarder et restaurer le volume de données localement. Nous allons utiliser cette technique, ajouter quelques lignes supplémentaires pour que cette sauvegarde soit poussée dans le hub docker pour une restauration future facile à n'importe quel emplacement que nous souhaitons. Alors, commençons. Voici les étapes à suivre:
Sauvegardez le volume de données à partir du conteneur de données nommé data-container-to-backup
Développez ce fichier tar dans un nouveau conteneur afin que nous puissions le valider dans le cadre de son image
Validez et transmettez l'image avec la balise souhaitée ($ VERSION)
Enfin, nettoyons
Maintenant, nous avons une image nommée data-backup dans notre référentiel qui est simplement un système de fichiers avec les fichiers et dossiers de sauvegarde. Pour utiliser cette image (aka restauration à partir d'une sauvegarde), nous procédons comme suit:
Exécutez le conteneur de données avec l'image de sauvegarde des données
Exécutez votre image whatEver avec les volumes du conteneur de données
C'est tout.
J'ai été surpris qu'il n'y ait pas de documentation pour ce travail. J'espère que quelqu'un trouvera cela utile. Je sais qu'il m'a fallu un certain temps pour y réfléchir.
la source
Si votre projet utilise docker-compose, voici une approche pour sauvegarder et restaurer vos volumes.
docker-compose.yml
Fondamentalement , vous ajoutez
db-backup
etdb-restore
services à votre fichier docker-compose.yml et adaptez le nom de votre volume. Mon volume est nommédbdata
dans cet exemple.Évitez la corruption
Pour la cohérence des données, arrêtez votre conteneur de base de données avant de sauvegarder ou de restaurer
Sauvegarde
Pour sauvegarder vers la destination par défaut (
backup/dbdata.tar.bz2
):Ou, si vous souhaitez spécifier un autre nom de cible, procédez comme suit:
Restauration
Pour restaurer à partir de
backup/dbdata.tar.bz2
, procédez comme suit:Ou restaurer à partir d'un fichier spécifique en utilisant:
J'ai adapté les commandes de https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ pour créer cette approche.
la source
La commande suivante exécutera tar dans un conteneur avec tous les volumes de données nommés montés et redirigera la sortie dans un fichier:
Assurez-vous de tester l'archive résultante en cas de problème:
la source
Si vous avez juste besoin d'une simple sauvegarde dans une archive, vous pouvez essayer mon petit utilitaire: https://github.com/loomchild/volume-backup
Exemple
Sauvegarde:
archivera le volume nommé
some_volume
pour/tmp/archive1.tar.bz2
archiver le fichierRestaurer:
va effacer et restaurer le volume du nom
some_volume
de/tmp/archive1.tar.bz2
fichier d' archive.Plus d'infos: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362
la source
J'ai créé un outil pour orchestrer et lancer la sauvegarde des données et des conteneurs mysql, simplement appelé docker-backup . Il y a même une image prête à l'emploi sur le hub docker .
Il est principalement écrit en Bash car il s'agit principalement d'orchestration. Il utilise
duplicity
pour le moteur de sauvegarde réel. Vous pouvez actuellement effectuer une sauvegarde sur FTP (S) et Amazon S3.La configuration est assez simple: écrivez un fichier de configuration en YAML décrivant ce qu'il faut sauvegarder et où, et c'est parti!
Pour les conteneurs de données, il monte automatiquement les volumes partagés par votre conteneur pour le sauvegarder et le traiter. Pour les conteneurs mysql, il les lie et exécute un mysqldump livré avec votre conteneur et traite le résultat.
Je l'ai écrit parce que j'utilise Docker-Cloud qui n'est pas à jour avec les dernières versions du moteur Docker et parce que je voulais adopter la méthode Docker en n'incluant aucun processus de sauvegarde dans mes conteneurs d'application.
la source
Si vous souhaitez une sauvegarde complète, vous devrez effectuer quelques étapes:
Notez que faire juste un commit Docker du conteneur sur une image n'inclut PAS les volumes attachés au conteneur (ref: documentation du commit Docker ).
" L'opération de validation n'inclura aucune donnée contenue dans les volumes montés à l'intérieur du conteneur. "
la source
Si vous aimez saisir des opérateurs arcanes à partir de la ligne de commande, vous adorerez ces techniques de sauvegarde manuelle des conteneurs. Gardez à l'esprit qu'il existe un moyen plus rapide et plus efficace de sauvegarder des conteneurs qui est tout aussi efficace. J'ai écrit des instructions ici: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus
Étape 1: Ajouter un hôte Docker à n'importe quel cloud Comme expliqué dans un tutoriel sur le site de support Morpheus, vous pouvez ajouter un hôte Docker au cloud de votre choix en quelques secondes. Commencez par choisir Infrastructure dans la barre de navigation principale de Morpheus. Sélectionnez Hôtes en haut de la fenêtre Infrastructure, puis cliquez sur le bouton «+ Container Hosts» en haut à droite.
Pour sauvegarder un hôte Docker sur un cloud via Morpheus, accédez à l'écran Infrastructure et ouvrez le menu «+ Container Hosts».
Choisissez un type d'hôte de conteneur dans le menu, sélectionnez un groupe, puis saisissez des données dans les cinq champs: Nom, Description, Visibilité, Sélectionnez un nuage et Entrez des balises (facultatif). Cliquez sur Suivant, puis configurez les options d'hôte en choisissant un plan de service. Notez que les champs Volume, Mémoire et Nombre de CPU ne seront visibles que si le plan que vous sélectionnez a des options personnalisées activées.
C'est ici que vous ajoutez et redimensionnez des volumes, définissez la taille de la mémoire et le nombre de processeurs, et choisissez un réseau. Vous pouvez également configurer le nom d'utilisateur et le mot de passe du système d'exploitation, le nom de domaine et le nom d'hôte, qui par défaut est le nom du conteneur que vous avez entré précédemment. Cliquez sur Suivant, puis ajoutez les flux de travail d'automatisation (facultatif). Enfin, vérifiez vos paramètres et cliquez sur Terminer pour les enregistrer.
Étape 2: Ajouter l'intégration du registre Docker aux nuages publics ou privés Adam Hicks décrit dans un autre didacticiel Morpheus à quel point il est simple de s'intégrer à un registre Docker privé. (Aucune configuration supplémentaire n'est requise pour utiliser Morpheus pour provisionner des images avec le hub public de Docker à l'aide de l'API Docker publique.)
Sélectionnez Intégrations sous l'onglet Admin de la barre de navigation principale, puis choisissez le bouton «+ Nouvelle intégration» sur le côté droit de l'écran. Dans la fenêtre d'intégration qui apparaît, sélectionnez Docker Repository dans le menu déroulant Type, entrez un nom et ajoutez le point de terminaison de l'API du registre privé. Fournissez un nom d'utilisateur et un mot de passe pour le registre que vous utilisez, puis cliquez sur le bouton Enregistrer les modifications.
Intégrez un registre Docker à un cloud privé via la boîte de dialogue Morpheus «Nouvelle intégration».
Pour provisionner l'intégration que vous venez de créer, choisissez Docker sous Type dans la boîte de dialogue Créer une instance, sélectionnez le registre dans le menu déroulant Registre Docker sous l'onglet Configurer, puis continuez l'approvisionnement comme vous le feriez pour n'importe quel conteneur Docker.
Étape 3: Gérer les sauvegardes Une fois que vous avez ajouté l'hôte Docker et intégré le registre, une sauvegarde sera configurée et effectuée automatiquement pour chaque instance que vous provisionnez. Le support Morpheus fournit des instructions pour afficher les sauvegardes, créer une sauvegarde d'instance et créer une sauvegarde de serveur.
la source
Si vous avez un cas aussi simple que le mien, vous pouvez faire ce qui suit:
ADD folder destination
Par exemple, en supposant que vous disposez des données des volumes sur votre répertoire de base, par exemple à,
/home/mydata
vous pouvez exécuter ce qui suit:Où votre DOCKERFILE pointe vers un fichier comme celui-ci:
Le reste des éléments est hérité de l'image de base. Vous pouvez maintenant pousser cette image vers le cloud docker et vos utilisateurs auront les données disponibles directement sur leurs conteneurs
la source
docker cp
.Le problème : vous voulez sauvegarder votre conteneur d'image AVEC les volumes de données qu'il contient, mais cette option n'est pas prête à l'emploi, le moyen simple et trivial serait de copier le chemin des volumes et de sauvegarder l'image docker 'recharger et lier les deux ensemble. mais cette solution semble être maladroite et non durable et maintenable - Vous auriez besoin de créer un travail cron qui rendrait ce flux à chaque fois.
Solution : Utilisation de dockup - Image Docker pour sauvegarder vos volumes de conteneur Docker et le télécharger sur s3 (Docker + Backup = dockup). dockup utilisera vos informations d'identification AWS pour créer un nouveau compartiment avec le nom de la variable d'environnement, obtiendra les volumes configurés et sera tarballé, gzippé, horodaté et téléchargé dans le compartiment S3.
Étapes :
docker-compose.yml
et y attacher leenv.txt
fichier de configuration. Les données doivent être téléchargées dans un compartiment s3 sécurisé dédié et prêtes à être rechargées lors des exécutions DRP. afin de vérifier quel chemin de volumes pour configurer exécuterdocker inspect <service-name>
et localiser les volumes :Modifiez le contenu du fichier de configuration
env.txt
et placez-le sur le chemin du projet:Exécutez le conteneur Dockup
la source
Il s'agit d'un moyen de sauvegarde de volume-dossier.
Si vous avez infra de registre docker, cette méthode est très utile.
Cela utilise le registre docker pour déplacer facilement le fichier zip.
Dans un autre serveur
Exécutez votre image qui utilise ce dossier de volume.
Vous pouvez créer facilement une image contenant à la fois une image d'exécution et un fichier zip de volume.
Mais je ne recommande pas pour diverses raisons (taille de l'image, commande de saisie, ..).
la source