In diesem Beitrag möchte ich euch Schritt für Schritt zeigen, wie ihr Docker Container incl. den dazugehörigen Volumes migrieren könnt. Warum genau ist das nötig? Ganz einfach, manchmal hat man halt einfach kein Docker Swarm, sondern einen Standalone-Host und man muss trotzdem Container von A nach B schieben. Hierfür gilt, wie bei vielen Dingen: Viele Wege führen nach Rom.
In meinem Beispiel gibt es genau zwei To Do’s. Zum einen muss der Container an sich auf den neuen Host gebracht, zum anderen müssen die entsprechenden Volumes migriert werden. Im besten Fall habt ihr ein Docker Compose File und könnt dieses auf dem neuen Server einfach anstoßen. Ich gehe aber mal von dem nicht so einfachen Weg aus und wir müssen den Container von Hand neu bauen. Als Hilfsmittel hierfür nutze ich Portainer, um die entsprechenden Parameter auf dem alten Host zu identifizieren bzw. auf dem neuen Server zu setzen.
Wenn ihr euch generell für das Thema Installation von Docker und Portainer interessiert, kann ich euch folgenden Beitrag von mir empfehlen:
Docker und Portainer auf Ubuntu installieren
Keine Produkte gefunden.
Alle Informationen des Docker Containers und der Volumes übertragen
Wie bereits gesagt nutze ich Portainer, um alle Informationen des alten Containers zusammenzutragen. Hierbei gehe ich einfach in den Bearbeitungsmodus. Dort finden wir alle nötigen Informationen:
Im oberen Bereich sehen wir schon einige Informationen, die wir übernehmen müssen. Dies sind der Name des Containers, das Image und den/die Port/s des Hosts bzw. des Containers.
Im unteren Bereich können mehrere Reiter mit schier unendlichen Konfigurationsmöglichkeiten befüllt werden. In den meisten Fällen sind aber nur drei bis vier davon interessant.
Im Reiter “Volume” finden wir eine der wichtigsten Informationen, wo liegen die Daten:
Unter “container” steht der Pfad innerhalb des Containers, unter “host” sehen wir den Pfad, wo die Daten wirklich liegen. Diesen benötigen wir später auch, um die Daten des Containers zu verschieben.
Der nächste interessante Reiter, ist “network”:
In meinem Fall ist die Konfiguration recht unspektakulär. Ich nutze den Bridge-Mode, in welchem Docker einfach selbst IP’s vergibt und nach außen hin ein Natting macht. Falls bei euch etwas anderes steht, übernehmt einfach die alten Informationen für den neuen Container. Gegebenenfalls müssen diese Netzwerke noch unter Networks (im Menü links) angelegt werden. Häufig reichen hier aber die Standard-Netze.
Ein weiterer wichtiger Reiter ist “Restart policy”. Hier gebt ihr vor, was mit dem Container passieren soll, wenn der Docker Host entweder geplant oder im Fehlerfall neustartet. Wenn der Container nach einem Reboot immer starten soll, seit ihr mit “Always” oder (wie in meinem Fall) “Unless stopped” auf der sicheren Seite:
Etwas optionaler wird es im Reiter “Env”. Hier gibt es keine genaue Faustregel, da einige Informationen händisch, andere aber automatisch gesetzt werden. Hier empfehle ich euch in die Dokumentation des entsprechenden Containers zu schauen. Im meinem Fall ist der einzige händisch zu setzende Parameter “TZ”, also die Timezone:
Keine Produkte gefunden.
Volumes migrieren und neuen Container deployen
Somit haben wir auch schon alle Informationen für den neuen Container gesammelt und im besten Fall auch gleich schon in das neue Portainer übertragen. Wichtig hierbei ist den Container noch nicht zu deployen, da ja noch die Daten in Form der Volumes fehlen. Diese könnt ihr ganz einfach mit einem SCP-Befehl auf der Konsole kopieren:
scp -r /container-vol/homeassistant/ root@<IP-ADRESSE>:/container-vol/
In meinem Fall gibt es ein Root-Verzeichnis “container-vol” in dem alle Volumes liegen. Ich kopiere für dieses Beispiel einfach den Ordner “homeassistant” (wie oben im Portainer gesehen) auf den neuen Host. Natürlich müsst ihr <IP-ADRESSE> noch durch eure Adresse bzw. euren DNS-Namen ersetzen. Durch den Parameter “-r” stellt ihr im Übrigen sicher, dass auch Unterordner mit kopiert werden.
Wenn alle Daten kopiert sind, seit ihr nun bereit endlich auf “Deploy the Container” zu klicken:
Jetzt wird zum einen ein neues Image gepullt und zum anderen der Container nach euren Vorgaben konfiguriert. Nach wenigen Sekunden sollte dieser up and running sein und wir konnten erfolgreich einen Docker Container incl. Volumes migrieren.
Tipps & Tricks
Ihr möchtet euch solche Migrationen lieber ersparen und stattdessen Docker Swarm nutzen? Dann empfehle ich euch einen Beitrag eines guten Freundes zu diesem Thema:
Raspberry Pi Cluster mit Docker Swarm
Ich bin beruflich Consultant für Datacenter-Netzwerke. Da ich aber durch und durch IT’ler bin, beschäftige ich mich auch im Privaten viel mit Technik, Smart Home und Automatisierung.
Mit meinen Beiträgen möchte ich euch helfen, in dieser schnelllebigen Welt der Technik etwas Licht ins Dunkle zu bringen.