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"