Wie Sie mit Docker-Kontexten mit mehreren Hosts arbeiten können

0
137

Kontexte in der Docker-CLI bieten einen optimierten Mechanismus für die Interaktion mit mehreren Docker-Endpunkten . Sie können für jeden Ihrer Hosts Kontexte einrichten und im Handumdrehen zwischen ihnen wechseln.

Wenn ein Kontext aktiv ist, leitet Docker alle Ihre Befehle an diesen Host. Wenn Sie hauptsächlich eine lokale Docker-Installation verwenden, aber manchmal Container in der Produktion starten müssen, stehen Ihnen Docker-Kontexte zur Verfügung.

Jeder gültige Docker-Endpunkt kann in einen Kontext umgewandelt werden. Sie können reguläre Docker Engine-Installationen, Docker Swarm-Cluster und Kubernetes-Cluster in der Cloud verkabeln. Jeder gespeicherte Kontext enthält alle Verbindungsinformationen für den referenzierten Host.

Kontext erstellen

Kontexte werden mit dem Docker-Kontextbefehl verwaltet. Sie erstellen neue Kontexte mit Docker Context Create. Sie müssen einen Namen für Ihren Kontext sowie seine Endpunktkonfiguration angeben.

So erstellen Sie einen Kontext, der eine Verbindung zu einem Docker-Socket herstellt, der über TCP auf einem Remote-Host verfügbar gemacht wird:

docker context create remote-host –docker host=tcp:///my-remote-host:2735 Werbung

Kontexte verwenden Docker Swarm als Standard-Container-Orchestrator. Sie können dies explizit mit einem Flag setzen:

docker context create remote-host –default-stack-orchestrator=swarm –docker host=tcp:///my-remote-host:2735

Um eine Verbindung zu Kubernetes herzustellen, ändern Sie den Orchestratortyp. Sie müssen auch das Flag –kubernetes hinzufügen und den Pfad zu einer Kubernetes-Konfigurationsdatei angeben:

docker context create kubernetes-host –default-stack-orchestrator=kubernetes –kubernetes config-file=/home/username/.kube/config –docker host=unix:///var/run/docker. sock

Auswählen von Kontexten

Der aktive Kontext wird mit Docker-Kontext-Verwendung umgeschaltet. Übergeben Sie den Namen des Kontexts, den Sie aktivieren möchten.

docker context use remote-host

Alle nachfolgenden CLI-Befehle werden unter Verwendung des vom neuen Kontext angegebenen Endpunkts ausgeführt. Der aktive Kontext bleibt automatisch erhalten, bis Sie ihn ändern. Um zu einem anderen Kontext zu wechseln, führen Sie docker context use erneut aus. Sie können mit Ihrem lokalen Docker-Socket zum Standardkontext zurückkehren, indem Sie default als Kontextnamen übergeben.

Sie können den ausgewählten Kontext jederzeit überschreiben, indem Sie jedem Docker-Befehl das Flag –context hinzufügen:

docker run ubuntu:latest –context remote-host

Die Umgebungsvariable DOCKER_CONTEXT fungiert auch als Alternative zum Flag –context. Beide Mechanismen ermöglichen einen vorübergehenden Wechsel zu einem anderen Kontext, ohne dass Sie einen Befehl zur Verwendung des Docker-Kontexts ausführen und zurücksetzen müssen.

Werbung

Die Verwendung der Umgebungsvariablen DOCKER_HOST überschreibt auch den aktiven Kontext. Diese Variable zwingt Docker, einen bestimmten Daemon-Endpunkt anstelle des vom Kontext bereitgestellten Endpunkts zu verwenden.

Sie können den aktiven Kontext überprüfen, indem Sie docker context ls ausführen. Dieser Befehl listet alle in Ihrer CLI-Konfiguration verfügbaren Kontexte auf. Der aktive Kontext wird mit einem Sternchen hervorgehoben. Um einen Kontext zu löschen, führen Sie docker context rm aus und geben Sie den Kontextnamen an. Es ist nicht möglich, den Standardkontext zu löschen.

Synchronisieren von Kontexten zwischen Computern

Kontextdateien werden im Konfigurationsverzeichnis Ihrer Docker-CLI gespeichert. Unter Linux ist dies normalerweise $HOME/.docker. Sie finden Ihre Kontexte im Unterverzeichnis contexts. Jeder Kontext erhält seinen eigenen Ordner, der mit einem eindeutigen Hash benannt ist. Darin finden Sie eine meta.json-Datei, die den Kontext beschreibt. Nur erstellte Kontexte haben Dateien auf der Festplatte gespeichert. Der Standardkontext übernimmt die Einstellungen von Ihrer Docker-Daemon-Konfiguration.

Wenn Sie die Kontextkonfiguration synchronisieren möchten, können Sie den Kontextordner sichern, um ihn auf einen anderen Computer zu verschieben. Sie können eine Rsync-Übertragung oder ein Git-Repository verwenden, um regelmäßige Updates zu vereinfachen. Das Verknüpfen des Ordners mit einer Netzwerkfreigabe kann je nach Ihren Anforderungen ebenfalls eine Option sein.

Mit Docker können Sie auch Kontexte über die CLI exportieren und importieren:

docker context export my-context

Dadurch wird eine my-context.dockercontext-Datei in Ihrem Arbeitsverzeichnis erstellt. Die Datei enthält den Inhalt von meta.json sowie einige zusätzliche Informationen, z. B. den Namen des Kontexts. Übertragen Sie diese Datei auf einen anderen Computer und führen Sie docker context import my-context.dockercontext aus, um die Kontextkonfiguration zu laden.

Werbung

Alternativ können Sie eine eigenständige Kubernetes-Konfigurationsdatei für Kubernetes-Kontexte exportieren:

Docker-Kontextexport kubernetes-context –kubeconfig

Dadurch wird eine reguläre “kubeconfig” Datei kompatibel mit Kubernetes-Ökosystem-Tools wie kubectl. Die Möglichkeit, eine kubeconfig-Datei aus einem Docker-Kontext abzurufen, verbessert die Interoperabilität der Toolchain. Nichts in der Datei ist spezifisch für die Docker-CLI.

Wenn Sie einen Kontext bearbeiten müssen, verwenden Sie den Befehl docker context update. Dies akzeptiert dieselben Flags wie Docker Context create. Wenn Sie Massenaktualisierungen vornehmen, können Sie die meta.json-Dateien bearbeiten, um Ihre Kontexte direkt zu bearbeiten. Sie können die meta.json-Datei eines Kontexts über die CLI mit docker context inspect my-context überprüfen.

Schlussfolgerung

Docker-Kontexte sind nützlich, wenn Sie Container in mehreren unabhängigen Umgebungen bereitstellen müssen. Sie können Kontexte für Ihren lokalen Docker-Socket, einen freigegebenen Team-Staging-Server und Ihren Kubernetes-Produktionsserver einrichten.

Docker bietet integrierte Unterstützung für die Container-Clouds von Microsoft Azure und Amazon ECS, die hinzugefügt werden können auch als Kontext. Die Anzahl der Kontexte, die Sie erstellen können, ist unbegrenzt, sodass Sie beim Wechsel zwischen Ihren Hosts vielseitig einsetzbar sind.

Das wohl größte funktionale Problem bei Kontexten ist die Möglichkeit, versehentlich einen Befehl auszuführen gegen den falschen Kontext. Wenn Sie vergessen haben, dass Sie sich in Ihrem Produktionskontext befinden, kann die Ausführung von docker rm database-container verheerende Folgen haben. Führen Sie im Zweifelsfall zuerst docker context ls aus, um zu überprüfen, was Sie ausgewählt haben.