Wie zum ausführen von docker-Komponieren auf remote-host?
Ich habe die compose-Datei lokal. Wie bundle von Containern auf dem remote-host wie docker-compose up -d
mit DOCKER_HOST=<some ip>
?
- Ihre Frage ist unklar für mich. Haben Sie tatsächlich bereitstellen möchten einen container auf einem remote-host über
docker-compose
? - ja, wie eine docs.docker.com/compose/production, Aber ich will es tun, ohne docker-Maschine
- Überprüfen Sie heraus diesen Artikel: developer.rackspace.com/blog/...
- Ich verstehe nicht die Frage.
DOCKER_HOST=... docker-compose up -d
sollte funktionieren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht brauchen, zu laufen docker-container auf Ihrem lokalen Rechner, aber immer noch auf den gleichen remote-Computer, ändern Sie diese in Ihrem docker-Einstellung.
Auf der lokalen Maschine:
Sie können Steuern Sie remote-Hosts mit dem -H-parameter
Verwenden Sie es mit docker-verfassen, sollten Sie diesen parameter in /etc/default/docker
Auf der remote-Maschine
Sollten Sie hören von externen adress-und nicht nur unix-socket.
Sehen Binden Sie das Andockfenster auf einen anderen host/port oder einen Unix-socket für mehr details.
Wenn Sie ausführen müssen, um den container auf mehreren remote-hoste, sollten Sie konfigurieren Docker Swarm
sudo
Rechte auf der Maschine, Sie sollten dies nur tun, in einer vertrauenswürdigen Umgebung. Es gibt Ansätze zu sichern oder zu begrenzen, den Zugriff auf Vertrauenswürdige Kunden nur, welches hier erklärt wird oder in mehreren blog-posts zum Thema. Es ist eher ein Thema für fortgeschrittene allerdings. docs.docker.com/engine/security/https/...Nach der Veröffentlichung von Andockfenster 18.09.0 und die (so wie jetzt) anstehende
docker-compose v1.23.1
dieses release wird eine Menge einfacher. Diese genannten Andockfenster Version fügte Unterstützung für diessh
Protokoll derDOCKER_HOST
- Umgebungsvariable und die-H
argumentdocker ...
Befehle beziehungsweise. Die nächstedocker-compose
release enthalten wird diese Funktion auch.Erste von allen, müssen Sie SSH-Zugriff auf den Zielrechner (die Sie wahrscheinlich benötigen, mit jedem Ansatz).
Dann entweder:
Oder wenn Sie es bevorzugen, all in one gehen Sie für einen Befehl nur:
Eine große Sache über dieses ist, dass alle lokalen Umgebungsvariablen, die Sie verwenden können, in Ihrem
docker-compose.yml
- Datei für die Konfiguration verfügbar sind zimmerreserviereung, ohne das Sie übertragen diese überremote-host
in gewisser Weise.docker-compose
auf dem remote-server.docker-compose
ist nur ein wrapper für die Ausführung von verschiedenen regelmäßigendocker
Befehle in Ihrem Auftrag. Beim laufendocker-compose -H "ssh://my-user@remote-host" up
würde dies übersetzen auf die Steuerung der Maschine in etwas entlang der Linien vondocker -H "ssh://my-user@remote-host" run --name foo some-image ...
, so dass keinedocker-compose
Befehle werden auf der remote-Maschine.Vom Komponieren Dokumentation
Verfassen CLI-Umgebungsvariablen
so, dass wir tun können,
Gegeben, dass Sie in der Lage sind, sich auf der remote-Maschine, ein weiterer Ansatz für die laufende
docker-compose
Befehle auf, die Maschine zu verwendenSSH
.Kopieren Sie Ihre
docker-compose.yml
- Datei auf den remote-host überscp
führendocker-compose
Befehle überSSH
schließlich Entferne die Datei wieder.Diese könnte wie folgt Aussehen:
Man könnte sogar machen es kürzer und weglassen senden und entfernen der
docker-compose.yml
- Datei mit der-f -
optiondocker-compose
was erwarten diedocker-compose.yml
- Datei geleitet werden, die ausstdin
. Nur Rohr die Inhalte an dieSSH
Befehl:Wenn Sie das ersetzen von Umgebungsvariablen in Ihrem
docker-compose.yml
- Datei, die oben genannten Befehl wird nicht ersetzen Sie Sie mit Ihrem lokalen Werte auf dem remote-host und Befehlen Fehler auftreten, die durch die Variablen werden nicht gesetzt. Um dies zu überwinden, die envsubst utility kann verwendet werden, um ersetzen Sie die Variablen mit Ihrem lokalen Werte in den Speicher, bevor Rohrleitungen, die Inhalte, auf dieSSH
Befehl:docker login my.docker.registry
oder mit Ihrem Benutzer und Passwort auf der Kommandozeile (darauf achten, dass dieser Aufenthalt sicher aber).Noch eine andere Möglichkeit, die ich erst vor kurzem entdeckt, ist die Steuerung ein remote-Andockfenster Unix-Sockets über einen SSH-tunnel (credits https://medium.com/@dperny/forwarding-the-docker-socket-over-ssh-e6567cfab160, wo ich gelernt, über diesen Ansatz).
Voraussetzung
Sind Sie in der Lage, SSH-Verbindung auf den Zielrechner. Ohne Passwort, Schlüssel-basierter Zugang wird bevorzugt für Sicherheit und Komfort, können Sie lernen, wie Sie diese einrichten, z.B. hier: https://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login
Außerdem werden einige Quellen erwähnen die Weiterleitung von Unix-sockets über SSH-Tunnel ist erst ab
OpenSSH
v6.7 (runssh -V
zu überprüfen), habe ich nicht versuchen, diese auf ältere Versionen obwohl.SSH-Tunnel
Nun erzeugen Sie eine neue SSH-tunnel zwischen einem lokalen Standort-und Andockfenster-Unix-socket auf dem remote-Rechner:
ssh -nNT -L $(pwd)/docker.sock:/var/run/docker.sock user@someremote
Alternativ ist es auch möglich, eine Bindung an einen lokalen port, anstatt eine Datei Speicherort. Stellen Sie sicher, dass der port ist offen für verbindungen und nicht bereits verwendet wird.
ssh -nNT -L localhost:2377:/var/run/docker.sock user@someremote
Re-direct Docker-Client
Verlassen das terminal öffnen, und öffnen Sie eine zweite. In es, Ihre Docker-client mit dem neu erstellten tunnel-socket anstelle von Ihrem lokalen Unix-Docker socket.
Wenn Sie an einer Datei Ort:
export DOCKER_HOST=unix://$(pwd)/docker.sock
Wenn Sie an einen lokalen port (z.B. port wie oben verwendet):
export DOCKER_HOST=localhost:2377
Führen Sie jetzt einige Docker-Befehle wie
docker ps
oder starten Sie einen Behälter, ziehen Sie ein Bild etc. Alles geschehen wird auf dem remote-Computer, solange der SSH-tunnel aktiv ist. Um die lokalen Docker-Befehle wieder:Ctrl+C
im ersten terminal.rm -f "$(pwd)"/docker.sock
unset DOCKER_HOST
Die große Sache über dieses ist, dass Sie speichern Sie die Mühe des Kopierens
docker-compose.yml
Dateien und andere Ressourcen um oder setzen von environment-Variablen, die auf eine remote-Maschine (was schwierig ist).Nicht-interaktiven SSH-Tunnel
Wenn Sie dies nutzen wollen, das in einer Skript-Kontext, in dem ein interaktives terminal ist nicht möglich, es gibt einen Weg, um öffnen und schließen der SSH-tunnel im hintergrund mit der SSH ControlMaster und ControlPath Optionen: