GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Wie und warum man einen Remote-Docker-Host verwendet

Der docker Das CLI-Programm ist unabhängig vom Docker-Daemon, der Ihre Container ausführt. Obwohl beide Komponenten normalerweise auf Ihrem lokalen Computer ausgeführt werden, können Sie docker ausführen Befehle gegen einen entfernten Docker-Host.

Die Verwendung eines Remotehosts kann in einigen Szenarien hilfreich sein. Sie könnten eine gemeinsam genutzte Docker Engine-Installation für ein kleines Entwicklungsteam einrichten. Jeder Entwickler könnte dann mit seinem lokalen docker exec eine Verbindung zu den Remote-Containern herstellen Befehl.

Remote-Hosts sind häufiger wertvoll, wenn Sie einen leistungsstarken Server haben, der ungenutzt bleibt. Wenn Ihr Laptop langsam ist oder keinen Speicherplatz mehr hat, kann die Verwendung eines dedizierten Docker-Hosts in Ihrem Netzwerk die Leistung erheblich steigern. Sie haben immer noch den ganzen Komfort des lokalen docker CLI in Ihrem Terminal.

Einrichten des Remote-Hosts

Stellen Sie sicher, dass Docker auf dem System installiert ist, das Ihr Remote-Host sein wird. Sie benötigen lediglich das docker-cli Paket auf Ihrem lokalen Computer, da Sie Docker Engine nicht ausführen werden.

Eine frische Docker-Installation stellt standardmäßig einen Unix-Socket bereit. Für den Fernzugriff ist ein TCP-Socket erforderlich. Führen Sie dockerd aus (die ausführbare Docker-Daemon-Datei) mit -H Flag, um die Sockets zu definieren, an die Sie binden möchten.

sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Dieser Befehl bindet Docker an den Standard-Unix-Socket und Port 2375 auf der Loopback-Adresse Ihres Computers. Sie können zusätzliche Sockets und IP-Adressen binden, indem Sie -H wiederholen Flagge.

Die Flags müssen jedes Mal übergeben werden, wenn Sie dockerd ausführen . Wenn Sie möchten, dass sie nach Neustarts bestehen bleiben, erstellen Sie entweder einen Shell-Alias ​​oder ändern Sie die Definition des Docker-Dienstes. So können Sie letzteres mit systemd erreichen , die die meisten Linux-Distributionen für die Dienstverwaltung verwenden.

Bearbeiten Sie /etc/systemd/system/docker.service.d/options.conf (oder erstellen Sie es, wenn es nicht existiert). Suchen Sie den [Service] Abschnitt und ändern Sie den ExecStart Zeile:

[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Laden Sie Ihr systemd neu Konfiguration, um die Änderungen zu übernehmen:

sudo systemctl daemon-reload

Wenn Docker bereits ausgeführt wird, verwenden Sie sudo systemctl restart docker um den Dienst neu zu starten. Der Docker-Daemon bindet sich jetzt bei jedem Start an den TCP-Port 2375. Stellen Sie sicher, dass der Datenverkehr zum Port von Ihrer Firewall-Konfiguration zugelassen wird. Wenn Sie ufw verwenden, führen Sie ufw allow 2375 aus um den Port zu öffnen.

Herstellen einer Verbindung zum Remotehost

Die Docker-CLI verwendet den DOCKER_HOST Umgebungsvariable, um den Host zu bestimmen, zu dem eine Verbindung hergestellt werden soll. Der Unix-Socket des lokalen Daemons wird verwendet, wenn die Variable nicht gesetzt ist.

Sie können einen Remote-Host für einen einzelnen docker verwenden Befehl, indem Sie DOCKER_HOST voranstellen Variable:

DOCKER_HOST=tcp://192.168.0.1:2375 docker run httpd:latest -d

Dadurch wird ein neuer Container von httpd:latest gestartet image mit der Docker-Engine unter 192.168.0.1:2375 .

Wenn Sie mehrere Befehle in einer Sitzung ausführen, exportieren Sie DOCKER_HOST Variable in Ihre Shell:

export DOCKER_HOST=tcp://192.168.0.1:2375

docker run httpd:latest -d --name httpd
docker ps
docker rm httpd --force

Sie können docker erstellen Verwenden Sie immer einen Remote-Host, indem Sie DOCKER_HOST festlegen global in der Konfigurationsdatei Ihrer Shell. So würden Sie das in Bash machen:

echo "export DOCKER_HOST=tcp://192.168.0.1:2375" >> ~/.bashrc

Nun der DOCKER_HOST Umgebungsvariable wird jedes Mal gesetzt, wenn Ihre Shell startet.

Verbesserte Sicherheit

Der grundlegende TCP-Socket ist ungeschützt. Jeder, der Ihren Computer über das Netzwerk erreichen kann, kann den Docker-Socket verwenden, um Ihre Container zu steuern.

Docker unterstützt SSH statt TCP. Dies ist normalerweise eine bessere Option, wenn der Host über einen SSH-Server verfügt. Es verhindert, dass nicht authentifizierte Benutzer Zugriff erhalten. Die Verwendung von SSH erfordert keine zusätzliche Konfiguration. DOCKER_HOST lässt Sie eine SSH-Verbindungszeichenfolge übergeben:

DOCKER_HOST=ssh://user@hostname docker run -d --name httpd

Alternativ können Sie SSH-Bindungen verwenden, um den Docker-Unix-Socket des Remote-Hosts direkt an Ihren lokalen Computer zu binden:

ssh -L /var/run/docker.sock:/var/run/docker.sock

Jetzt müssen Sie DOCKER_HOST nicht mehr verwenden überhaupt. Die entfernte docker.sock wird an sein lokales Gegenstück gebunden. Docker erkennt dies automatisch als Standard-Unix-Socket.

Die Verwendung einer der SSH-basierten Lösungen ist der bevorzugte Weg, um die Docker-Daemon-Sicherheit anzugehen. Docker unterstützt auch TLS, wenn Sie eine Zertifizierungsstelle sowie Server- und Clientschlüssel angeben:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=0.0.0.0:2375

Jetzt können sich Clients auf Port 2375 verbinden, wenn sie ein gültiges SSL-Zertifikat präsentieren, dem die Zertifizierungsstelle ca.pem vertraut .

VERBUNDEN: Was ist eine PEM-Datei und wie wird sie verwendet?

Kontexte erstellen

Mit Docker können Sie mehrere „Kontexte“ für die Verbindung zu verschiedenen Hosts einrichten. Kontexte können anstelle von DOCKER_HOST verwendet werden Umgebungsvariable. Sie erleichtern das Wechseln zwischen mehreren Remote-Hosts.

docker context create --docker host=tcp://192.168.0.1:2375 --description remote
docker context create --docker host=unix:///var/run/docker.sock --description local

Diese Befehle erstellen zwei verschiedene Kontexte – einen für Ihre lokale docker.sock und eine für eine Remote-Verbindung.

Sie können mit docker context use zwischen Kontexten wechseln Befehl:

docker context use remote

# Container is started on "remote"
docker run httpd:-latest -d

docker context use local

# Lists containers running on "local"
docker ps

Kontexte sind nützlich, wenn Sie mit mehreren Docker-Hosts arbeiten. Sie sind weniger umständlich als das ständige Zurücksetzen des DOCKER_HOST Variable, wenn Sie sich zwischen Hosts bewegen.

Nachteile von Remote-Hosts

Wir haben bereits angemerkt, dass ein Remote-Host die Build-Leistung verbessern kann. Diese Aussage trifft nur zu, wenn die Maschine, auf der Docker Engine ausgeführt wird, schneller ist als Ihre lokale Hardware. Der größte Nachteil eines Remote-Hosts ist der zusätzliche Aufwand für die Interaktion über das Netzwerk. Sie werden auch vom Netzwerk abhängig – wenn Sie die Verbindung verlieren, können Sie Ihre Container nicht mehr verwalten.

Sie sollten über eine zuverlässige Hochgeschwindigkeits-Netzwerkverbindung verfügen, wenn Sie einen Remote-Host als Haupt-Build-Server verwenden. Der erste docker build stage sendet den Inhalt des Build-Kontexts Ihres Images (normalerweise Ihr Arbeitsverzeichnis) an Docker Engine. Dies ist schnell, wenn Docker lokal ausgeführt wird, aber das Hochladen auf einen Remote-Computer kann viel länger dauern.

Das Offenlegen einer Docker-Daemon-Instanz über das Netzwerk ist ein Sicherheitsrisiko. Sie müssen sicherstellen, dass der Zugriff auf autorisierte Benutzer und Geräte beschränkt ist. Die unbeabsichtigte Offenlegung eines Docker-Daemon-Sockets könnte Angreifern unbegrenzten Zugriff auf den Host verschaffen. Docker wird normalerweise als root ausgeführt Daher ist es wichtig, dass nur vertrauenswürdige Personen Container starten können.

Schlussfolgerung

Durch das Einrichten eines Remote-Docker-Hosts können Sie Ihre Containerinstanzen von Ihrem lokalen Entwicklungscomputer trennen. Ein dedizierter Docker-Build-Server kann eine verbesserte Leistung und mehr Bildspeicherplatz bieten.

Sie sollten darauf achten, die Sicherheit Ihrer Implementierung zu überprüfen. Ein einfacher TCP-Socket kann in einem privaten Netzwerk sicher sein, sollte aber nicht in sensiblen Umgebungen eingesetzt werden. Die Verwendung von SSH trägt dazu bei, die Risiken zu mindern, wenn Sie eine gute SSH-Sicherheitshygiene praktizieren, wie z. B. eine obligatorische schlüsselbasierte Authentifizierung.


Docker
  1. So richten Sie eine private Docker-Registrierung ein und verwenden sie

  2. So installieren und hosten Sie einen OpenVPN-Server mit Docker

  3. So installieren und verwenden Sie Docker in Ubuntu 20.04

  4. Wann und warum Docker verwendet werden sollte

  5. So installieren und verwenden Sie Docker Compose unter CentOS

So installieren und verwenden Sie Docker unter Ubuntu 22.04

Was ist Docker Compose und wie wird es verwendet?

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So kopieren Sie Dateien zwischen Host und Docker-Container

So installieren und verwenden Sie Docker unter Ubuntu 20.04

So installieren und verwenden Sie Docker unter AlmaLinux 8