Wie man einen Docker-Container auf einen anderen Host kopiert/bewegt

Da Docker-Container kleine Softwarekästen sind, können Sie sie problemlos von Computer zu Computer kopieren und bewegen. Möglicherweise haben Sie an einer Docker-Instanz auf Ihrem lokalen Computer gearbeitet und sich entschieden, sie auf einen leistungsstärkeren Server zu verschieben. Oder Sie möchten einfach Ihren benutzerdefinierten Container auf mehreren Computern bereitstellen, ihn „kopieren und einfügen“. Manchmal 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 die Datenvolumes von einem Linux-Host auf einen anderen übertragen.
Inhaltsverzeichnis
- Container-Image vom Quell-Host speichern
- Einen Docker-Volume aus Ihrem Container exportieren
- Container-Image auf dem Ziel-Host laden
- Ein Docker-Volume in Ihren Container importieren
- Image ohne Erstellen einer Datei übertragen
- Docker Compose verwenden, um eine gesamte Docker-Bereitstellung zu verschieben
Gut zu wissen: Fangen Sie mit Containern an, indem Sie Docker auf Ihrer Linux-Distro installieren.
Container-Image vom Quell-Host speichern
Starten Sie, indem Sie die verfügbaren Docker-Container auf Ihrem System auflisten. In meinem Fall möchte ich meinen Nginx-Docker-Container auf eine neue Maschine exportieren:
docker ps
Finden Sie den Container, den Sie kopieren möchten, und stoppen Sie die Instanz:
docker stop NAME_OF_INSTANCE
Ein Docker-Container besteht aus einem generischen, ursprünglichen Bild. Im Laufe der Zeit fügen Sie Ihre eigenen Änderungen zu diesem Basisbild hinzu. Prozesse, die innerhalb des Containers ausgeführt werden, können auch ihre eigenen Daten speichern oder andere Änderungen vornehmen. Um all dies zu bewahren, speichern Sie den aktuellen Zustand Ihres Containers in einem neuen Image:
docker commit NAME_OF_INSTANCE mycontainerimage
Beachten Sie, dass diese Aktion den Container anhalten wird, während seine Inhalte gespeichert werden, wenn die Instanz derzeit läuft. Wenn dies ein Problem darstellt, können Sie diese Pause vermeiden, indem Sie stattdessen docker commit -p=false NAME_OF_INSTANCE mycontainerimage eingeben. Tun Sie dies jedoch nur, wenn es unbedingt notwendig ist. Die Wahrscheinlichkeit, ein Bild mit inkonsistenten/unvollständigen Daten zu erstellen, steigt in diesem Fall.
Speichern Sie nun Ihr neu erstelltes Docker-Container-Image in einer Archivdatei:
docker save -o mycontainerimage.tar mycontainerimageVerwenden Sie Ihre bevorzugte Methode zur Dateiübertragung und kopieren Sie Ihre .tar-Datei auf den Host, auf dem Sie Ihren Docker-Container verschieben möchten. Zum Beispiel überträgt der folgende Befehl mein Nginx-Docker-Image mit scp:
scp ./mycontainerimage.tar [email protected]:/home/ramces/Einen Docker-Volume aus Ihrem Container exportieren
Einer der Nachteile des Speicherns eines Docker-Images besteht darin, dass es nicht mit den Docker-Zubehörteilen geliefert wird, die Sie neben Ihrem Container eingerichtet haben. Dazu gehören alle Netzwerkbindemounts und die Volumes, die Sie erstellt haben, um Ihre persistente Daten zu speichern.
Um Ihr Datenvolumen ordnungsgemäß zu exportieren, installieren Sie zuerst Git auf Ihrer lokalen Maschine:
sudo apt install gitFühren Sie den folgenden Befehl aus, um das Skript zum Exportieren von Volumes für Docker herunterzuladen:
git clone https://github.com/ricardobranco777/docker-volumes.sh.gitStellen Sie sicher, dass das Export-Skript die richtigen Berechtigungsbits hat, und kopieren Sie es dann in das Verzeichnis „/usr/local/bin“ Ihrer Maschine:
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Überprüfen Sie, ob Ihr Skript korrekt funktioniert, und extrahieren Sie dann alle zugehörigen Volumes für Ihren Container:
docker-volumes.sh -h
docker-volumes.sh NAME_OF_INSTANCE save mycontainerimage-volume.tar
Senden Sie Ihre neu archivierten Docker-Volume-Dateien an Ihre Remote-Maschine:
scp ./mycontainerimage-volume.tar [email protected]:/home/ramces/Container-Image auf dem Ziel-Host laden
Melden Sie sich bei Ihrem Remote-Host an und führen Sie dann den folgenden Befehl aus, um es in den Docker-Daemon Ihrer Remote-Maschine zu laden:
docker load -i ./mycontainerimage.tarVerwenden Sie docker create, um Ihr Docker-Container-Image mit seinen ursprünglichen Ausführungsflags von Ihrer Quellmaschine neu zu initialisieren. Zum Beispiel hatte mein Nginx-Docker-Container ursprünglich Port 80, der auf Port 8080 meiner Hostmaschine gemappt war:
docker create --name my-nginx-container -p8080:80 mycontainerimageFühren Sie Ihren neu importierten Docker-Container aus:
docker start my-nginx-containerBestätigen Sie, dass Ihr importiertes Image ordnungsgemäß funktioniert, indem Sie alle aktiven Container im System auflisten:
docker ps
FYI: Wandeln Sie Ihren Raspberry Pi in eine leistungsfähige tragbare Fotogalerie um, indem Sie Photoprism mit Docker installieren.
Ein Docker-Volume in Ihren Container importieren
Um eine .tar Docker-Volume-Datei zu importieren, laden Sie zuerst Git auf Ihrem neuen Host herunter:
sudo apt install gitWie in Ihrem ursprünglichen System, laden Sie das Helferskript „docker-volume.sh“ herunter, setzen die Berechtigungsbits auf „ausführbar“ und kopieren es dann in das Verzeichnis „/usr/local/bin“ Ihres neuen Systems.

Erstellen Sie einen neuen Docker-Container mit Ihrer exportierten Bilddatei:
docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p8080:80 mycontainerimageFühren Sie das Skript docker-volume.sh mit Ihrer ursprünglichen .tar-Datei aus, um es in den Docker-Daemon Ihres neuen Systems zu laden:
docker-volumes.sh my-nginx-container load mycontainerimage-volume.tarStarten Sie Ihren neuen Docker-Container, indem Sie den folgenden Befehl ausführen:
docker start my-nginx-containerÜberprüfen Sie, ob Ihr Container Ihr Volume korrekt lädt, indem Sie seine internen Konfigurationsdaten ansehen:
docker inspect -f '{{ .Mounts }}' my-nginx-container
Image ohne Erstellen einer Datei übertragen
Manchmal möchten Sie möglicherweise das Erstellen einer Datei mycontainerimage.tar.gz überspringen. Vielleicht haben Sie nicht genug Speicherplatz, da der Container viele Daten enthält. Sie können das Image speichern, übertragen und auf dem Ziel-Host in einem Befehl laden. Nachdem Sie den oben besprochenen Befehl docker commit ausgeführt haben, können Sie dies verwenden:
docker save mycontainerimage | ssh [email protected] docker loadEs sollte auch von Windows aus funktionieren, da es jetzt einen eingebauten SSH-Client hat (PuTTY ist nicht mehr notwendig).
Fahren Sie mit dem Befehl docker create fort, der auf Ihre Situation zutrifft.
Hinweis: 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 schließlich Ihren neu importierten Docker-Container, indem Sie docker start gefolgt vom Namen Ihres Containers ausführen.

Docker Compose verwenden, um eine gesamte Docker-Bereitstellung zu verschieben
Mit seinem Compose-Plugin macht es Docker möglich, komplexe Programme zu bauen, zu konfigurieren und auszuführen, ohne sich um den zugrunde liegenden Software-Stack des Servers kümmern zu müssen. Dies ermöglicht es Ihnen, reproduzierbare Anwendungsbereitstellungen über verschiedene Linux-Systeme hinweg zu erstellen.
Um Ihre bestehende Docker-Installation auf Docker Compose zu migrieren, stellen Sie zunächst sicher, dass sein Plugin derzeit auf Ihrem System installiert ist:
sudo apt install docker-compose-plugin docker-buildx-pluginErstellen Sie einen neuen Ordner in Ihrem Home-Verzeichnis für Ihre Docker-Compose-Installation:
mkdir ~/my-docker-compose && cd ~/my-docker-composeVerwenden Sie Ihren bevorzugten Texteditor, um eine Datei „docker-compose.yml“ für Ihre Anwendung zu erstellen:
nano ./docker-compose.ymlFügen Sie den folgenden Block Code in Ihre Compose-Datei ein und passen Sie ihn an Ihre spezifischen Bedürfnisse an:
version: '3'
volumes:
myvol: # Ersetzen Sie dies durch den Namen Ihres importierten Volumes.
services:
nginx:
image: mycontainerimage # Ersetzen Sie dies durch den Namen Ihres importierten Docker-Images.
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 den folgenden Befehl aus, um sie zu starten:
docker compose up -dTesten Sie schließlich, ob Ihre Compose-Bereitstellung ordnungsgemäß funktioniert. In meinem Fall werde ich meinen Nginx-Docker-Container testen, indem ich einen Webbrowser öffne und zu „localhost:8080“ navigiere.

Zu lernen, wie man seinen Docker-Container auf andere Linux-Hosts kopiert und bewegt, ist nur eine der vielen Aufgaben, die Sie mit Ihrer Maschine erledigen können. Erkunden Sie diese wunderbare Welt des Self-Hostings, indem Sie einen Minecraft-Server auf Linux mit Docker installieren.
Bildnachweis: Max Duzij über Unsplash. Alle Änderungen und Screenshots von Ramces Red.