Docker Container sichern

  • Hi

    ich habe mehrere Docker-Container auf meinem RPi 4 erfolgreich mittels Portainer eingerichtet und am Laufen.

    Nachdem ich in der Vergangenheit schon öfters mit defekten SD-Karten zu kämpfen hatte (bei nem Rpi1), möchte ich dem beim RPi4 ebenfalls wieder vorbeugen und regelmäßig meine Dateien sichern. Damit habe ich bei Bedarf relativ schnell alles wieder aufgesetzt. Früher hatte ich jedoch noch kein Docker. :D

    Die Container-Dateien und Container-Images schaffe ich ohne Probleme zu sichern.
    Somit bin ich aktuell schon im Stande, im Fall der Fälle zumindest alles händisch wieder einzurichten. Dafür müsste ich mir jedoch nun aufschreiben, welche Environments, Ports, Volumes etc ich bei den jeweiligen Containern hinterlegt habe.

    Gerne möchte dieses aufschreiben umgehen.

    Gibts dafür eine charmante Möglichkeit?
    Ich habe mich natürlich schon informiert und vermute, dass docker-compose das Zauberwort ist. Gibts dafür irgendeine Anfänger-Freundliche hilfe, ggf. kann man ein docker-compose einfach aus nem vorhanden und fertig eingerichteten container erzeugen lassen?

    Bin für jede Hilfe dankbar.

    Grüße

  • So ne docker run hab ich schon mal gesehen. Hab bisher allerdings noch nicht verstanden, wie ich die dann letztendlich ausführen kann. Das war damals der Grund, warum ich dann portainer installiert habe um die Variablen zu setzen. Wo füge ich die Zeilen dann ein? Übers terminal (ssh) hats damals nicht geklappt.

  • Irgendwo muss Portainer das ja speichern, denn wenn man z.B. Watchtower installiert hat, bekommt der es ja fertig, den Container zu aktualisieren und wieder zu starten.

    Spoiler anzeigen

    Server: Supermicro mit 2xXeon E5-2690v2 und 128GB RAM, Emby-Server, Plex-Server, Tvheadend. Ubuntu-Server 18.04 LTS, ZFS-Datengrab

    Workstation Threadripper 2950x mit 32GB RAM

    Client: 2x X96 Libreelec mit Kodi 18.1

  • Ja, ich vermute auch, dass das irgendwo gespeichert sein müsste. evtl. in der portainer.db-datei.
    Das Portainer-Volume "data" sichere ich ebenfalls.

    @darkside40
    Die parameter für ne docker run bekomme ich hin zu setzen (kann ich entsprechend aus portainer abschreiben und eintragen).
    Kannst du mir noch nen Tipp geben, wie ich z. B. folgenden docker run nun ausführen kann. Copy+Paste über ssh. wird ja nicht funktionieren.

  • Ich verstehe nicht, wieso Docker Compose hier Quatsch sein sollte. Für diesen Zweck ist das doch optimal und relativ einfach zu verstehen bzw. es lässt sich aus den Docker runs herauslesen, wie das Compose File aussehen muss. Damit hätte man im Fall der Fälle alles wieder recht schnell zusammen.

  • Mal so was ganz allgemeines zu Docker Containern....

    Der Container selbst sollte immer "stateless" sein. Heißt im Klartext, dass der Container auch weg geworfen werden kann und dieser absolut unwichtig sein sollte. Docker Container basieren ebenfalls auf einem Betriebssystem innerhalb des Containers. Sei es nun Debian, Alpine oder was auch immer. Gerne kann man auch entsprechende fertige Container zu seinen Services verwenden. Möchte man ganz sicher gehen, dann schreibt man sich das Dockerfile einfach selbst, in dem man mit der Wahl des Betriebssystem anfängt:

    Code
    FROM Debian:10.0
    ..
    ...
    ..


    Und dann installiert man die entsprechenden Dinge, die man braucht um den Service zu erstellen, den man benötigt. Wenn man einen entsprechenden Service benötigt, dann kann man natürlich auch ein fertiges Docker-Image nehmen. Man sollte darauf achten offizielle Docker Images zu nehmen, da diese auch sehr lange verfügbar sind. Möchte man Veränderungen in diesem Image vornehmen, dann schreibt man sich auch dafür ein eigenes Dockerfile und passt das an. Zum Beispiel, wenn ich einer Postgres-Datenbank Dinge hinzufügen möchte, kann ich das entweder rein kopieren oder halt auch rein mounten:

    Code
    FROM postgres:9.4
    
    
    COPY blabla


    Besonders wichtig ist, dass entsprechende Nutzdaten, die einem wichtig sind, gemountet und somit persistent gemacht werden. Dann kann der Container nämlich auch einfach weg fliegen und die Daten sind immer noch vorhanden, da sie außerhalb des Containers liegen. Fährt man den nächsten Container mit dem entsprechenden Dockerfile wieder hoch, dann werden die Daten einfach weiter genutzt. Eine gute Methode dafür ist natürlich docker-compose. Innerhalb eines docker-compose kann man entweder direkt das Docker-Image angeben, welches man benutzen möchte, oder halt auch das Dockerfile, welches man sich selbst geschrieben hat.

    Man muss weiterhin verstehen, dass Container, die man von Docker direkt verwendet, immer ein Image dazu pullen. Das kann man nach dem erstellen des Dockers ganz einfach via docker image ls prüfen. Löscht man diese Images nicht manuell, dann liegen sie auch sehr lange auf der Platte vor.:


    Um Docker-Images richtig zu sichern kann man entweder seine Images in das Docker.io Repo pushen (das ist sogar gar nicht so schwer) oder man erstellt sich selbst zu Hause seine eigene Docker-Registry und pusht Images dort hin. Dann kann man sie, wenn sie sauber getaggt worden sind, auch einfach wieder pullen und weiter verwenden.

    https://docs.docker.com/registry/

    Auf Youtube gibt es sehr gute Tutorials. Einige gehen 3-4 Stunden. Stichwort zur Suche wäre: "Docker from zero to hero". Solche Videos erklären Schritt für Schritt was man wie machen muss.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!