So kopieren Sie Docker Images von einem Host zu einem anderen ohne Repository

Wie übertrage ich ein Docker-Image von einem Computer auf einen anderen, ohne ein Repository zu verwenden, egal, ob privat oder öffentlich?

Ich bin es gewohnt, ein eigenes Bild in VirtualBox zu spielen und zu erstellen, und wenn es fertig ist, versuche ich, es auf anderen Rechnern einzusetzen, um eine echte Nutzung zu haben.

Da es auf einem eigenen Bild basiert (wie Red Hat Linux), kann es nicht aus einer Docker-Datei neu erstellt werden.

Gibt es einfache Befehle, die ich verwenden kann? Oder eine andere Lösung?

Aktualisiert Es scheint, dass save / export einen ähnlichen Zweck erreichen kann, siehe Was ist der Unterschied zwischen Speichern und Exportieren in Docker? , und ich bevorzuge den save für meinen Fall.

   

Sie müssen das Docker-Image als TAR-Datei speichern:

 docker save -o   

Kopieren Sie dann Ihr Image mit regulären Dateiübertragungswerkzeugen wie cp oder scp auf ein neues System. Danach müssen Sie das Bild in Docker laden:

 docker load -i  

PS: Sie müssen möglicherweise alle Befehle sudo .

Übertragen eines Docker-Images per SSH, um den Inhalt im laufenden Betrieb zu übertragen:

 docker save  | bzip2 | \ ssh user@host 'bunzip2 | docker load' 

Es ist auch eine gute Idee, pv in die Mitte der Pipe zu legen, um zu sehen, wie die Übertragung abläuft:

 docker save  | bzip2 | pv | \ ssh user@host 'bunzip2 | docker load' 

Informationen zum Speichern eines Bilds in einem beliebigen Dateipfad oder einem freigegebenen NFS-Speicherort finden Sie im folgenden Beispiel.

Holen Sie sich die Image-ID, indem Sie Folgendes tun:

 sudo docker images 

Angenommen, Sie haben ein Bild mit der ID “matrix-data”.

Speichere das Bild mit der ID:

 sudo docker save -o /home/matrix/matrix-data.tar matrix-data 

Kopieren Sie das Bild aus dem Pfad auf einen beliebigen Host. Importieren Sie jetzt in Ihre lokale Docker-Installation mit:

 sudo docker load -i  

Speichern Sie zuerst das Docker-Image in einer Zip-Datei:

 docker save  | gzip > .tar.gz 

Laden Sie dann das exportierte Bild mit dem folgenden Befehl in Docker:

 zcat .tar.gz | docker load 

Lauf

 docker images 

um eine Liste der Bilder auf dem Host zu sehen. Nehmen wir an, Sie haben ein Bild namens Awesomesauce . cd Sie in Ihrem Terminal in das Verzeichnis, in das Sie das Bild exportieren möchten. Jetzt ausführen:

 docker save awesomesauce:latest > awesomesauce.tar 

Kopieren Sie die TAR-Datei auf ein USB-Stick oder was auch immer, und kopieren Sie sie dann auf den neuen Host-Computer.

Jetzt vom neuen Host aus:

 docker load < awesomesauce.tar 

Jetzt geh und trink einen Kaffee und lies Hacker News ...

Verwenden Sie für einen vereinfachten Export des Dateisystems eines Containers;

docker export CONTAINER_ID > my_container.tar

Verwende cat my_container.tar | docker import - cat my_container.tar | docker import - um das Bild zu importieren.

Wenn Sie docker-machine verwenden, können Sie docker $(docker-machine config ) save | docker $(docker-machine config ) load docker $(docker-machine config ) save | docker $(docker-machine config ) load um Bilder zwischen den Maschinen mach1 und mach2 zu kopieren.

Und natürlich können Sie auch pv in der Mitte halten, um einen Fortschrittsindikator zu bekommen:

docker $(docker-machine config ) save | pv | docker $(docker-machine config ) load docker $(docker-machine config ) save | pv | docker $(docker-machine config ) load .

Sie können auch eine der docker-machine config weglassen, um Ihren aktuellen Standard-Docker-Host zu verwenden.

docker save | docker $(docker-machine config ) load docker save | docker $(docker-machine config ) load um das Bild vom aktuellen docker-host nach mach zu kopieren

oder

docker $(docker-machine config ) save | docker load docker $(docker-machine config ) save | docker load um von mach zum aktuellen docker-host zu kopieren.

Ich nehme an, Sie müssen couchdb-cartridge speichern couchdb-cartridge die eine Image-ID von 7ebc8510bc2c hat:

 stratos@Dev-PC:~$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB 192.168.57.30:5042/couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB ubuntu 14.04 53bf7a53e890 3 days ago 221.3 MB 

Speichern Sie das Archivname-Bild in einer TAR-Datei. Ich werde das /media/sf_docker_vm/ , um das Bild zu speichern.

 stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar 

Kopieren Sie die Datei archiveName.tar in Ihre neue Docker-Instanz mit der in Ihrer Umgebung möglichen Methode, z. B. FTP , SCP usw.

Führen Sie den Befehl docker load für Ihre neue Docker-Instanz aus und geben Sie den Speicherort der Image-TAR-Datei an.

 stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar 

Führen Sie anschließend den Befehl docker images um zu überprüfen, ob das Image jetzt verfügbar ist.

 stratos@Dev-PC:~$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB 192.168.57.30:5042/couchdb-cartridge latest bc8510bc2c 17 hours ago 1.102 GB ubuntu 14.04 4d2eab1c0b9a 3 days ago 221.3 MB 

Bitte finden Sie diesen detaillierten Beitrag .

Alle anderen Antworten sind sehr hilfreich. Ich habe gerade das gleiche Problem durch und finde einen einfachen Weg mit docker machine scp .

Seit Docker Machine v0.3.0 wurde scp eingeführt, um Dateien von einem Docker-Computer auf einen anderen zu kopieren. Dies ist sehr praktisch, wenn Sie eine Datei von Ihrem lokalen Computer auf einen entfernten Docker-Computer wie AWS EC2 oder Digital Ocean kopieren möchten, da Docker Machine sich um SSH-Anmeldeinformationen für Sie kümmert.

  1. Speichern Sie docker save Bilder mit docker save wie:

     docker save -o docker-images.tar app-web 
  2. Kopieren Sie Bilder mit docker-machine scp

     docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu 

Angenommen, Ihr Remote-Docker-Computer ist remote-machine und das Verzeichnis, in dem die TAR-Datei gespeichert werden soll, ist /home/ubuntu .

  1. Laden Sie das Docker-Bild

     docker-machine ssh remote-machine sudo docker load -i docker-images.tar 

So übertragen Sie Bilder von Ihrer lokalen Docker-Installation auf eine Minikube-VM:

 docker save  | (eval $(minikube docker-env) && docker load) 

Sie können sshfs :

 $ sshfs user@ip:/  $ docker save  > /myImage.tar 

So können Sie Docker-Images zwischen zwei Remote-Registern / Repositorys verschieben. Es funktioniert mit Docker Version 1.10.2, Build c3959b1.

 docker pull source-registry.com/myProject/myImageName:1.0.0 docker tag source-registry.com/myProject/myImageName:1.0.0 target-remote-registry.com/myProject/myImageName:1.0.0 docker push target-remote-registry.com/myProject/myImageName:1.0.0 

Dies ist eine praktische Methode, wenn Sie Ihre Bilder in einen AWS ECS / ECR-Dienst migrieren möchten.

Zuallererst sind Docker-Bilder ( Docker-Bilder ) über den Docker-Bilder-Hub zugänglich (oder verwenden Sie die vorherige Methode zum Exportieren). Übrigens, wenn Sie nach einer Möglichkeit suchen, einen Docker-Container zu verschieben oder zu kopieren ( docker ps -a ). Die mögliche Lösung ist der folgende Befehl:

 docker container export [options] CONTAINER ID -o given-name.tar 

Beispielsweise:

docker ps -a

Beispielausgabe

docker container export cf54f5423a66 -o cf54f5423a66.tar

Dadurch können Sie die Änderungen bei Ihrer nächsten Bereitstellung beibehalten. Weitere Informationen finden Sie auf der Docker Dokumentationsseite .

Ich möchte alle Bilder mit Tags verschieben.

 ``` OUT=$(docker images --format '{{.Repository}}:{{.Tag}}') OUTPUT=($OUT) docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar ``` 

Erläuterung:

First OUT erhält alle Tags, aber durch neue Zeilen getrennt. Second OUTPUT alle Tags in einem Array ab. Third $(echo "${OUTPUT[*]}") setzt alle Tags für einen einzelnen docker save so dass alle Bilder in einem einzigen tar sind.

Zusätzlich kann dies mit gzip gezippt werden. Auf Ziel, führen Sie:

 tar xvf images.tar.gz -O | docker load 

-O Option zu tar stellt Inhalt auf stdin, die von docker load .

Ich denke, die beste Variante wäre, sich im Docker Hub anzumelden und das Image dorthin zu schieben.

Der erste Teil Ihres Bildnamens (vor dem Schrägstrich) sollte Ihrem Spitznamen auf Docker Hub entsprechen, der zweite Teil ist Ihr gewünschter Anwendungsname und dann der TAG (Version).

Ergebnis: brilliance643 / nagios: finalv

Ergebnis: Sie können auf Ihr Bild nur durch zugreifen

 $docker run -ti -d brilliance643/nagios:finalv 

Aus irgendeinem Teil des Universums.