So kopieren/verschieben Sie einen Docker-Container auf einen anderen Host
Da Docker-Container kleine Software-Boxen sind, können Sie sie problemlos kopieren und von Computer zu Computer verschieben. Möglicherweise haben Sie an einer Docker-Instanz auf Ihrem lokalen Computer gearbeitet und beschlossen, diese auf einen leistungsstärkeren Server zu verschieben. Oder vielleicht möchten Sie Ihren benutzerdefinierten Container einfach auf mehreren Computern bereitstellen und ihn „kopieren und einfügen“. In anderen Fällen sind Sie möglicherweise mit einem Cloud-Computing-Anbieter unzufrieden und möchten zu einem anderen wechseln. Hier zeigen wir Ihnen, wie Sie Ihr vorhandenes Docker-Container-Image und Ihre Datenvolumes von einem Linux-Host auf einen anderen verschieben.
Gut zu wissen: Beginnen Sie mit Containern, indem Sie Docker auf Ihrer Linux-Distribution installieren.
Container-Image vom Quellhost speichern
Beginnen Sie mit der Auflistung der verfügbaren Docker-Container, die auf Ihrem System laufen. In meinem Fall möchte ich meinen Nginx-Docker-Container auf eine neue Maschine exportieren:
Suchen Sie den Container, den Sie kopieren möchten, und stoppen Sie dann die Instanz:
Docker stop NAME_DER_INSTANZEin Docker-Container wird aus einem generischen, anfänglichen Image erstellt. Im Laufe der Zeit fügen Sie diesem Basis-Image Ihre eigenen Änderungen hinzu. Prozesse, die im Container ausgeführt werden, speichern möglicherweise auch ihre eigenen Daten oder nehmen andere Änderungen vor. Um all dies beizubehalten, übertragen Sie den aktuellen Status Ihres Containers in ein neues Image:
[enlazatom_show_links]Docker-Commit NAME_DER_INSTANZ meinContainerimageBeachten Sie, dass diese Aktion die Instanz anhält, wenn sie gerade ausgeführt wird, während ihr Inhalt gespeichert wird. Wenn dies ein Problem darstellt, können Sie diese Pause vermeiden, indem Sie stattdessen docker commit -p=false NAME_DER_INSTANCE mycontainerimage eingeben. Tun Sie dies jedoch nur, wenn es unbedingt erforderlich ist. In diesem Fall steigt die Wahrscheinlichkeit, ein Image mit inkonsistenten/unvollständigen Daten zu erstellen.
Speichern Sie jetzt Ihr neu festgeschriebenes Docker-Container-Image in einer Archivdatei:
docker save -o meinContainerimage.tar meinContainerimageVerwenden Sie Ihre bevorzugte Dateiübertragungsmethode und kopieren Sie Ihre .tar-Datei auf den Host, auf den Sie Ihren Docker-Container verschieben möchten. Beispielsweise überträgt der folgende Befehl mein Nginx-Docker-Image mithilfe von scp:
scp ./mycontainerimage.tar ramces@meine.IP.Adresse.hier:/home/ramces/Exportieren eines Docker-Volumes aus Ihrem Container
Einer der Nachteile beim Speichern eines Docker-Images besteht darin, dass es nicht mit den Docker-Zubehörteilen geliefert wird, die Sie zusammen mit Ihrem Container eingerichtet haben. Dazu gehören alle Netzwerkbindungsmounts und die Volumes, die Sie zum Speichern Ihrer persistenten Daten erstellt haben.
Um Ihr Datenvolumen ordnungsgemäß zu exportieren, installieren Sie zunächst Git auf Ihrem lokalen Computer:
Führen Sie den folgenden Befehl aus, um das Volume-Exportskript für Docker herunterzuladen:
Git-Klon https://github.com/ricardobranco777/docker-volumes.sh.gitStellen Sie sicher, dass das Exportskript über die richtigen Berechtigungsbits verfügt, und kopieren Sie es dann in das Verzeichnis „/usr/local/bin:“ Ihres Computers.
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Testen Sie, ob Ihr Skript ordnungsgemäß funktioniert, und extrahieren Sie dann alle zugehörigen Volumes für Ihren Container:
docker-volumes.sh -h docker-volumes.sh NAME_DER_INSTANZ save mycontainerimage-volume.tarSenden Sie Ihre neu archivierten Docker-Volume-Dateien an Ihren Remote-Computer:
scp ./mycontainerimage-volume.tar ramces@meine.IP-Adresse.hier:/home/ramces/Container-Image auf Zielhost laden
Melden Sie sich bei Ihrem Remote-Host an und führen Sie dann den folgenden Befehl aus, um es in den Docker-Daemon Ihres Remote-Computers zu laden:
docker load -i ./mycontainerimage.tarVerwenden Sie docker create, um Ihr Docker-Container-Image mit den ursprünglichen Run-Flags von Ihrem Quellcomputer neu zu initialisieren. Beispielsweise war bei meinem Nginx-Docker-Container ursprünglich Port 80 dem Port 8080 meines Hostcomputers zugeordnet:
docker create --name mein-nginx-container -p 8080:80 meinContainerimageFühren Sie Ihren neu importierten Docker-Container aus:
Docker starte meinen Nginx-ContainerBestätigen Sie, dass Ihr importiertes Image ordnungsgemäß funktioniert, indem Sie alle aktiven Container im System auflisten:
Zu Ihrer Information: Verwandeln Sie Ihren Raspberry Pi in eine leistungsfähige portable Fotogalerie, indem Sie Photoprism mit Docker installieren.
Importieren eines Docker-Volumes in Ihren Container
Um eine .tar-Docker-Volume-Datei zu importieren, laden Sie zuerst Git auf Ihren neuen Host herunter:
Laden Sie genau wie bei Ihrem ursprünglichen System das Hilfsskript docker-volume.sh herunter, setzen Sie seine Berechtigungsbits auf „Ausführen“ und kopieren Sie es dann in das Verzeichnis „/usr/local/bin“ Ihres neuen Computers.
Erstellen Sie einen neuen Docker-Container mit Ihrer exportierten Image-Datei:
docker erstellen --name mein-nginx-container -v myvol:/usr/share/nginx/html -p 8080:80 meinContainerimageFühren Sie das Skript docker-volume.sh mit Ihrer ursprünglichen TAR-Datei aus, um sie in den Docker-Daemon Ihres neuen Systems zu laden:
docker-volumes.sh my-nginx-container laden mycontainerimage-volume.tarStarten Sie Ihren neuen Docker-Container, indem Sie den folgenden Befehl ausführen:
Docker starte meinen Nginx-ContainerTesten Sie, ob Ihr Container Ihr Volumen ordnungsgemäß lädt, indem Sie sich seine internen Konfigurationsdaten ansehen:
docker inspect -f '{{ .Mounts }}' mein-nginx-containerBild übertragen ohne eine Datei zu erstellen
Manchmal möchten Sie vielleicht auf das Erstellen einer mycontainerimage.tar.gz-Datei verzichten. Vielleicht haben Sie nicht genügend Speicherplatz, da der Container viele Daten enthält. Sie können das Image mit einem Befehl auf dem Zielhost speichern, übertragen und laden. Nachdem Sie den oben beschriebenen Docker-Commit-Befehl ausgeführt haben, können Sie Folgendes verwenden:
Docker speichert mein Containerimage | ssh ramces@meine.IP.Adresse Docker ladenEs sollte auch unter Windows funktionieren, da es jetzt über einen integrierten SSH-Client verfügt (PuTTY ist nicht mehr erforderlich).
Fahren Sie mit dem Docker-Create-Befehl fort, der auf Ihre Situation zutrifft.
Notiz: Stellen Sie sicher, dass Sie alle Docker-Volumes, die zuvor an Ihren Container angehängt waren, ordnungsgemäß gemountet haben, bevor Sie das importierte Image starten.
Starten Sie abschließend Ihren neu importierten Docker-Container, indem Sie „docker start“ gefolgt vom Namen Ihres Containers ausführen.
Verwenden von Docker Compose zum Verschieben einer gesamten Docker-Bereitstellung
Mit seinem Compose-Plugin ermöglicht Docker das Erstellen, Konfigurieren und Ausführen komplexer Programme, ohne sich um den zugrunde liegenden Software-Stack des Servers kümmern zu müssen. Dies wiederum ermöglicht Ihnen die Erstellung reproduzierbarer Anwendungsbereitstellungen auf verschiedenen Linux-Systemen.
Um mit der Migration Ihres vorhandenen Docker-Setups zu Docker Compose zu beginnen, stellen Sie zunächst sicher, dass das Plugin derzeit in Ihrem System vorhanden ist:
sudo apt installiere Docker-Compose-Plugin Docker-Buildx-PluginErstellen Sie in Ihrem Home-Verzeichnis einen neuen Ordner für Ihre Docker Compose-Installation:
mkdir ~/mein-docker-compose und cd ~/mein-docker-composeVerwenden Sie Ihren bevorzugten Texteditor, um eine „docker-compose.yml“-Datei für Ihre Anwendung zu erstellen:
nano ./docker-compose.ymlFügen Sie den folgenden Codeblock in Ihre Compose-Datei ein und passen Sie ihn dann Ihren spezifischen Anforderungen entsprechend an:
Version: „3“ Volumes: myvol: # Ersetzen Sie durch den Namen Ihres importierten Volumes. Dienste: nginx: Image: mycontainerimage # Ersetzen Sie durch den Namen Ihres importierten Docker-Image. Ports: – „8080:80“ Volumes: – myvol:/usr/share/nginx/html # Ersetzen Sie „myvol“ durch den Namen Ihres gemounteten Images.Speichern Sie Ihre neue Compose-Datei und führen Sie dann den folgenden Befehl aus, um sie zu starten:
Testen Sie abschließend, ob Ihre Compose-Bereitstellung ordnungsgemäß funktioniert. In meinem Fall teste ich meinen Nginx-Docker-Container, indem ich einen Webbrowser öffne und zu „localhost:8080“ navigiere.
Zu lernen, wie Sie Ihren Docker-Container auf andere Linux-Hosts kopieren und verschieben, ist nur eine der wenigen Aufgaben, die Sie mit Ihrem Computer erledigen können. Entdecken Sie diese wunderbare Welt des Self-Hostings, indem Sie mit Docker einen Minecraft-Server unter Linux installieren.
Max Duzij über Unsplash. Alle Änderungen und Screenshots von Ramces Red.
Index
- Container-Image vom Quellhost speichern
- Exportieren eines Docker-Volumes aus Ihrem Container
- Container-Image auf Zielhost laden
- Importieren eines Docker-Volumes in Ihren Container
- Bild übertragen ohne eine Datei zu erstellen
- Verwenden von Docker Compose zum Verschieben einer gesamten Docker-Bereitstellung
Schreibe einen Kommentar