Plugin-Idee: Auto-Backup von Containern bei Updates


Recommended Posts

Ich überlege gerade ob ich etwas als Plugin umsetze. Und zwar soll kurz bevor das Update eines Containers installiert wird, ein Update vom entsprechenden appdata-Ordner erstellt werden.

 

Das ist noch eine sehr frühe Phase. Wer mag kann mal diesen Code ausführen (Rückgängig machen, siehe unten):

sed -i '/communityApplications/i\
    execCommand("docker inspect $Name | grep :/ | grep -oP \x27/mnt/[^/]+/appdata/[^/:]+\x27 | sort -u | xargs -I{} sh -c \x27rm -r {}_before_update 2>/dev/null; cp -a --reflink=always {} {}_before_update\x27", $echo);
' /usr/local/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php

 

Nun geht man auf irgendeinen Container, aktiviert die erweiterte Ansicht und macht ein Force Update.

 

Man sieht nun nach dem Herunterladen der neuesten Images und dem Stoppen des Containers einen neuen "Command" Block und je nachdem wie viele Dateien gesichert werden, wird für ein paar Sekunden das "Please wait..." angezeigt:

image.png.dea2a8f4f822ca52896ef62f961e2dfb.png

 

Um dann im Anschluss wie gehabt mit Removing Container und dem Neustart des Containers fortzufahren:

image.png.3fc6edf1377ae7f0904867776c7fd0e0.png

 

Doch was ist nun dadurch passiert?

 

Nun wenn man in den Appdata-Ordner reinschaut, sieht man, dass ein neuer Ordner /containername_before_update erstellt wurde, welcher eben eine Kopie aller Dateien des Containers enthält, bevor das Update gemacht wurde:

image.png.2c96e6b1def3037702bf73a4fad78ede.png

 

Schlussendlich wäre dann die Idee (ist jetzt noch nicht im Code enthalten), dass man über einen neuen Menü-Eintrag ein Update zurückrollen kann:

image.png.848c674db545a574929ed022c46d09c3.png

 

Dazu müsste ich dann aber noch die Version des Repositories von vor dem Update ermitteln und die XML entsprechend so ändern, dass sie bei einem Rollback zB nextcloud:latest gegen nextcloud:23.0.1 oder was auch immer ersetzt, bevor der Container damit dann neu gestartet wird.

 

Was haltet ihr von der Idee?

 

 

Wie man oben genannten Code wieder entfernt:

sed -i '/execCommand("docker/d' /usr/local/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php

 

  • Like 5
Link to comment

Die Idee finde ich ziemlich gut!

Ich habe den ein oder anderen wichtigen Container, den ich vor einem Update tatsächlich manuell sichere und vorher auch prüfe welche Version (tag) installiert ist.

Wenn dies über ein Plugin automatisch geschehen würde, wäre das prima.

Mein nextcloudpi ist mir auf die Art letztens um die Ohren geflogen...

 

Es wäre vielleicht sinnvoll vor dem Backup zu prüfen wieviel freier Platz auf dem Datenträger (appdata) ist.

Optional könnte vielleicht auf einer Einstellungsseite des Plugins angegeben werden welche Container vor einem Update gesichert werden?

Link to comment
14 hours ago, vakilando said:

Es wäre vielleicht sinnvoll vor dem Backup zu prüfen wieviel freier Platz auf dem Datenträger (appdata) ist.

Das sind Snapshot-Kopien (reflinks), die keinen Speicherplatz verbrauchen. Zumindest nicht, solange nicht sehr viele appdata Dateien des Containers geändert werden. Da wäre dann aber eh die Frage wann das wieder gelöscht werden sollte.

 

14 hours ago, vakilando said:

Optional könnte vielleicht auf einer Einstellungsseite des Plugins angegeben werden welche Container vor einem Update gesichert werden?

Welchen Vorteil erwartest du dadurch?

 

 

Link to comment

Die Idee ist super. Denn bisher halte ich doch noch immer etwas die Luft an, wenn Updates ausgerollt werde. Und ein derartiges Backup wäre so manches mal schon hilfreich gewesen und hätte durchaus einiges an Zeit erspart.

Wann die Backups gelöscht werden können? Gerne nach Zeit, oder wenn mehr als X Versionen vorhanden sind.

Gesendet von meinem Pixel 6 Pro mit Tapatalk

Link to comment
13 hours ago, mgutt said:

Das sind Snapshot-Kopien (reflinks)

habe dein Script sträflicherweise nur schnell und schlecht überflogen. Wenn das kein bis wenig Speicherplatz benötigt muss nicht nach freiem Platz geprüft werden.

 

13 hours ago, mgutt said:

Welchen Vorteil erwartest du dadurch?

Der Gedanke war Platz sparen...

 

 

Link to comment
  • mgutt changed the title to Plugin-Idee: Auto-Backup von Containern bei Updates

Falls den Code oben jemand testet: Ich habe ihn aktualisiert, da er bei einem Container bei mir nicht funktioniert hat. Einfach so entfernen:

 

sed -i '/execCommand("docker/d' /usr/local/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php

 

Und dann wieder den Code aus dem ersten Beitrag ausführen.

Link to comment

Ein richtiges Problem habe ich bei der Ermittlung der Version, weil diese Information scheinbar gar nicht zur Verfügung steht:

https://forums.docker.com/t/how-to-find-out-container-version/98418

 

@ich777

Ich möchte gerne von einem :latest Container ein Backup machen und im Backup vermerken, welches :xyz man setzen muss, damit beim Restore die korrekte Containerversion verwendet wird. Hast du eine Idee wie man das angehen könnte? Laut dem Link bekommt man zumindest die digest ID heraus. Die könnte man dann ja mit Docker Hub abgleichen:

https://hub.docker.com/r/plexinc/pms-docker/tags

 

Aber haben die dafür eine API oder so? Weil wenn man auf eine Digest klickt, steht da bereits der Tag "latest" drin:

https://hub.docker.com/layers/plexinc/pms-docker/latest/images/sha256-2aabcc10513f32af87eaa9b7f9081855c226647c9e0f2028f176584d46815221?context=explore

 

Man kann so also keinen Rückschluss auf die reale Version, nämlich diese ziehen:

https://hub.docker.com/layers/plexinc/pms-docker/1.29.2.6364-6d72b0cf6/images/sha256-2aabcc10513f32af87eaa9b7f9081855c226647c9e0f2028f176584d46815221?context=explore

 

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.