⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Contextes Docker

Introduction

Ce guide montre comment vous pouvez utiliser les contextes pour gérer les daemons Docker depuis un seul client.

Chaque contexte contient toutes les informations requises pour gérer les ressources sur le daemon. La commande docker context facilite la configuration de ces contextes et le basculement entre eux.

Par exemple, un seul client Docker pourrait être configuré avec deux contextes :

  • Un contexte par défaut fonctionnant localement
  • Un contexte distant partagé

Une fois ces contextes configurés, vous pouvez utiliser la commande docker context use <nom-contexte> pour basculer entre eux.

Prérequis

Pour suivre les exemples de ce guide, vous aurez besoin :

  • D'un client Docker qui prend en charge la commande context de niveau supérieur

Exécutez docker context pour vérifier que votre client Docker prend en charge les contextes.

L'anatomie d'un contexte

Un contexte est une combinaison de plusieurs propriétés. Celles-ci incluent :

  • Nom et description
  • Configuration du point de terminaison
  • Informations TLS

Pour lister les contextes disponibles, utilisez la commande docker context ls.

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT               ERROR
default *                                             unix:///var/run/docker.sock

Ceci montre un seul contexte appelé "default". Il est configuré pour communiquer avec un daemon via le socket Unix local /var/run/docker.sock.

L'astérisque dans la colonne NAME indique que c'est le contexte actif. Cela signifie que toutes les commandes docker s'exécutent contre ce contexte, à moins d'être remplacées par des variables d'environnement telles que DOCKER_HOST et DOCKER_CONTEXT, ou en ligne de commande avec les flags --context et --host.

Creusez un peu plus profondément avec docker context inspect. L'exemple suivant montre comment inspecter le contexte appelé default.

$ docker context inspect default
[
    {
        "Name": "default",
        "Metadata": {},
        "Endpoints": {
            "docker": {
                "Host": "unix:///var/run/docker.sock",
                "SkipTLSVerify": false
            }
        },
        "TLSMaterial": {},
        "Storage": {
            "MetadataPath": "\u003cIN MEMORY\u003e",
            "TLSPath": "\u003cIN MEMORY\u003e"
        }
    }
]

Créer un nouveau contexte

Vous pouvez créer de nouveaux contextes avec la commande docker context create.

L'exemple suivant crée un nouveau contexte appelé docker-test et spécifie le point de terminaison hôte du contexte vers le socket TCP tcp://docker:2375.

$ docker context create docker-test --docker host=tcp://docker:2375
docker-test
Successfully created context "docker-test"

Le nouveau contexte est stocké dans un fichier meta.json sous ~/.docker/contexts/. Chaque nouveau contexte que vous créez obtient son propre meta.json stocké dans un sous-répertoire dédié de ~/.docker/contexts/.

Vous pouvez visualiser le nouveau contexte avec docker context ls et docker context inspect <nom-contexte>.

$ docker context ls
NAME          DESCRIPTION                             DOCKER ENDPOINT               ERROR
default *                                             unix:///var/run/docker.sock
docker-test                                           tcp://docker:2375

Le contexte actuel est indiqué par un astérisque ("*").

Utiliser un contexte différent

Vous pouvez utiliser docker context use pour basculer entre les contextes.

La commande suivante basculera le CLI docker pour utiliser le contexte docker-test.

$ docker context use docker-test
docker-test
Current context is now "docker-test"

Vérifiez l'opération en listant tous les contextes et en vous assurant que l'astérisque ("*") est contre le contexte docker-test.

$ docker context ls
NAME            DESCRIPTION                           DOCKER ENDPOINT               ERROR
default                                               unix:///var/run/docker.sock
docker-test *                                         tcp://docker:2375

Les commandes docker cibleront maintenant les points de terminaison définis dans le contexte docker-test.

Vous pouvez également définir le contexte actuel en utilisant la variable d'environnement DOCKER_CONTEXT. La variable d'environnement remplace le contexte défini avec docker context use.

Utilisez la commande appropriée ci-dessous pour définir le contexte sur docker-test en utilisant une variable d'environnement.

> $env:DOCKER_CONTEXT='docker-test'
$ export DOCKER_CONTEXT=docker-test

Exécutez docker context ls pour vérifier que le contexte docker-test est maintenant le contexte actif.

Vous pouvez également utiliser le flag global --context pour remplacer le contexte. La commande suivante utilise un contexte appelé production.

$ docker --context production container ls

Exporter et importer des contextes Docker

Vous pouvez utiliser les commandes docker context export et docker context import pour exporter et importer des contextes sur différents hôtes.

La commande docker context export exporte un contexte existant vers un fichier. Le fichier peut être importé sur n'importe quel hôte qui a le client docker installé.

Exporter et importer un contexte

L'exemple suivant exporte un contexte existant appelé docker-test. Il sera écrit dans un fichier appelé docker-test.dockercontext.

$ docker context export docker-test
Written file "docker-test.dockercontext"

Vérifiez le contenu du fichier d'exportation.

$ cat docker-test.dockercontext

Importez ce fichier sur un autre hôte en utilisant docker context import pour créer un contexte avec la même configuration.

$ docker context import docker-test docker-test.dockercontext
docker-test
Successfully imported context "docker-test"

Vous pouvez vérifier que le contexte a été importé avec docker context ls.

Le format de la commande d'importation est docker context import <nom-contexte> <fichier-contexte>.

Mettre à jour un contexte

Vous pouvez utiliser docker context update pour mettre à jour les champs dans un contexte existant.

L'exemple suivant met à jour le champ description dans le contexte existant docker-test.

$ docker context update docker-test --description "Contexte de test"
docker-test
Successfully updated context "docker-test"