Backup eines Compose-Projects wiederherstellen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

OdinsAuge

Benutzer
Registriert
12. Nov. 2015
Beiträge
389
Reaktionspunkte
38
Punkte
34
Meine Docker-Projekte werden alle regelmäßig gesichert. Compose-File, Configs und User-Daten der Container sowie die Datenbanken.

Wie ich Daten wiederherstelle ist mir klar, Container/Projekt stoppen, Backup der Daten einspielen, Container/Projekt wieder starten.

Wie siehts aber aus, wenn beispielsweise der Contrainer/die Anwendung fehlerhaft ist und ich eine ältere Version wiederherstellen möchte?
Muss ich wissen welche Image-Version im Backup steckt? Im Compose steht ja nur "latest".

Ich würde so vorgehen:
  1. aktuelles Projekt stoppen
  2. Backup einspielen
  3. Compose bearbeiten und dort explizit die alte Version der Images angeben (die ich dazu wissen muss)
  4. Projekt neu erstellen (alte Images werden geladen und Container daraus erstellt)
Denk ich zu kompliziert? Hab ich was übersehen? Wenn die Image/Anwendungsversion in den gesicherten Files(z.B. config) vermerkt ist gut, muss ich andernfalls die Version selbst vermerken?
 
Annahme: du verwendest ein Backup-Skript zum Vorbereiten der Daten

Falls das der Fall ist:
- alle image: Zeilen aus Compose-Datei greppen
- je Image docker inspect --format '{{.RepoDigests}}' <image> auslesen und es in irgendwo in einer Datei ablegen.

Wenn Du es dann wieder herstellen musst, dann kannst Du mit dem RepoDigest das exakte Image wieder beziehen (sofern es online nicht gelöscht wurde)

Alternativ kannst schauen, ob die Images Labels setzen, die brauchbare Information enthält, bspw. docker inspect --format '{{index .Config.Labels "org.opencontainers.image.version"}}' <image>.

Dein Ablauf wird so funktionieren.
 
Kann ich den SHA256 den ich mit RepoDigests rausbekomme, direkt im Compose file nutzen oder muss ich selber im Repo/Docker Hub nachschauen welches Image zum Hash passt?
Image Version hat in meinem Fall leider nichts ergeben.
 
Das sollte so wie es dort steht nutzbar sein.

Mach doch mal den versuch: pull es so wie es dort steht (natürlich ohne die eckigen Klammern).
Im Firmenumfeld ist es nicht unüblich Images auf den Digest festzupinnen, um eben die Überraschung "Heute zeigt das Tag auf ein anderes Image" zu vermeiden.
 
Ich hab glatt vergessen ein konkretes Beispiel zu posten:
Code:
$ docker pull hello-world:latest
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
ea52d2000f90: Download complete
Digest: sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

$ docker inspect --format '{{.RepoDigests}}' hello-world:latest
[hello-world@sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a]

$ docker image rm hello-world:latest
Untagged: hello-world:latest
Deleted: sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a

$ docker run --rm hello-world@sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a
Unable to find image 'hello-world@sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a' locally
docker.io/library/hello-world@sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
ea52d2000f90: Download complete
Digest: sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a
Status: Downloaded newer image for hello-world@sha256:ef54e839ef541993b4e87f25e752f7cf4238fa55f017957c2eb44077083d7a6a

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
 
Super, vielen Dank für das Beispiel.
Hab Backups bisher nur manuell über Hyper Backup getestet, da ich das Projekt gerade erst am aufsetzen bzw. testen bin.
Aber wenn alles steht werd ich das per Skript umsetzen.
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat