TL; DR Grundsätzlich suche ich das:
%Vor%Ich verstehe die Logik hinter der ganzen Docker Hub / Registry Sache nicht. Ich weiß, dass ich eine private Registrierung ausführen kann, aber dafür muss ich die Infrastruktur für die Ausführung eines Servers einrichten.
Ich habe einen kleinen Einblick in die Funktionsweise von Docker (zumindest das Dateisystem) genommen, und es sieht so aus, als wären Docker-Bildebenen mehr oder weniger Tarballs mit einigen ausgefeilten Dateibenennungen. Ich denke naiv, dass es nicht unmöglich wäre, ein einfaches Python-Skript zu erstellen, um verteiltes Push / Pull zu machen, aber natürlich habe ich es nicht versucht, deshalb stelle ich diese Frage.
Gibt es irgendwelche technischen Gründe, warum Docker nicht einfach verteiltes (serverbasiertes) Push / Pull wie Git oder Mercurial ausführen kann?
Ich denke, das wäre eine enorme Hilfe, da ich die Bilder, die ich auf meinem Laptop erstellt habe, einfach direkt auf die App-Server übertragen kann, anstatt zuerst auf einen Repo-Server zu drücken und dann von den App-Servern zu ziehen. Oder habe ich gerade das Konzept missverstanden und das Registry ist ein wirklich essentielles Feature, das ich unbedingt brauche?
BEARBEITEN Einige Kontexte, die hoffentlich erklären, warum ich das möchte, betrachten das folgende Szenario:
Die derzeit beste Lösung ist, den Docker-Computer zu verwenden, um auf den VPS-Server zu verweisen und ihn neu zu erstellen, aber die Bereitstellung verlangsamt sich, da ich den Container jedes Mal aus der Quelle erstellen muss.
Wenn Sie Andockbilder an einen bestimmten Host senden möchten, gibt es bereits alles in Docker, um dies zu ermöglichen. Das folgende Beispiel zeigt, wie ein Docker-Image durch ssh verschoben wird:
%Vor%-C
ist für ssh, um den Datenstrom Beachten Sie, dass die Kombination eines Befehls docker registry + docker pull
den Vorteil hat, nur fehlende Layer herunterzuladen. Wenn Sie also ein Docker-Image häufig aktualisieren (neue Layer hinzufügen oder einige letzte Layer ändern), erzeugt der Befehl docker pull
weniger Netzwerkverkehr als das Schieben kompletter Docker-Images durch ssh.
Das Speichern / Laden eines Bilds auf einem Docker-Host und das Verschieben in eine Registrierung (privat oder Hub) sind zwei verschiedene Dinge.
Der ehemalige @ Thomasleveil hat bereits angesprochen.
Letzteres hat tatsächlich , dass die "Smarts" nur die erforderlichen Layer drücken.
Sie können dies leicht selbst mit einer privaten Registry und ein paar abgeleiteten Bildern testen.
Wenn wir zwei Bilder haben und das eine vom anderen abgeleitet ist, dann tun wir:
%Vor%verschiebt alle Ebenen, die nicht bereits in der Registrierung gefunden wurden. Wenn Sie dann jedoch das abgeleitete Bild als nächstes drücken,
%Vor%Sie haben vielleicht bemerkt, dass nur eine einzige Ebene verschoben wird - vorausgesetzt, Ihre Dockerfile wurde so erstellt, dass sie nur eine Ebene benötigt (zB Verkettung von RUN-Parametern, wie in Dockerfile Best Practices ).
Auf Ihrem Docker-Host können Sie auch eine dockerisierte private Registrierung ausführen.
Siehe Containerized Docker Registry
Soweit ich weiß, unterstützt der Registry-Push / Pull / -Abfrage-Mechanismus nicht SSH, sondern nur HTTP / HTTPS. Das ist nicht wie Git und Freunde.
Siehe Insecure Registry , um zu erfahren, wie man eine private Registry über HTTP laufen lässt, besonders beachten Sie, dass Sie das ändern müssen Docker Engine-Optionen und starten Sie es neu:
Öffnen Sie die Datei / etc / default / docker oder / etc / sysconfig / docker für Bearbeiten.
Je nach Betriebssystem starten die Engine-Daemon-Optionen.
Bearbeiten (oder hinzufügen) Sie die DOCKER_OPTS Zeile und fügen Sie die --insecure-Registrierung hinzu Flagge.
Dieses Flag übernimmt beispielsweise die URL Ihrer Registrierung.
DOCKER_OPTS="- insecure-registry myregistrydomain.com:5000"
Schließen und speichern Sie die Konfigurationsdatei.
Starten Sie Ihren Docker-Daemon neu
Sie finden auch Anweisungen, selbstsignierte Zertifikate zu verwenden, damit Sie HTTPS verwenden können.
Verwenden von selbstsignierten Zertifikaten
%Vor%Dies ist sicherer als die unsichere Registrierungslösung. Du musst Konfigurieren Sie jeden Andock-Daemon, der auf Ihre Registrierung zugreifen möchte
%Vor%
Tags und Links ssh docker docker-registry