Docker Bild über SSH (verteilt)

9

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:

  • Entwicklung, Tests auf meinem Laptop (OSX, Ausführen von Docker-Maschine, mit Docker-komponieren zum Definieren von Diensten und Abhängigkeiten)
  • Bereitstellung in einer Live-Umgebung mittels eines Skripts (selbst geschrieben, bash, einige Abhängigkeiten von der Dev-Maschine, im Grunde nur Docker-Maschine)
  • Stellen Sie es auf einem neuen VPS mit sehr wenigen Abhängigkeiten außer SSH-Zugriff und Docker-Daemon bereit.
  • Keine "permanenten" Dienste laufen irgendwo, d. h. ich möchte insbesondere keine permanent laufende Registrierung hosten (besonders nicht für alle VPS-Instanzen zugänglich, obwohl das wahrscheinlich mit etwas cleverem SSH-Tunneling gelöst werden könnte)

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.

    
Krumelur 22.07.2015, 23:10
quelle

2 Antworten

16

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%
  • docker save erzeugt ein tar-Archiv eines Docker-Images (einschließlich seiner Ebenen)
  • -C ist für ssh, um den Datenstrom
  • zu komprimieren
  • docker load erstellt ein Docker-Image aus einem tar-Archiv

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.

    
Thomasleveil 22.07.2015 23:49
quelle
3

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%
    
Marakai 20.04.2016 06:00
quelle

Tags und Links