Comment les contextes Docker vous permettent de travailler avec plusieurs hôtes

0
136

Les contextes de la CLI Docker fournissent un mécanisme simplifié pour interagir avec plusieurs points de terminaison Docker. Vous pouvez configurer des contextes pour chacun de vos hôtes et basculer entre eux à la volée.

Lorsqu'un contexte est actif, Docker dirigera toutes vos commandes vers cet hôte. Si vous utilisez principalement une installation Docker locale mais que vous avez parfois besoin de démarrer des conteneurs en production, les contextes Docker sont une option qui s'offre à vous.

Tout point de terminaison Docker valide peut être transformé en contexte. Vous pouvez connecter des installations Docker Engine standard, des clusters Docker Swarm et des clusters Kubernetes dans le cloud. Chaque contexte stocké contient toutes les informations de connexion pour l'hôte référencé.

Création d'un contexte

Les contextes sont gérés avec la commande docker context. Vous créez de nouveaux contextes à l'aide de docker context create. Vous devez fournir un nom pour votre contexte ainsi que sa configuration de point de terminaison.

Voici comment créer un contexte qui se connecte à un socket Docker exposé via TCP sur un hôte distant :

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

Les contextes utilisent Docker Swarm comme orchestrateur de conteneur par défaut. Vous pouvez explicitement définir cela à l'aide d'un indicateur :

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

Pour créer une connexion à Kubernetes, modifiez le type d'orchestrateur. Vous devez également ajouter l'indicateur –kubernetes et spécifier le chemin d'accès à un fichier de configuration Kubernetes :

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

Sélection de contextes

Le contexte actif est commuté à l'aide de l'utilisation du contexte docker. Passez le nom du contexte que vous souhaitez activer.

docker context use remote-host

Toutes les commandes CLI suivantes seront exécutées à l'aide du point de terminaison donné par le nouveau contexte. Le contexte actif persistera automatiquement jusqu'à ce que vous le changiez. Pour basculer vers un contexte différent, exécutez à nouveau l'utilisation du contexte docker. Vous pouvez revenir au contexte par défaut avec votre socket Docker local en passant default comme nom de contexte.

Vous pouvez toujours remplacer le contexte sélectionné en ajoutant l'indicateur –context à n'importe quelle commande Docker :

docker run ubuntu:latest –context remote-host

La variable d'environnement DOCKER_CONTEXT fonctionne également comme une alternative à l'indicateur –context. L'un ou l'autre mécanisme facilite un basculement temporaire vers un contexte différent sans vous obliger à exécuter et à annuler une commande d'utilisation du contexte docker.

Publicité

L'utilisation de la variable d'environnement DOCKER_HOST remplacera également le contexte actif. Cette variable oblige Docker à utiliser un point de terminaison de démon particulier au lieu de celui fourni par le contexte.

Vous pouvez inspecter le contexte actif en exécutant docker context ls. Cette commande répertorie tous les contextes disponibles dans votre configuration CLI. Le contexte actif est mis en évidence par un astérisque. Pour supprimer un contexte, exécutez docker context rm, en fournissant le nom du contexte. Il n'est pas possible de supprimer le contexte par défaut.

Synchronisation des contextes entre les machines

Les fichiers de contexte sont stockés dans le répertoire de configuration de votre Docker CLI. Il s'agit généralement de $HOME/.docker sous Linux. Vous trouverez vos contextes dans le sous-répertoire contexts. Chaque contexte obtient son propre dossier nommé avec un hachage unique. À l'intérieur, vous trouverez un fichier meta.json qui décrit le contexte. Seuls les contextes créés ont des fichiers stockés sur disque. Le contexte par défaut hérite des paramètres de la configuration de votre démon Docker.

Si vous souhaitez synchroniser la configuration du contexte, vous pouvez sauvegarder le dossier des contextes pour le déplacer vers une autre machine. Vous pouvez utiliser un transfert Rsync ou un référentiel Git pour simplifier les mises à jour régulières. Lier le dossier à un partage réseau peut également être une option en fonction de vos besoins.

Docker vous permet également d'exporter et d'importer des contextes via la CLI :

docker context export my-context

Cela créera un fichier my-context.dockercontext dans votre répertoire de travail. Le fichier comprend le contenu meta.json ainsi que des informations supplémentaires, telles que le nom du contexte. Transférez ce fichier sur une autre machine et exécutez docker context import my-context.dockercontext pour charger la configuration du contexte.

Publicité

Vous pouvez également exporter un fichier de configuration Kubernetes autonome pour les contextes Kubernetes :

exportation de contexte docker kubernetes-context –kubeconfig

Cela produira un “kubeconfig” fichier compatible avec les outils de l'écosystème Kubernetes tels que kubectl. La possibilité d'acquérir un fichier kubeconfig à partir d'un contexte Docker améliore l'interopérabilité de la chaîne d'outils. Rien dans le fichier ne sera spécifique à la CLI Docker.

Si vous devez modifier un contexte, utilisez la commande docker context update. Cela accepte les mêmes drapeaux que le contexte docker create. Si vous effectuez des mises à jour en masse, vous pouvez modifier les fichiers meta.json pour manipuler directement vos contextes. Vous pouvez inspecter le fichier meta.json d'un contexte à partir de la CLI avec docker context inspect my-context.

Conclusion

Les contextes Docker sont utiles lorsque vous besoin de déployer des conteneurs dans plusieurs environnements indépendants. Vous pouvez configurer des contextes pour votre socket Docker local, un serveur de transfert d'équipe partagé et votre serveur Kubernetes de production.

Docker prend en charge de manière intégrée les clouds de conteneurs Microsoft Azure et Amazon ECS, qui peuvent être ajoutés comme contextes aussi. Il n'y a pas de limite sur le nombre de contextes que vous pouvez créer, vous avez donc une bonne polyvalence lorsque vous vous déplacez entre vos hôtes.

Le plus gros problème fonctionnel avec les contextes est sans doute la possibilité d'exécuter accidentellement une commande contre le mauvais contexte. Si vous avez oublié que vous êtes dans votre contexte de production, l'exécution de docker rm database-container pourrait avoir des conséquences dévastatrices. En cas de doute, exécutez d'abord docker context ls pour vérifier ce que vous avez sélectionné.