Wie kann ich einen Docker-Container mit seinen Datenmengen sichern?

151

Ich habe dieses Docker-Image- Tutum / WordPress verwendet , um eine Wordpress-Website zu demonstrieren. Kürzlich habe ich herausgefunden, dass das Bild Volumes für die MySQL-Daten verwendet.

Das Problem ist also folgendes: Wenn ich den Container sichern und wiederherstellen möchte, kann ich versuchen, ein Image festzuschreiben, den Container später zu löschen und einen neuen Container aus dem festgeschriebenen Image zu erstellen. Aber wenn ich das tue, wird das Volume gelöscht und alle meine Daten sind weg.

Es muss eine einfache Möglichkeit geben, meinen Container und seine Volumendaten zu sichern, aber ich kann sie nirgendwo finden.

pguardiario
quelle
Schauen Sie sich dieses Skript an, das absolut alles in einem Docker-Projekt sichert, einschließlich benannter und unbenannter Volumes, Images, Konfigurationen, Protokolle, Container-Root-Dateisystem, Datenbanken und mehr: docker-compose-backup.sh .
Nick Sweeting

Antworten:

141

Wenn ich den Container zurücksetzen möchte, kann ich versuchen, ein Image festzuschreiben und später den Container zu löschen und einen neuen Container aus dem festgeschriebenen Image zu erstellen. Aber wenn ich das tue, wird das Volume gelöscht und alle meine Daten sind weg

Wie im Docker-Benutzerhandbuch erläutert, sollen Datenvolumes Daten außerhalb eines Container-Dateisystems beibehalten. Dies erleichtert auch die gemeinsame Nutzung von Daten zwischen mehreren Containern.

Während Docker niemals Daten in Volumes löscht (es sei denn, Sie löschen den zugehörigen Container mit docker rm -v), werden Volumes, auf die von keinem Docker-Container verwiesen wird, als baumelnde Volumes bezeichnet . Diese baumelnden Bände sind schwer zu entfernen und schwer zugänglich.

Dies bedeutet, dass sobald das letzte Container, das ein Volume verwendet, gelöscht wird, das Datenvolumen baumelt und sein Inhalt schwer zugänglich ist.

Um diese baumelnden Volumes zu verhindern, besteht der Trick darin, einen zusätzlichen Docker-Container mit dem Datenvolumen zu erstellen, das Sie behalten möchten. Damit gibt es immer mindestens diesen Docker-Container, der auf das Volume verweist. Auf diese Weise können Sie den Docker-Container löschen, in dem die WordPress-App ausgeführt wird, ohne den einfachen Zugriff auf den Inhalt dieses Datenvolumens zu verlieren.

Solche Container werden als Datenvolumencontainer bezeichnet .

Es muss eine einfache Möglichkeit geben, meinen Container plus Volumendaten zu sichern, aber ich kann sie nirgendwo finden.

Backup-Docker-Images

Verwenden Sie zum Sichern von Docker-Images den Befehl docker save , mit dem ein Teerarchiv erstellt wird, mit dem später mit dem Befehl docker load ein neues Docker-Image erstellt werden kann .

Backup-Docker-Container

Sie können einen Docker-Container auf verschiedene Arten sichern

  • durch Festschreiben eines neuen Docker-Images basierend auf dem aktuellen Status des Docker-Containers mit dem Docker-Commit- Befehl
  • durch Exportieren des Docker-Container-Dateisystems als Tar-Archiv mit dem Docker-Exportbefehl . Sie können später mit dem Docker-Importbefehl ein neues Docker-Image aus diesem Tar-Archiv erstellen .

Beachten Sie, dass diese Befehle nur das Docker-Container-Layer-Dateisystem sichern. Dies schließt die Datenmengen aus .

Backup-Docker-Datenvolumes

Um ein Datenvolume zu sichern, können Sie einen neuen Container mit dem Volume ausführen, das Sie sichern möchten, und den Befehl tar ausführen, um ein Archiv des Volume-Inhalts zu erstellen, wie im Docker-Benutzerhandbuch beschrieben .

In Ihrem speziellen Fall wird das Datenvolumen zum Speichern der Daten für einen MySQL-Server verwendet. Wenn Sie also ein Tar-Archiv für dieses Volume exportieren möchten, müssen Sie zuerst den MySQL-Server stoppen. Dazu müssen Sie den WordPress-Container stoppen.

Sichern Sie die MySQL-Daten

Eine andere Möglichkeit besteht darin, eine Remoteverbindung zum MySQL-Server herzustellen, um mit dem Befehl mysqldump einen Datenbankspeicherauszug zu erstellen . Damit dies funktioniert, muss Ihr MySQL-Server jedoch so konfiguriert sein, dass er Remoteverbindungen akzeptiert und über einen Benutzer verfügt, der eine Remoteverbindung herstellen darf. Dies ist bei dem von Ihnen verwendeten WordPress-Docker-Image möglicherweise nicht der Fall.


Bearbeiten

Docker hat kürzlich Docker-Volume-Plugins eingeführt, mit denen die Behandlung von Volumes an Plugins delegiert werden kann, die von Anbietern implementiert wurden.

Der docker runBefehl hat ein neues Verhalten für die -vOption. Es ist jetzt möglich, ihm einen Datenträgernamen zu übergeben . Auf diese Weise erstellte Volumes werden benannt und können später leicht referenziert werden, wodurch die Probleme mit baumelnden Volumes behoben werden .

Bearbeiten 2

Docker führte den docker volume pruneBefehl ein, um alle baumelnden Volumes einfach zu löschen.

Thomasleveil
quelle
33
Eigentlich bin ich mehr daran interessiert, einen Container herzustellen, den ich leicht bewegen kann. Ich verstehe den Sinn eines Containers nicht, der nicht bewegt werden kann.
Pguardiario
In diesem Fall sollten Sie sich Tools ansehen, mit denen Sie das Docker-Datenvolumen für Sie verwalten können, z. B. Flocker
Thomasleveil,
9
Docker löscht Datenmengen nicht automatisch. 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. So sind nur
Datencontainer
1
Sie benötigen keine Remote-Verbindung für die mysqldump. Einfach in den Behälter schälen, entleeren und dann mit kopieren docker cp.
Jiggunjer
@AndriiZarubin re: Überhaupt data only container obsolete?nicht. Der Nur-Daten-Container gibt Ihnen einen Container für docker exec data-container tar -czf snapshot.tgz /datadann docker cp data-container:snapshot.tgz ./snapshot.tgzund dergleichen. Wenn Sie möchten, dass der Container eine lange Lebensdauer hat, machen Sie seinen Befehl so, als würde tail -f /dev/nuller niemals beendet, und verwenden Sie dabei nur minimale Ressourcen.
Jesse Chisholm
31

UPDATE 2

Raw Single Volume Backup Bash-Skript:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Raw Single Volume Restore Bash-Skript:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Die Verwendung kann folgendermaßen aussehen:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Es werden folgende Annahmen getroffen: Die Sicherungsdatei heißt backup.tar und befindet sich im selben Verzeichnis wie das Sicherungs- und Wiederherstellungsskript. Der Datenträgername ist zwischen den Containern identisch.

AKTUALISIEREN

Es scheint mir, dass sich das Backupping von Volumes aus Containern nicht vom Backupping von Volumes aus Datencontainern unterscheidet.

Volumes sind nichts anderes als Pfade, die mit einem Container verknüpft sind. Der Prozess ist also der gleiche.

Ich weiß nicht, ob Docker-Backup auch für dieselben Containervolumes funktioniert, aber Sie können Folgendes verwenden:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

und:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

END UPDATE

Es gibt dieses nette Tool, mit dem Sie Docker-Volume-Container sichern und wiederherstellen können:

https://github.com/discordianfish/docker-backup

Wenn Sie einen Container haben, der mit einigen Containervolumes wie diesem verknüpft ist:

$ docker run --volumes-from=my-data-container --name my-server ...

Sie können alle Volumes wie folgt sichern:

$ docker-backup store my-server-backup.tar my-server

und so wiederherstellen:

$ docker-backup restore my-server-backup.tar

Oder Sie können dem offiziellen Weg folgen:

Wie portiere ich nur Datenvolumes von einem Host auf einen anderen?

Tommasop
quelle
Nein, es handelt sich nicht um eine "--volumes-from" -Situation, sondern die Volumes werden in der Docker-Datei definiert, wodurch die Daten nicht persistieren. Wenn Sie sich die Docker-Datei für Tutum / Lampe ansehen , werden Sie sehen, was ich meine.
Pguardiario
Die Antwort, die ich bereits gegeben habe, ist für jede Art von Volume gut, da Volumes Volumes und Container Container sind. Es gibt keinen Unterschied, ob Sie einen Container aus Datenträgerperspektive als
Datencontainer verwenden
Das in der Docker-Datei definierte Volume wird zerstört, wenn der Container zerstört wird. Es gibt also keine Möglichkeit, diese Daten zurückzugewinnen, wenn Sie den Container verschieben.
Pguardiario
Sie müssen die Daten
herausholen
1
Ich erhalte eine Fehlermeldung: unknown shorthand flag: 'r' in -rm.Sollte es sein --rm? (Docker Version 18.09.5, Build e8ff056)
kuga
21

Wenn Sie nur gemountete Volumes sichern müssen, können Sie einfach Ordner von Ihrem Dockerhost kopieren .

Hinweis: Wenn Sie unter Ubuntu arbeiten , ist Dockerhost Ihr lokaler Computer. Wenn Sie einen Mac verwenden , ist Dockerhost Ihre virtuelle Maschine.

Auf Ubuntu

Hier finden Sie alle Ordner mit Volumes: /var/lib/docker/volumes/Sie können sie also kopieren und archivieren, wo immer Sie möchten.

Auf MAC

Es ist nicht so einfach wie unter Ubuntu. Sie müssen Dateien von der VM kopieren.

Hier finden Sie ein Skript zum Kopieren aller Ordner mit Volumes von der virtuellen Maschine (auf der der Docker-Server ausgeführt wird) auf Ihren lokalen Computer. Wir gehen davon aus, dass Ihre Docker-Machine-VM den Standard hat .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Es wird ein Ordner ./backup_volumes in Ihrem aktuellen Verzeichnis erstellt und alle Volumes in diesen Ordner kopiert.

Hier ist ein Skript zum Kopieren aller gespeicherten Volumes aus Ihrem lokalen Verzeichnis ( ./backup_volumes ) auf den Dockerhost-Computer

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Jetzt können Sie überprüfen, ob es funktioniert durch:

docker volume ls
Andrii Dvoiak
quelle
Müssen wir den Container herunterfahren, um eine Sicherungskopie dieses Ordners /var/lib/docker/volumesunter Ubuntu zu erstellen?
onknows
2
Nicht erforderlich. Sie können diesen Ordner jederzeit kopieren.
Andrii Dvoiak
4
Technisch gesehen können Sie das, aber Sie sind Datenbeschädigungsproblemen ausgesetzt, da die Kopie nicht atomar ist und möglicherweise gleichzeitig auf das Volume geschrieben wird. Ich möchte den Container lieber zuerst stoppen.
Alessandro S.
13

Angenommen, Ihr Datenträgername lautet data_volume. Mit den folgenden Befehlen können Sie das Volume auf und von einem Docker-Image mit dem Namen sichern und wiederherstellen data_image:

Sichern:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Etwas wiederherstellen:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-
Sahil Ahuja
quelle
Ist dies ein Echtzeit-Backup?
Kang Andrew
2
Da dasselbe Volume auf mehreren Dockern bereitgestellt werden kann, handelt es sich um eine Echtzeitsicherung. Z.B. Auf einem MySQL-Container gemountetes Volume kann gesichert werden (vorausgesetzt, keine Datenbeschädigung). Aber für Dienste, die aus Angst vor Datenkorruption gestoppt werden müssen, ist dies keine Echtzeit.
Sahil Ahuja
9

Ich weiß, dass dies alt ist, aber mir ist klar, dass es keine gut dokumentierte Lösung gibt, um einen Datencontainer (als Backup) zum Docker-Hub zu verschieben. Ich habe gerade ein kurzes Beispiel dazu unter https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub veröffentlicht

Es folgt das Endergebnis

Das Docker-Tutorial schlägt vor, dass Sie das Datenvolumen lokal sichern und wiederherstellen können. Wir werden diese Technik verwenden und ein paar weitere Zeilen hinzufügen, um dieses Backup in den Docker-Hub zu verschieben, damit es in Zukunft problemlos an einem beliebigen Ort wiederhergestellt werden kann. Also lasst uns anfangen. Dies sind die folgenden Schritte:

Sichern Sie das Datenvolumen aus dem Datencontainer mit dem Namen data-container-to-backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Erweitern Sie diese TAR-Datei in einen neuen Container, damit wir sie als Teil ihres Images festschreiben können

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Übernehmen Sie das Bild und verschieben Sie es mit einem gewünschten Tag ($ VERSION).

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Lassen Sie uns zum Schluss aufräumen

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Jetzt haben wir ein Image namens Datensicherung in unserem Repo, das einfach ein Dateisystem mit den Sicherungsdateien und Ordnern ist. Um dieses Image zu verwenden (auch als Wiederherstellung aus dem Backup bezeichnet), gehen wir wie folgt vor:

Führen Sie den Datencontainer mit dem Datensicherungsimage aus

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Führen Sie Ihr whatEver-Image mit Volumes aus dem Daten-Conainter aus

docker run --volumes-from=data-container repo/whatEver

Das ist es.

Ich war überrascht, dass es für diese Problemumgehung keine Dokumentation gibt. Ich hoffe jemand findet das hilfreich. Ich weiß, ich habe eine Weile gebraucht, um darüber nachzudenken.

Z-Stern
quelle
8

Wenn Ihr Projekt Docker-Compose verwendet, finden Sie hier einen Ansatz zum Sichern und Wiederherstellen Ihrer Volumes.

docker-compose.yml

Grundsätzlich fügen Sie Ihrer Datei docker-compose.yml db-backupund db-restoreServices hinzu und passen sie an den Namen Ihres Volumes an. Mein Volume wird dbdatain diesem Beispiel benannt.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Vermeiden Sie Korruption

Stoppen Sie aus Gründen der Datenkonsistenz Ihren Datenbankcontainer, bevor Sie eine Sicherungskopie erstellen oder wiederherstellen

docker-compose stop db

Sichern

So sichern Sie das Standardziel ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Wenn Sie einen alternativen Zielnamen angeben möchten, gehen Sie wie folgt vor:

docker-compose run --rm -e TARGET=mybackup db-backup

Wiederherstellen

Führen Sie zum Wiederherstellen Folgendes aus backup/dbdata.tar.bz2:

docker-compose run --rm db-restore

Oder stellen Sie eine Wiederherstellung aus einer bestimmten Datei her, indem Sie:

docker-compose run --rm -e SOURCE=mybackup db-restore

Ich habe Befehle von https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ angepasst , um diesen Ansatz zu erstellen.

jdhildeb
quelle
5

Der folgende Befehl führt tar in einem Container mit allen bereitgestellten benannten Datenvolumes aus und leitet die Ausgabe in eine Datei um:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Stellen Sie sicher, dass Sie das resultierende Archiv testen, falls etwas schief geht:

tar -tjf data-volumes.tar.bz2
konrad
quelle
4

Wenn Sie nur eine einfache Sicherung in einem Archiv benötigen, können Sie mein kleines Dienstprogramm ausprobieren: https://github.com/loomchild/volume-backup

Beispiel

Backup:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

archiviert das some_volumein die /tmp/archive1.tar.bz2Archivdatei benannte Volume

Wiederherstellen:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

wird abwischen und Volume mit dem Namen wiederherstellen some_volumeaus /tmp/archive1.tar.bz2Archivdatei.

Weitere Informationen: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362

Loomchild
quelle
Ich habe ein ähnliches Tool erstellt. Github.com/01e9/docker-backup Es erstellt Backup-Archive und fügt sie einem Resilio-Synchronisierungsverzeichnis hinzu
Oleg
2

Ich habe ein Tool zum Orchestrieren und Starten der Sicherung von Daten und MySQL-Containern erstellt, das einfach als Docker-Sicherung bezeichnet wird . Auf dem Docker-Hub befindet sich sogar ein gebrauchsfertiges Image .

Es ist hauptsächlich in Bash geschrieben, da es hauptsächlich Orchestrierung ist. Es wird duplicityfür die eigentliche Backup-Engine verwendet. Sie können derzeit auf FTP (S) und Amazon S3 sichern.

Die Konfiguration ist ganz einfach: Schreiben Sie eine Konfigurationsdatei in YAML, in der beschrieben wird, was und wo gesichert werden soll, und los geht's!

Bei Datencontainern werden die von Ihrem Container gemeinsam genutzten Volumes automatisch bereitgestellt, um sie zu sichern und zu verarbeiten. Bei MySQL-Containern werden diese verknüpft und ein mit Ihrem Container gebündelter MySQL-Dump ausgeführt und das Ergebnis verarbeitet.

Ich habe es geschrieben, weil ich Docker-Cloud verwende, das mit den neuesten Docker-Engine-Versionen nicht auf dem neuesten Stand ist, und weil ich den Docker-Weg nutzen wollte, indem ich keinen Sicherungsprozess in meine Anwendungscontainer einbezog.

Arnaud de Mouhy
quelle
1

Wenn Sie arkane Operatoren über die Befehlszeile eingeben möchten, werden Sie diese manuellen Containersicherungstechniken lieben. Beachten Sie, dass es eine schnellere und effizientere Möglichkeit gibt, Container zu sichern, die genauso effektiv ist. Ich habe hier Anweisungen geschrieben: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Schritt 1: Hinzufügen eines Docker-Hosts zu einer beliebigen Cloud Wie in einem Lernprogramm auf der Morpheus-Support-Website erläutert, können Sie der Cloud Ihrer Wahl innerhalb von Sekunden einen Docker-Host hinzufügen. Beginnen Sie mit der Auswahl von Infrastruktur in der Hauptnavigationsleiste von Morpheus. Wählen Sie oben im Infrastrukturfenster Hosts aus und klicken Sie oben rechts auf die Schaltfläche „+ Container-Hosts“.

Um einen Docker-Host über Morpheus in einer Cloud zu sichern, navigieren Sie zum Bildschirm Infrastruktur und öffnen Sie das Menü „+ Container-Hosts“.

Wählen Sie im Menü einen Container-Host-Typ aus, wählen Sie eine Gruppe aus und geben Sie Daten in die fünf Felder ein: Name, Beschreibung, Sichtbarkeit, Cloud auswählen und Tags eingeben (optional). Klicken Sie auf Weiter und konfigurieren Sie die Hostoptionen, indem Sie einen Serviceplan auswählen. Beachten Sie, dass die Felder Volume, Memory und CPU Count nur sichtbar sind, wenn für den ausgewählten Plan benutzerdefinierte Optionen aktiviert sind.

Hier können Sie Volumes hinzufügen und skalieren, die Speichergröße und die CPU-Anzahl festlegen und ein Netzwerk auswählen. Sie können auch den Benutzernamen und das Kennwort des Betriebssystems, den Domänennamen und den Hostnamen konfigurieren. Dies ist standardmäßig der zuvor eingegebene Containername. Klicken Sie auf Weiter und fügen Sie dann alle Automatisierungsworkflows hinzu (optional). Überprüfen Sie abschließend Ihre Einstellungen und klicken Sie auf Fertig stellen, um sie zu speichern.

Schritt 2: Hinzufügen der Docker-Registrierungsintegration zu öffentlichen oder privaten Clouds Adam Hicks beschreibt in einem anderen Morpheus-Tutorial, wie einfach die Integration in eine private Docker-Registrierung ist. (Für die Verwendung von Morpheus zum Bereitstellen von Images mit dem öffentlichen Hub von Docker mithilfe der öffentlichen Docker-API ist keine zusätzliche Konfiguration erforderlich.)

Wählen Sie auf der Registerkarte "Admin" der Hauptnavigationsleiste "Integrationen" aus und klicken Sie dann auf der rechten Seite des Bildschirms auf die Schaltfläche "+ Neue Integration". Wählen Sie im angezeigten Integrationsfenster im Dropdown-Menü Typ die Option Docker-Repository aus, geben Sie einen Namen ein und fügen Sie den API-Endpunkt für die private Registrierung hinzu. Geben Sie einen Benutzernamen und ein Kennwort für die von Ihnen verwendete Registrierung ein und klicken Sie auf die Schaltfläche Änderungen speichern.

Integrieren Sie eine Docker-Registrierung in eine private Cloud über das Dialogfeld „Neue Integration“ von Morpheus.

Um die soeben erstellte Integration bereitzustellen, wählen Sie im Dialogfeld "Instanz erstellen" unter "Typ" die Option "Docker" aus, wählen Sie die Registrierung im Dropdown-Menü "Docker-Registrierung" auf der Registerkarte "Konfigurieren" aus und setzen Sie die Bereitstellung wie bei jedem Docker-Container fort.

Schritt 3: Verwalten von Sicherungen Nachdem Sie den Docker-Host hinzugefügt und die Registrierung integriert haben, wird für jede von Ihnen bereitgestellte Instanz automatisch eine Sicherung konfiguriert und durchgeführt. Die Morpheus-Unterstützung enthält Anweisungen zum Anzeigen von Sicherungen, zum Erstellen einer Instanzsicherung und zum Erstellen einer Serversicherung.

thelefty07
quelle
1

Wenn Sie eine vollständige Sicherung wünschen, müssen Sie einige Schritte ausführen:

  1. Übertragen Sie den Container auf ein Bild
  2. Speichern Sie das Bild
  3. Sichern Sie das Volume des Containers, indem Sie eine TAR-Datei mit dem Mount-Punkt des Volumes im Container erstellen.
  4. Wiederholen Sie die Schritte 1 bis 3 auch für den Datenbankcontainer.

Beachten Sie, dass nur ein Docker-Commit des Containers für ein Image KEINE an den Container angehängten Volumes enthält (siehe Docker-Commit-Dokumentation ).

" Die Festschreibungsoperation enthält keine Daten, die in im Container bereitgestellten Volumes enthalten sind. "

eaglet3d
quelle
0

Wenn Sie einen so einfachen Fall wie meinen haben, können Sie Folgendes tun:

  1. Erstellen Sie eine Docker-Datei, die das Basis-Image Ihres Containers erweitert
  2. Ich gehe davon aus, dass Ihre Volumes Ihrem Dateisystem zugeordnet sind, sodass Sie diese Dateien / Ordner einfach mit zu Ihrem Image hinzufügen können ADD folder destination
  3. Getan!

Angenommen, Sie haben die Daten von den Volumes in Ihrem Home-Verzeichnis, /home/mydatakönnen Sie beispielsweise Folgendes ausführen:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Wo Ihre DOCKERFILE auf eine Datei wie diese zeigt:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <[email protected]>

WORKDIR /opt/data
ADD mydata .

Der Rest des Materials wird vom Basis-Image geerbt. Sie können dieses Image jetzt in die Docker-Cloud übertragen, und Ihre Benutzer haben die Daten direkt in ihren Containern verfügbar

Danielo515
quelle
Was bringt es, ein Volume zu verwenden, wenn Sie es irgendwann nur noch in das Bild einbrennen möchten?
Jiggunjer
@jiggunjer mit einem Volume können Sie die Daten im Container
überschreiben
Ich kann Daten auch ohne Volume überschreiben docker cp.
Jiggunjer
0

Das Problem : Sie möchten Ihren Image-Container mit den darin enthaltenen Datenvolumes sichern, aber diese Option ist nicht sofort einsatzbereit. Der einfache und triviale Weg wäre, den Volume-Pfad zu kopieren und das Docker-Image zu sichern, es neu zu laden und zu verknüpfen beide zusammen. Diese Lösung scheint jedoch ungeschickt und nicht nachhaltig und wartbar zu sein. Sie müssten einen Cron-Job erstellen, der diesen Fluss jedes Mal zum Laufen bringt.

Lösung : Verwenden von Dockup - Docker-Image zum Sichern Ihrer Docker-Containervolumes und Hochladen auf s3 (Docker + Backup = Dockup). Dockup verwendet Ihre AWS-Anmeldeinformationen, um einen neuen Bucket mit dem Namen gemäß der Umgebungsvariablen zu erstellen, ruft die konfigurierten Volumes ab und wird tarballiert, komprimiert, mit einem Zeitstempel versehen und in den S3-Bucket hochgeladen.

Schritte :

  1. Konfigurieren Sie die docker-compose.ymlund hängen Sie die env.txtKonfigurationsdatei daran an. Die Daten sollten in einen dedizierten gesicherten S3-Bucket hochgeladen und bereit sein, bei DRP-Ausführungen neu geladen zu werden. Um zu überprüfen, welcher Volume-Pfad konfiguriert werden soll, führen Sie docker inspect <service-name>die Volumes aus und suchen Sie sie :

"Volumes": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Bearbeiten Sie den Inhalt der Konfigurationsdatei env.txtund platzieren Sie ihn im Projektpfad:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Führen Sie den Dockup-Container aus

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Überprüfen Sie anschließend, ob Ihr s3-Bucket die relevanten Daten enthält
avivamg
quelle
-1

Dies ist eine Sicherungsmethode für Volume-Ordner.
Wenn Sie eine Docker-Registrierung haben, ist diese Methode sehr hilfreich.
Dies verwendet die Docker-Registrierung zum einfachen Verschieben der Zip-Datei.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

Auf einem anderen Server

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Führen Sie Ihr Image aus, das diesen Volume-Ordner verwendet.
Sie können problemlos ein Image erstellen, das sowohl ein Run-Image als auch eine Volume-Zip-Datei enthält.
Ich habe jedoch aus verschiedenen Gründen (Bildgröße, Eingabebefehl, ..) nicht empfohlen.

Myeongsik Joo
quelle