Les contextes de l'interface de ligne de commande 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 devez parfois 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 câbler des installations Docker Engine régulières, 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éer un contexte
Les contextes sont gérés avec le docker context
commande. 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
Les contextes utilisent Docker Swarm comme orchestrateur de conteneurs par défaut. Vous pouvez le définir explicitement à 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 le --kubernetes
flag et spécifiez 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électionner des contextes
Le contexte actif est commuté à l'aide de docker context use
. 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 passer à un autre contexte, exécutez docker context use
de nouveau. 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 le --context
flag à n'importe quelle commande Docker :
docker run ubuntu:latest --context remote-host
Le DOCKER_CONTEXT
la variable d'environnement fonctionne également comme une alternative au --context
drapeau. L'un ou l'autre mécanisme facilite un basculement temporaire vers un contexte différent sans vous obliger à exécuter et à annuler une docker context use
commande.
Utilisation du DOCKER_HOST
La variable d'environnement remplacera également le contexte actif. Cette variable force 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 default
contexte.
Synchronisation des contextes entre 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
sur Linux. Vous trouverez vos contextes dans les contexts
sous-répertoire. Chaque contexte obtient son propre dossier nommé avec un hachage unique. À l'intérieur, vous trouverez un meta.json
fichier qui décrit le contexte. Seuls les contextes créés ont des fichiers stockés sur disque. Le default
context hérite des paramètres de la configuration de votre démon Docker.
Si vous souhaitez synchroniser la configuration du contexte, vous pouvez sauvegarder les contexts
dossier 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 symboliquement le dossier à un partage réseau peut également être une option selon 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 my-context.dockercontext
fichier dans votre répertoire de travail. Le fichier inclut le meta.json
contenu 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.
Vous pouvez également exporter un fichier de configuration Kubernetes autonome pour les contextes Kubernetes :
docker context export kubernetes-context --kubeconfig
Cela produira un fichier "kubeconfig" standard 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 avez besoin de modifier un contexte, utilisez la docker context update
commande. Cela accepte les mêmes drapeaux que docker context create
. Si vous effectuez des mises à jour groupées, vous pouvez modifier le meta.json
fichiers pour manipuler directement vos contextes. Vous pouvez inspecter le meta.json
d'un contexte fichier de la CLI avec docker context inspect my-context
.
Conclusion
Les contextes Docker sont utiles lorsque vous devez déployer des conteneurs dans plusieurs environnements indépendants. Vous pouvez configurer des contextes pour votre socket Docker local, un serveur de préparation d'équipe partagé et votre serveur Kubernetes de production.
Docker a une prise en charge intégrée des clouds de conteneurs Microsoft Azure et Amazon ECS, qui peuvent également être ajoutés en tant que contextes. Il n'y a pas de limite au 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 dans le mauvais contexte. Si vous avez oublié que vous êtes dans votre production
contexte, en exécutant docker rm database-container
pourrait avoir des conséquences dévastatrices. En cas de doute, exécutez docker context ls
vérifiez d'abord ce que vous avez sélectionné.