Los contextos en la CLI de Docker proporcionan un mecanismo simplificado para interactuar con múltiples puntos finales de Docker. Puede configurar contextos para cada uno de sus hosts y alternar entre ellos sobre la marcha.
Cuando un contexto está activo, Docker dirigirá todos sus comandos a ese host. Si utiliza principalmente una instalación local de Docker, pero a veces necesita iniciar contenedores en producción, los contextos de Docker son una opción disponible para usted.
Cualquier punto final de Docker válido se puede convertir en un contexto. Puede conectar instalaciones regulares de Docker Engine, clústeres de Docker Swarm y clústeres de Kubernetes en la nube. Cada contexto almacenado contiene toda la información de conexión para el host al que se hace referencia.
Creando un Contexto
Los contextos se administran con el docker context
dominio. Crea nuevos contextos usando docker context create
. Debe proporcionar un nombre para su contexto, así como su configuración de punto final.
Aquí se explica cómo crear un contexto que se conecta a un socket Docker expuesto a través de TCP en un host remoto:
docker context create remote-host --docker host=tcp:///my-remote-host:2735
Los contextos usan Docker Swarm como su orquestador de contenedores predeterminado. Puede configurar esto explícitamente usando una bandera:
docker context create remote-host
--default-stack-orchestrator=swarm
--docker host=tcp:///my-remote-host:2735
Para crear una conexión con Kubernetes, cambie el tipo de orquestador. También debe agregar el --kubernetes
marque y especifique la ruta a un archivo de configuración de Kubernetes:
docker context create kubernetes-host
--default-stack-orchestrator=kubernetes
--kubernetes config-file=/home/username/.kube/config
--docker host=unix:///var/run/docker.sock
Selección de contextos
El contexto activo se cambia usando docker context use
. Pase el nombre del contexto que desea activar.
docker context use remote-host
Todos los comandos CLI subsiguientes se ejecutarán utilizando el punto final proporcionado por el nuevo contexto. El contexto activo persistirá automáticamente hasta que lo cambie. Para cambiar a un contexto diferente, ejecute docker context use
otra vez. Puede volver al contexto predeterminado con su socket Docker local pasando default
como el nombre de contexto.
Siempre puede anular el contexto seleccionado agregando --context
marca a cualquier comando de Docker:
docker run ubuntu:latest --context remote-host
El DOCKER_CONTEXT
La variable de entorno también funciona como una alternativa al --context
bandera. Cualquiera de los dos mecanismos facilita un cambio temporal a un contexto diferente sin obligarlo a ejecutar y revertir un docker context use
comando.
Usando el DOCKER_HOST
La variable de entorno también anulará el contexto activo. Esta variable obliga a Docker a usar un punto final de daemon en particular en lugar del proporcionado por el contexto.
Puede inspeccionar el contexto activo ejecutando docker context ls
. Este comando enumera todos los contextos disponibles en su configuración CLI. El contexto activo se resalta con un asterisco. Para eliminar un contexto, ejecute docker context rm
, proporcionando el nombre de contexto. No es posible eliminar el default
contexto.
Sincronización de contextos entre máquinas
Los archivos de contexto se almacenan en el directorio de configuración de la CLI de Docker. Suele ser $HOME/.docker
en Linux. Encontrará sus contextos en contexts
subdirectorio. Cada contexto tiene su propia carpeta nombrada con un hash único. Dentro, encontrarás un meta.json
archivo que describe el contexto. Solo los contextos creados tienen archivos almacenados en el disco. El default
El contexto hereda la configuración de la configuración del demonio Docker.
Si desea sincronizar la configuración de contexto, puede hacer una copia de seguridad de los contexts
carpeta para moverla a otra máquina. Puede usar una transferencia Rsync o un repositorio Git para simplificar las actualizaciones periódicas. La vinculación simbólica de la carpeta a un recurso compartido de red también puede ser una opción según sus requisitos.
Docker también le permite exportar e importar contextos a través de la CLI:
docker context export my-context
Esto creará un my-context.dockercontext
archivo en su directorio de trabajo. El archivo incluye el meta.json
contenidos, así como alguna información adicional, como el nombre del contexto. Transfiera este archivo a otra máquina y ejecute docker context import my-context.dockercontext
para cargar la configuración del contexto.
Como alternativa, puede exportar un archivo de configuración de Kubernetes independiente para contextos de Kubernetes:
docker context export kubernetes-context --kubeconfig
Esto producirá un archivo "kubeconfig" regular compatible con las herramientas del ecosistema de Kubernetes como kubectl
. La capacidad de adquirir un archivo kubeconfig desde un contexto de Docker mejora la interoperabilidad de la cadena de herramientas. Nada dentro del archivo será específico de la CLI de Docker.
Si necesita editar un contexto, use la docker context update
dominio. Esto acepta las mismas banderas que docker context create
. Si está realizando actualizaciones masivas, puede editar el meta.json
archivos para manipular directamente sus contextos. Puede inspeccionar el meta.json
de un contexto archivo de la CLI con docker context inspect my-context
.
Conclusión
Los contextos de Docker son útiles cuando necesita implementar contenedores en múltiples entornos independientes. Puede configurar contextos para su socket Docker local, un servidor de prueba de equipo compartido y su servidor Kubernetes de producción.
Docker tiene soporte integrado para las nubes de contenedores de Microsoft Azure y Amazon ECS, que también se pueden agregar como contextos. No hay límite en la cantidad de contextos que puede crear, por lo que tiene una buena versatilidad a medida que se mueve entre sus anfitriones.
Podría decirse que el mayor problema funcional con los contextos es la posibilidad de ejecutar accidentalmente un comando en el contexto incorrecto. Si has olvidado que estás en tu production
contexto, ejecutando docker rm database-container
podría tener consecuencias devastadoras. En caso de duda, ejecute docker context ls
primero para comprobar lo que ha seleccionado.