Wie übertrage ich ein Docker-Image von einem Computer auf einen anderen, ohne ein Repository zu verwenden, egal ob privat oder öffentlich?
Ich erstelle mein eigenes Image in VirtualBox, und wenn es fertig ist, versuche ich, es auf anderen Computern bereitzustellen, um es wirklich nutzen zu können.
Da es auf meinem eigenen Image basiert (wie Red Hat Linux), kann es nicht aus einer Docker-Datei neu erstellt werden. Meine Docker-Datei ist nicht einfach zu portieren.
Gibt es einfache Befehle, die ich verwenden kann? Oder eine andere Lösung?
repo:tag
als Bildreferenz zu verwenden, alsimage id
. Wenn Sie verwendenimage id
, behält das geladene Bild das Tag nicht bei (und Sie müssen einen weiteren Schritt ausführen, um das Bild zu markieren).docker images
und verwenden Sie danndocker tag DESIREDIMAGEID mycompany/myreponame
. Wenn Ihre Bild-ID 591de551d6e4 ist, können Sie die Bild-ID abkürzen:docker tag 59 mycompany/myreponame
Übertragen eines Docker-Bildes über SSH, Bzippen des Inhalts im laufenden Betrieb:
Es ist auch eine gute Idee,
pv
in die Mitte des Rohrs zu setzen, um zu sehen, wie die Übertragung verläuft:(Weitere Informationen zu
pv
: Homepage , Manpage ).quelle
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
Bilder zwischen den Maschinen mach1 und mach2 kopieren .eval $(docker-machine env dev)
eignet sich für die allgemeine Kommunikation mit einem einzelnen Docker-Host, jedoch nicht zum Kopieren zwischen zwei Computern, da zwei verschiedene Docker-Hosts / Docker-Computer beteiligt sind.ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load
. Ohne den Schalter "-t" beschwert sich sudo über sudo: Entschuldigung, Sie müssen eine tty haben, um sudo ausführen zu können . mit einem "-t" ist es die gleiche Nachricht, weil ssh sagt, dass Pseudo-Terminal nicht zugewiesen wird, weil stdin kein Terminal ist. und schließlich erhalte ich mit zwei "-t" den Inhalt der TAR-Datei (dh des Bildes) auf meinem Terminal. Irgendwelche Ideen?Um ein Bild in einem beliebigen Dateipfad oder an einem freigegebenen NFS-Ort zu speichern, sehen Sie sich das folgende Beispiel an.
Holen Sie sich die Bild-ID, indem Sie Folgendes tun:
Angenommen, Sie haben ein Bild mit der ID "Matrixdaten".
Speichern Sie das Bild mit der ID:
Kopieren Sie das Bild vom Pfad auf einen beliebigen Host. Importieren Sie nun in Ihre lokale Docker-Installation mit:
quelle
Speichern Sie zuerst das Docker-Image in einer Zip-Datei:
Laden Sie dann das exportierte Bild mit dem folgenden Befehl in Docker:
quelle
docker load < my-image.tar.gz
ist ausreichend. Das Bild wird automatisch für gzip, bzip2 und xz dekomprimiert.Lauf
um eine Liste der Bilder auf dem Host zu sehen. Angenommen , Sie haben ein Bild namens awesomesauce . In Ihrem Terminal
cd
in das Verzeichnis, in das Sie das Bild exportieren möchten. Führen Sie jetzt aus: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 machen:
Jetzt geh auf einen Kaffee und lies Hacker News ...
quelle
docker save [image] -o file.tar
unddocker load -i file.tar
um dies zu vermeiden!docker save [image] -o file.tar
scheint auch wild schneller zu seinVerwenden Sie für einen reduzierten Export des Dateisystems eines Containers:
docker export CONTAINER_ID > my_container.tar
Verwenden Sie
cat my_container.tar | docker import -
diese Option, um das Bild zu importieren.quelle
cat my_container.tar | docker import - my_container:new
wenn vor Ort nach cmd Hilfe importiertWenn Sie Docker-Maschine verwenden, können Sie Bilder zwischen Maschinen kopieren
mach1
undmach2
mit:Und natürlich können Sie auch
pv
in der Mitte bleiben , um einen Fortschrittsindikator zu erhalten:Sie können auch eine der
docker-machine config
Sub-Shells weglassen , um Ihren aktuellen Standard-Docker-Host zu verwenden.um das Bild vom aktuellen Docker-Host zu kopieren
mach
oder
zum Kopieren von
mach
auf den aktuellen Docker-Host.quelle
Ich
couchdb-cartridge
gehe davon aus, dass Sie speichern müssen, die eine Bild-ID von 7ebc8510bc2c hat:Speichern Sie das Bild archiveName in einer TAR-Datei. Ich werde das verwenden
/media/sf_docker_vm/
, um das Bild zu speichern.Kopieren Sie die Datei auf Ihre archiveName.tar neue Docker Instanz Egal welche Methode funktioniert in Ihrer Umgebung unter Verwendung von , zum Beispiel
FTP
,SCP
usw.Führen Sie den
docker load
Befehl auf Ihrer neuen Docker-Instanz aus und geben Sie den Speicherort der Image-Tar-Datei an.Führen Sie abschließend den
docker images
Befehl aus, um zu überprüfen, ob das Bild jetzt verfügbar ist.Bitte finden Sie diesen ausführlichen Beitrag .
quelle
So übertragen Sie Bilder von Ihrer lokalen Docker-Installation auf eine Minikube-VM:
quelle
docker-push-ssh
ist ein Befehlszeilenprogramm, das ich nur für dieses Szenario erstellt habe.Es richtet eine temporäre private Docker-Registrierung auf dem Server ein, richtet einen SSH-Tunnel von Ihrem lokalen Host aus ein, pusht Ihr Image und bereinigt dann nach sich selbst.
Der Vorteil dieses Ansatzes gegenüber
docker save
(zum Zeitpunkt des Schreibens verwenden die meisten Antworten diese Methode) besteht darin, dass nur die neuen Ebenen auf den Server übertragen werden, was zu einem VIEL schnelleren Upload führt.Die Verwendung einer Zwischenregistrierung wie Dockerhub ist häufig unerwünscht und umständlich.
https://github.com/brthor/docker-push-ssh
Installieren:
Beispiel:
docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image
Die größte Einschränkung besteht darin, dass Sie Ihren lokalen Host manuell zur Docker-
insecure_registries
Konfiguration hinzufügen müssen . Führen Sie das Tool einmal aus und Sie erhalten einen informativen Fehler:Wo soll ich unter Mac OS das Flag '--insecure-registry' setzen?
quelle
Alle anderen Antworten sind sehr hilfreich. Ich habe gerade das gleiche Problem durchlaufen und einen einfachen Weg gefunden
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 Remote-Docker-Computer wie AWS EC2 oder Digital Ocean kopieren möchten, da Docker Machine die SSH-Anmeldeinformationen für Sie verwaltet.
Speichern Sie Ihre Bilder mit
docker save
:Kopieren Sie Bilder mit Docker-Machine SCP
Angenommen, Ihr Remote-Docker-Computer befindet sich in
remote-machine
dem Verzeichnis, in dem sich die TAR-Datei befinden soll/home/ubuntu
.Laden Sie das Docker-Image
quelle
Ich möchte alle Bilder mit Tags verschieben.
Erläuterung:
Zuerst werden
OUT
alle Tags abgerufen, aber durch neue Zeilen getrennt. ZweitensOUTPUT
erhält alle Tags in einem Array. Drittens werden$(echo "${OUTPUT[*]}")
alle Tags für einen einzelnendocker save
Befehl eingefügt, sodass sich alle Bilder in einem einzigen Teer befinden.Zusätzlich kann dies mit gzip komprimiert werden. Führen Sie am Ziel Folgendes aus:
-O
Option, umtar
Inhalte auf stdin zu setzen, die von abgerufen werden könnendocker load
.quelle
Sie können verwenden
sshfs
:quelle
Skript zum Ausführen der Docker-Funktion zum Speichern und Laden (bewährt):
Docker Speichern:
Docker laden:
quelle
Sie können einen Einzeiler mit
DOCKER_HOST
Variablen verwenden:quelle