2014-06-30 6 views
172

Ich frage mich, wo Docker Bilder genau in meinem lokalen Host-Rechner gespeichert sind. Kann ich mein Docker-Bild ohne die Docker-Hub oder Dockerfile teilen, aber das 'echte' Docker-Image? Und was passiert genau, wenn ich mein Docker-Image auf den Docker-Hub "schiebe"?Wie teile ich mein Docker-Image ohne den Docker-Hub?

+1

Für die Zukunft: einen guten Artikel auf [ Bewegen Docker Bilder um] (https://blog.giantswarm.io/moving-docker-container-images-around/) – Mifeet

Antwort

186

Docker-Images werden als Dateisystemebenen gespeichert. Jeder Befehl in der Dockerfile erstellt eine Ebene. Sie können auch Layer erstellen, indem Sie docker commit über die Befehlszeile eingeben, nachdem Sie einige Änderungen vorgenommen haben (wahrscheinlich über docker run).

Diese Layer werden standardmäßig unter /var/lib/docker gespeichert. Während Sie (theoretisch) Dateien von dort auswählen und in einem anderen Docker-Server installieren könnten, ist es wahrscheinlich eine schlechte Idee, mit der von Docker verwendeten internen Darstellung zu spielen.

Wenn Sie Ihr Image pushen, werden diese Layer an die Registrierung (standardmäßig die Docker-Hub-Registrierung ... sofern Sie Ihr Image nicht mit einem anderen Registrierungspräfix versehen) gesendet und dort gespeichert. Beim Drücken wird die Layer-ID verwendet, um zu überprüfen, ob Sie die Ebene bereits lokal haben oder heruntergeladen werden müssen. Sie können docker history verwenden, um zu sehen, welche Layer (andere Images) verwendet werden (und bis zu welchem ​​Grad der Befehl den Layer erstellt hat).

Wie bei den Optionen ein Bild zu teilen, ohne auf die Docker Hub Registry zu drängen, die besten Optionen sind:

  • docker save ein Bild oder docker export einen Behälter. Dadurch wird eine TAR-Datei auf die Standardausgabe ausgegeben. Sie möchten also etwas wie docker save 'dockerizeit/agent' > dk.agent.lastest.tar machen. Dann können Sie docker load oder docker import in einem anderen Host verwenden.

  • Hosten Sie Ihre eigene private Registrierung. - Veraltet, siehe Kommentare Siehe docker registry image. Wir haben eine s3 backed registry gebaut, die Sie starten und stoppen können, wie es nötig ist (der gesamte Status wird auf dem s3-Bucket Ihrer Wahl gehalten), was einfach zu installieren ist. Dies ist auch eine interessante Art und Weise zu beobachten, was passiert, wenn Pushing zu einer Registrierung

  • Verwenden Sie eine andere Registrierung wie quay.io (Ich habe es nicht persönlich ausprobiert), obwohl was auch immer Sie mit dem Docker Hub haben wird wahrscheinlich gelten auch hier.

+6

Für zukünftige Referenz ist der Link zum Docker Registrierungsbild veraltet. Sie sollten nun [Docker Registry 2.0] (https://docs.docker.com/registry/) und den Code auf [github/docker/distribution] (https://github.com/docker/distribution) verwenden. – RoelAdriaans

+1

I ' Ich bin nicht sicher, es ist klar, dass Registry 2.0 ein gebrauchsbereiter Ersatz für den ursprünglichen ist. Es scheint einige grundlegende Funktionalität wie Suche zu vermissen http://stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2 – JoshRivers

+1

Frage über 'docker save': wenn ich ein Bild schiebe, das von einem anderen ableitet image (sagen wir "Python: 2.7") in einer Registry, muss das übergeordnete Image nicht mehr als einmal hochgeladen werden, es sei denn, es ändert sich. Kann ich Teilbilder speichern, um eine ähnliche Optimierung der Dateigröße zu erreichen? Ich spring durch diese Reifen, weil ich ein Bastler mit mehreren Bildern bin und ich nicht für eine private Registrierung bezahlen will. – Pieter

1

Basierend auf this blog die folgenden Befehle ausgeführt wurden:

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0 

kopieren Sie das Bild an einen Server, und Import ist wie folgt:

docker load --input latestversion-1.0.0.tar 
Verwandte Themen