Kontexte in der Docker-CLI bieten einen optimierten Mechanismus für die Interaktion mit mehreren Docker-Endpunkten. Sie können Kontexte für jeden Ihrer Hosts einrichten und spontan zwischen ihnen wechseln.
Wenn ein Kontext aktiv ist, leitet Docker alle Ihre Befehle an diesen Host weiter. Wenn Sie hauptsächlich eine lokale Docker-Installation verwenden, aber manchmal Container in der Produktion starten müssen, sind Docker-Kontexte eine Option, die Ihnen zur Verfügung steht.
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 vernetzen. Jeder gespeicherte Kontext enthält alle Verbindungsinformationen für den referenzierten Host.
Einen Kontext erstellen
Kontexte werden mit dem docker context
verwaltet Befehl. 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 bereitgestellt wird:
docker context create remote-host --docker host=tcp:///my-remote-host:2735
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 --kubernetes
hinzufügen -Flag und geben Sie den Pfad zu einer Kubernetes-Konfigurationsdatei an:
docker context create kubernetes-host
--default-stack-orchestrator=kubernetes
--kubernetes config-file=/home/username/.kube/config
--docker host=unix:///var/run/docker.sock
Kontexte auswählen
Der aktive Kontext wird mit docker context use
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 durch den neuen Kontext angegebenen Endpunkts ausgeführt. Der aktive Kontext bleibt automatisch bestehen, bis Sie ihn ändern. Um zu einem anderen Kontext zu wechseln, führen Sie docker context use
aus wieder. Sie können mit Ihrem lokalen Docker-Socket zum Standardkontext zurückkehren, indem Sie default
übergeben als Kontextname.
Sie können den ausgewählten Kontext jederzeit überschreiben, indem Sie den --context
hinzufügen Flag für jeden Docker-Befehl:
docker run ubuntu:latest --context remote-host
Der DOCKER_CONTEXT
Die Umgebungsvariable fungiert auch als Alternative zu --context
Flagge. Beide Mechanismen ermöglichen einen vorübergehenden Wechsel zu einem anderen Kontext, ohne dass Sie eine docker context use
ausführen und rückgängig machen müssen Befehl.
Mit dem DOCKER_HOST
Die Umgebungsvariable überschreibt auch den aktiven Kontext. Diese Variable zwingt Docker, einen bestimmten Daemon-Endpunkt anstelle des vom Kontext bereitgestellten 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 , die den Kontextnamen bereitstellt. Es ist nicht möglich, den default
zu löschen Kontext.
Kontexte zwischen Maschinen synchronisieren
Kontextdateien werden im Konfigurationsverzeichnis Ihrer Docker-CLI gespeichert. Dies ist normalerweise $HOME/.docker
auf Linux. Ihre Kontexte finden Sie in den contexts
Unterverzeichnis. Jeder Kontext erhält seinen eigenen Ordner mit einem eindeutigen Hash. Darin finden Sie eine meta.json
Datei, die den Kontext beschreibt. Nur erstellte Kontexte haben Dateien, die auf dem Datenträger gespeichert sind. Der default
Kontext erbt die Einstellungen von Ihrer Docker-Daemon-Konfiguration.
Wenn Sie die Kontextkonfiguration synchronisieren möchten, können Sie die contexts
sichern Ordner, um ihn auf einen anderen Computer zu verschieben. Sie könnten eine Rsync-Übertragung oder ein Git-Repository verwenden, um regelmäßige Updates zu vereinfachen. Abhängig von Ihren Anforderungen kann es auch eine Option sein, den Ordner mit einer Netzwerkfreigabe zu verknüpfen.
Mit Docker können Sie Kontexte auch über die CLI exportieren und importieren:
docker context export my-context
Dadurch wird ein my-context.dockercontext
erstellt Datei in Ihrem Arbeitsverzeichnis. Die Datei enthält die meta.json
Inhalte sowie einige zusätzliche Informationen, wie 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.
Alternativ können Sie eine eigenständige Kubernetes-Konfigurationsdatei für Kubernetes-Kontexte exportieren:
docker context export kubernetes-context --kubeconfig
Dadurch wird eine reguläre „kubeconfig“-Datei erstellt, die mit Kubernetes-Ökosystem-Tools wie kubectl
kompatibel ist . 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 die docker context update
Befehl. Dies akzeptiert die gleichen Flags wie docker context create
. Wenn Sie Massenaktualisierungen vornehmen, können Sie meta.json
bearbeiten Dateien, um Ihre Kontexte direkt zu manipulieren. Sie können die meta.json
eines Kontexts überprüfen Datei von der CLI mit docker context inspect my-context
.
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 gemeinsam genutzten Team-Staging-Server und Ihren Kubernetes-Produktionsserver einrichten.
Docker verfügt über eine integrierte Unterstützung für die Container-Clouds von Microsoft Azure und Amazon ECS, die auch als Kontexte hinzugefügt werden können. Die Anzahl der Kontexte, die Sie erstellen können, ist unbegrenzt, sodass Sie beim Wechseln zwischen Ihren Hosts vielseitig einsetzbar sind.
Das wohl größte funktionale Problem mit Kontexten ist die Möglichkeit, versehentlich einen Befehl im falschen Kontext auszuführen. Falls Sie vergessen haben, dass Sie sich in Ihrer production
befinden Kontext, Ausführen von docker rm database-container
verheerende Folgen haben könnte. Führen Sie im Zweifelsfall docker context ls
aus Überprüfen Sie zuerst, was Sie ausgewählt haben.