Hoe Docker-contexten u met meerdere hosts laten werken

0
156

Contexten in de Docker CLI bieden een gestroomlijnd mechanisme voor interactie met meerdere Docker-eindpunten . Je kunt contexten instellen voor elk van je hosts en er snel tussen schakelen.

Als een context actief is, zal Docker al je commando's naar die host sturen. Als u meestal een lokale Docker-installatie gebruikt, maar soms containers in productie moet starten, zijn Docker-contexten een van de opties die voor u beschikbaar zijn.

Elk geldig Docker-eindpunt kan in een context worden omgezet. U kunt reguliere Docker Engine-installaties, Docker Swarm-clusters en Kubernetes-clusters in de cloud aansluiten. Elke opgeslagen context bevat alle verbindingsinformatie voor de host waarnaar wordt verwezen.

Een context creëren

Contexten worden beheerd met de opdracht docker-context. U maakt nieuwe contexten met behulp van docker context create. U moet een naam voor uw context en de configuratie van het eindpunt opgeven.

Hier ziet u hoe u een context maakt die verbinding maakt met een Docker-socket die via TCP op een externe host wordt weergegeven:

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

Contexten gebruiken Docker Swarm als hun standaard container orchestrator. Je kunt dit expliciet instellen met een vlag:

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

Wijzig het Orchestrator-type om een ​​verbinding met Kubernetes te maken. U moet ook de vlag –kubernetes toevoegen en het pad naar een Kubernetes-configuratiebestand specificeren:

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

Contexten selecteren

De actieve context wordt omgeschakeld met behulp van docker-contextgebruik. Geef de naam door van de context die u wilt activeren.

docker-context gebruik remote-host

Alle volgende CLI-opdrachten worden uitgevoerd met behulp van het eindpunt dat door de nieuwe context wordt gegeven. De actieve context blijft automatisch bestaan ​​totdat u deze wijzigt. Om over te schakelen naar een andere context, voert u docker-contextgebruik opnieuw uit. U kunt terugkeren naar de standaardcontext met uw lokale Docker-socket door default door te geven als de contextnaam.

U kunt de geselecteerde context altijd overschrijven door de –context-vlag toe te voegen aan elk Docker-commando:

docker run ubuntu:latest –context remote-host

De omgevingsvariabele DOCKER_CONTEXT functioneert ook als een alternatief voor de vlag –context. Beide mechanismen maken een tijdelijke omschakeling naar een andere context mogelijk zonder dat u een docker-opdracht voor contextgebruik hoeft uit te voeren en terug te zetten.

Advertentie

Het gebruik van de omgevingsvariabele DOCKER_HOST zal ook de actieve context overschrijven. Deze variabele dwingt Docker om een ​​bepaald daemon-eindpunt te gebruiken in plaats van degene die door de context wordt geboden.

U kunt de actieve context inspecteren door docker-context ls uit te voeren. Met deze opdracht worden alle contexten weergegeven die beschikbaar zijn in uw CLI-configuratie. De actieve context wordt gemarkeerd met een asterisk. Om een ​​context te verwijderen, voert u docker context rm uit, waarbij u de contextnaam opgeeft. Het is niet mogelijk om de standaardcontext te verwijderen.

Contexten synchroniseren tussen machines

Contextbestanden worden opgeslagen in de configuratiemap van uw Docker CLI. Dit is meestal $HOME/.docker op Linux. U vindt uw contexten in de submap contexten. Elke context krijgt zijn eigen map met een unieke hash. Binnenin vind je een meta.json-bestand dat de context beschrijft. Alleen aangemaakte contexten hebben bestanden op schijf. De standaardcontext neemt de instellingen over van uw Docker-daemonconfiguratie.

Als u de contextconfiguratie wilt synchroniseren, kunt u een back-up maken van de contextmap om deze naar een andere computer te verplaatsen. U kunt een Rsync-overdracht of een Git-repository gebruiken om regelmatige updates te vereenvoudigen. Het symboliseren van de map aan een netwerkshare kan ook een optie zijn, afhankelijk van uw vereisten.

Met Docker kunt u ook contexten exporteren en importeren via de CLI:

docker context export my-context

Dit zal een my-context.dockercontext-bestand maken in uw werkmap. Het bestand bevat de inhoud van meta.json en wat extra informatie, zoals de naam van de context. Breng dit bestand over naar een andere computer en voer docker context import my-context.dockercontext uit om de contextconfiguratie te laden.

Advertentie

U kunt ook een zelfstandig Kubernetes-configuratiebestand voor Kubernetes-contexten exporteren:

docker-context export kubernetes-context –kubeconfig

Dit zal een normale “kubeconfig” bestand dat compatibel is met Kubernetes-ecosysteemtools zoals kubectl. De mogelijkheid om een ​​kubeconfig-bestand op te halen uit een Docker-context verbetert de interoperabiliteit van de toolchain. Niets in het bestand is specifiek voor de Docker CLI.

Als u een context moet bewerken, gebruikt u de opdracht docker-contextupdate. Dit accepteert dezelfde vlaggen als docker-context maken. Als u bulkupdates uitvoert, kunt u de meta.json-bestanden bewerken om uw contexten direct te manipuleren. U kunt het meta.json-bestand van een context vanuit de CLI inspecteren met docker-context inspect my-context.

Conclusion

Docker-contexten zijn handig wanneer u containers in meerdere onafhankelijke omgevingen moeten implementeren. U kunt contexten instellen voor uw lokale Docker-socket, een gedeelde teamstaging-server en uw Kubernetes-productieserver.

Docker heeft ingebouwde ondersteuning voor de Microsoft Azure- en Amazon ECS-containerclouds, die kan worden toegevoegd ook als context. Er is geen limiet aan het aantal contexten dat je kunt maken, dus je hebt een goede veelzijdigheid als je tussen je hosts beweegt.

Het grootste functionele probleem met contexten is misschien wel de mogelijkheid om per ongeluk een commando uit te voeren tegen de verkeerde context. Als u bent vergeten dat u zich in uw productiecontext bevindt, kan het uitvoeren van docker rm database-container verwoestende gevolgen hebben. Voer bij twijfel eerst docker-context ls uit om te controleren wat u hebt geselecteerd.