Ich frage mich, wo genau die Bilder von Docker auf meinem lokalen Host-Computer gespeichert sind. Kann ich mein Docker-Image freigeben, ohne das Docker-Hub
oder ein Dockerfile
"echtes" Docker-Image zu verwenden? Und was passiert genau, wenn ich mein Docker-Image auf Docker-Hub 'schiebe'?
docker
docker-registry
yaquawa
quelle
quelle
Antworten:
Docker-Images werden als Dateisystemebenen gespeichert. Jeder Befehl in der Docker-Datei erstellt eine Ebene. Sie können Ebenen auch über
docker commit
die Befehlszeile erstellen , nachdem Sie einige Änderungen vorgenommen haben (überdocker run
wahrscheinlich).Diese Ebenen werden standardmäßig unter gespeichert
/var/lib/docker
. Während Sie (theoretisch) Dateien von dort auswählen und auf 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 verschieben, werden diese Ebenen an die Registrierung gesendet (standardmäßig die Docker-Hub-Registrierung ... es sei denn, Sie kennzeichnen Ihr Image mit einem anderen Registrierungspräfix) und dort gespeichert. Beim Pushing wird anhand der Layer-ID überprüft, ob der Layer bereits lokal vorhanden ist oder heruntergeladen werden muss. Sie können
docker history
damit einen Blick darauf werfen, welche Ebenen (andere Bilder) verwendet werden (und in gewissem Umfang mit welchem Befehl die Ebene erstellt wurde).Die besten Optionen für die Freigabe eines Images, ohne auf die Docker-Hub-Registrierung zuzugreifen, sind:
docker save
ein Bild oderdocker export
ein Container. Dadurch wird eine TAR-Datei in der Standardausgabe ausgegeben, sodass Sie so etwas tun möchtendocker save 'dockerizeit/agent' > dk.agent.latest.tar
. Dann können Siedocker load
oderdocker import
in einem anderen Host verwenden.Hosten Sie Ihre eigene private Registrierung. - Veraltet, siehe Kommentare.
Siehe Docker-Registrierungsbild . Wir haben eine s3-gestützte Registrierung erstellt, die Sie nach Bedarf starten und stoppen können (der gesamte Status wird im s3-Bucket Ihrer Wahl gespeichert), was für die Einrichtung trivial ist. Dies ist auch eine interessante Methode, um zu beobachten, was passiert, wenn auf eine Registrierung übertragen wirdVerwenden Sie eine andere Registrierung wie quay.io (ich habe es nicht persönlich ausprobiert), obwohl alle Bedenken, die Sie bezüglich des Docker-Hubs haben, wahrscheinlich auch hier zutreffen werden.
quelle
docker save
: Wenn ich ein Bild, das von einem anderen Bild stammt (sagen wirpython:2.7
), in eine Registrierung schiebe , muss das übergeordnete Bild nicht mehr als einmal hochgeladen werden, es sei denn, es ändert sich. Kann ich Teilbilder speichern, um eine ähnliche Optimierung der Dateigröße zu erzielen? Ich springe durch diese Reifen, weil ich ein Hobbyist mit mehreren Bildern bin und nicht für eine private Registrierung bezahlen möchte.docker build
auf dem Host abrufen ?npm install
... Ich kann nicht auf meinem Host bauen, da er sehr wenig Speicher hat und dieser Schritt immer fehlschlägt (siehe: github.com/npm/npm/issues/5021 )Basierend auf diesem Blog könnte man ein Docker-Image ohne Docker-Registrierung freigeben, indem man Folgendes ausführt:
Sobald dieser Befehl ausgeführt wurde, kann das Image auf einen Server kopiert und wie folgt importiert werden:
quelle
Das Senden eines Docker-Images an einen Remote-Server kann in drei einfachen Schritten erfolgen:
Auf lokaler Ebene Verwendung scp zu übertragen TAR zu Fern
Laden Sie auf dem Remote-Server das Image in das Docker:
quelle
Wenn Sie den Docker Hub selbst nicht verwenden möchten, können Sie Ihr eigenes Docker-Repository unter Artifactory by JFrog hosten:
https://www.jfrog.com/confluence/display/RTF/Docker+Repositories
Diese werden dann auf Ihren eigenen Servern ausgeführt.
Andere Hosting-Anbieter sind verfügbar, z. B. CoreOS:
http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/
welches quay.io gekauft hat
quelle