Compartir comentarios
Las respuestas se generan en base a la documentación.

Contextos de Docker

Introducción

Esta guía muestra cómo puedes utilizar los contextos para gestionar daemons de Docker desde un único cliente.

Cada contexto contiene toda la información necesaria para gestionar recursos en el daemon. El comando docker context facilita la configuración de estos contextos y el cambio entre ellos.

Como ejemplo, un único cliente de Docker podría configurarse con dos contextos:

  • Un contexto predeterminado (default) que se ejecuta localmente.
  • Un contexto remoto compartido.

Una vez configurados estos contextos, puedes utilizar el comando docker context use <nombre-contexto> para cambiar entre ellos.

Requisitos previos

Para seguir los ejemplos de esta guía, necesitarás:

  • Un cliente de Docker que admita el comando de nivel superior context.

Ejecuta docker context para verificar que tu cliente de Docker admite los contextos.

Anatomía de un contexto

Un contexto es la combinación de varias propiedades. Estas incluyen:

  • Nombre y descripción.
  • Configuración del punto de conexión (endpoint).
  • Información de TLS.

Para enumerar los contextos disponibles, utiliza el comando docker context ls.

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

Esto muestra un único contexto llamado "default". Está configurado para comunicarse con un daemon a través del socket Unix local /var/run/docker.sock.

El asterisco en la columna NAME indica que este es el contexto activo. Esto significa que todos los comandos docker se ejecutan contra este contexto, a menos que se invaliden con variables de entorno como DOCKER_HOST y DOCKER_CONTEXT, o en la línea de comandos con los flags --context y --host.

Indaga un poco más con docker context inspect. El siguiente ejemplo muestra cómo inspeccionar el contexto llamado 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"
        }
    }
]

Crear un nuevo contexto

Puedes crear nuevos contextos con el comando docker context create.

El siguiente ejemplo crea un nuevo contexto llamado docker-test y especifica el punto de conexión del host del contexto en el socket TCP tcp://docker:2375.

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

El nuevo contexto se almacena en un archivo meta.json bajo ~/.docker/contexts/. Cada nuevo contexto que creas obtiene su propio meta.json almacenado en un subdirectorio dedicado de ~/.docker/contexts/.

Puedes ver el nuevo contexto con docker context ls y docker context inspect <nombre-contexto>.

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

El contexto actual se indica con un asterisco ("*").

Utilizar un contexto diferente

Puedes utilizar docker context use para cambiar entre contextos.

El siguiente comando cambiará la CLI de docker para utilizar el contexto docker-test.

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

Verifica la operación enumerando todos los contextos y asegurándote de que el asterisco ("*") esté junto al contexto docker-test.

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

Los comandos docker ahora se dirigirán a los puntos de conexión definidos en el contexto docker-test.

También puedes configurar el contexto actual utilizando la variable de entorno DOCKER_CONTEXT. La variable de entorno invalida el contexto establecido con docker context use.

Utiliza el comando adecuado a continuación para establecer el contexto en docker-test mediante una variable de entorno.

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

Ejecuta docker context ls para verificar que el contexto docker-test es ahora el contexto activo.

También puedes utilizar el flag global --context para invalidar el contexto. El siguiente comando utiliza un contexto llamado production.

$ docker --context production container ls

Exportar e importar contextos de Docker

Puedes utilizar los comandos docker context export y docker context import para exportar e importar contextos en diferentes hosts.

El comando docker context export exporta un contexto existente a un archivo. El archivo se puede importar en cualquier host que tenga instalado el cliente docker.

Exportar e importar un contexto

El siguiente ejemplo exporta un contexto existente llamado docker-test. Se escribirá en un archivo llamado docker-test.dockercontext.

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

Comprueba el contenido del archivo de exportación.

$ cat docker-test.dockercontext

Importa este archivo en otro host utilizando docker context import para crear un contexto con la misma configuración.

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

Puedes verificar que el contexto se importó con docker context ls.

El formato del comando de importación es docker context import <nombre-contexto> <archivo-contexto>.

Actualizar un contexto

Puedes utilizar docker context update para actualizar campos en un contexto existente.

El siguiente ejemplo actualiza el campo de descripción en el contexto existente docker-test.

$ docker context update docker-test --description "Contexto de prueba"
docker-test
Successfully updated context "docker-test"