GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo y por qué usar un host Docker remoto

El docker El programa CLI es independiente del demonio Docker que ejecuta sus contenedores. Aunque ambos componentes normalmente se ejecutan en su máquina local, puede ejecutar docker comandos contra un host Docker remoto.

El uso de un host remoto puede ser útil en algunos escenarios. Puede configurar una instalación compartida de Docker Engine para un pequeño equipo de desarrollo. Luego, cada desarrollador podría conectarse a los contenedores remotos con su docker exec local. comando.

Los hosts remotos suelen ser más valiosos cuando se tiene un servidor potente sin utilizar. Si su computadora portátil funciona lentamente o se está quedando sin almacenamiento, el uso de un host Docker dedicado en su red puede aumentar considerablemente el rendimiento. Todavía obtienes toda la comodidad del docker local CLI en su terminal.

Configurando el host remoto

Asegúrese de tener Docker instalado en el sistema que será su host remoto. Solo necesitas el docker-cli paquete en su máquina local, ya que no ejecutará Docker Engine.

Una instalación nueva de Docker proporciona un socket Unix de forma predeterminada. El acceso remoto requiere un socket TCP. Ejecute dockerd (el ejecutable del demonio Docker) con -H marca para definir los sockets a los que desea vincularse.

sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Este comando vinculará a Docker con el socket predeterminado de Unix y el puerto 2375 en la dirección de bucle invertido de su máquina. Puede vincular sockets y direcciones IP adicionales repitiendo -H bandera.

Las banderas deben pasarse cada vez que ejecuta dockerd . Si desea que persistan después de reiniciar, cree un alias de shell o modifique la definición del servicio Docker. Así es como puede lograr esto último con systemd , que la mayoría de las distribuciones de Linux utilizan para la gestión de servicios.

Edite /etc/systemd/system/docker.service.d/options.conf (o créelo si no existe). Encuentra el [Service] sección y cambie el ExecStart línea:

[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Vuelva a cargar su systemd configuración para aplicar los cambios:

sudo systemctl daemon-reload

Si Docker ya se está ejecutando, use sudo systemctl restart docker para reiniciar el servicio. El demonio Docker ahora se vinculará al puerto TCP 2375 cada vez que se inicie. Asegúrese de que la configuración de su cortafuegos permita el tráfico al puerto. Si está utilizando ufw, ejecute ufw allow 2375 para abrir el puerto.

Conexión al host remoto

La CLI de Docker utiliza el DOCKER_HOST variable de entorno para determinar el host al que conectarse. El socket Unix del demonio local se utilizará cuando la variable no esté configurada.

Puede usar un host remoto para un solo docker comando anteponiendo el DOCKER_HOST variables:

DOCKER_HOST=tcp://192.168.0.1:2375 docker run httpd:latest -d

Esto iniciará un nuevo contenedor desde el httpd:latest imagen usando el motor Docker en 192.168.0.1:2375 .

Si va a ejecutar varios comandos en una sesión, exporte el DOCKER_HOST variable en su shell:

export DOCKER_HOST=tcp://192.168.0.1:2375

docker run httpd:latest -d --name httpd
docker ps
docker rm httpd --force

Puedes hacer docker use siempre un host remoto configurando DOCKER_HOST globalmente en el archivo de configuración de su shell. Así es como lo harías en Bash:

echo "export DOCKER_HOST=tcp://192.168.0.1:2375" >> ~/.bashrc

Ahora el DOCKER_HOST la variable de entorno se establecerá cada vez que se inicie su shell.

Mejora de la seguridad

El socket TCP básico está desprotegido. Cualquiera que pueda comunicarse con su máquina a través de la red puede usar el socket Docker para controlar sus contenedores.

Docker admite SSH en lugar de TCP. Esta suele ser una mejor opción si el host tiene un servidor SSH disponible. Evita que los usuarios no autenticados obtengan acceso. El uso de SSH no requiere configuración adicional. DOCKER_HOST le permite pasar una cadena de conexión SSH:

DOCKER_HOST=ssh://user@hostname docker run -d --name httpd

Alternativamente, puede usar enlaces SSH para vincular directamente el socket Docker Unix del host remoto a su máquina local:

ssh -L /var/run/docker.sock:/var/run/docker.sock

Ahora no necesita usar DOCKER_HOST en absoluto. El docker.sock remoto estará vinculado a su contraparte local. Docker lo detectará automáticamente como su socket Unix estándar.

El uso de una de las soluciones basadas en SSH es la forma preferida de acercarse a la seguridad del demonio Docker. Docker también es compatible con TLS si proporciona una autoridad de certificación y claves de servidor y cliente:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=0.0.0.0:2375

Ahora los clientes podrán conectarse en el puerto 2375 si presentan un certificado SSL válido de confianza de la autoridad de certificación ca.pem .

RELACIONADO: ¿Qué es un archivo PEM y cómo se usa?

Creación de contextos

Docker le permite configurar varios "contextos" para conectarse a diferentes hosts. Se pueden usar contextos en lugar de DOCKER_HOST Variable ambiental. Facilitan el cambio entre varios hosts remotos.

docker context create --docker host=tcp://192.168.0.1:2375 --description remote
docker context create --docker host=unix:///var/run/docker.sock --description local

Estos comandos crean dos contextos diferentes:uno para su docker.sock local y uno para una conexión remota.

Puede cambiar entre contextos usando el docker context use comando:

docker context use remote

# Container is started on "remote"
docker run httpd:-latest -d

docker context use local

# Lists containers running on "local"
docker ps

Los contextos son útiles cuando trabaja con varios hosts de Docker. Son menos complicados que restablecer continuamente el DOCKER_HOST variable a medida que se mueve entre hosts.

Desventajas de los hosts remotos

Señalamos anteriormente que un host remoto puede mejorar el rendimiento de la compilación. Esta afirmación solo es cierta si la máquina que ejecuta Docker Engine es más rápida que su hardware local. El mayor inconveniente de un host remoto es la sobrecarga adicional de interactuar a través de la red. También se vuelve dependiente de la red:si pierde la conectividad, no podrá administrar sus contenedores.

Debe tener una conexión de red confiable de alta velocidad si va a utilizar un host remoto como su servidor de compilación principal. La primera docker build stage envía el contenido del contexto de compilación de su imagen (generalmente su directorio de trabajo) a Docker Engine. Esto es rápido cuando Docker se ejecuta localmente, pero puede tardar mucho más en cargarse en una máquina remota.

Exponer una instancia de daemon de Docker a través de la red es un riesgo de seguridad. Debe asegurarse de que el acceso esté restringido a usuarios y dispositivos autorizados. La exposición involuntaria de un socket de daemon de Docker podría dar a los atacantes acceso ilimitado al host. Docker generalmente se ejecuta como root por lo tanto, es fundamental que solo las personas de confianza puedan iniciar contenedores.

Conclusión

La configuración de un host Docker remoto le permite separar las instancias de su contenedor de su máquina de desarrollo local. Un servidor de compilación de Docker dedicado puede ofrecer un rendimiento mejorado y un mayor espacio de almacenamiento de imágenes.

Debe tener cuidado de auditar la seguridad de su implementación. Un socket TCP simple puede ser seguro en una red privada, pero no debe implementarse en ningún entorno sensible. El uso de SSH ayuda a mitigar los riesgos si practica una buena higiene de seguridad de SSH, como la autenticación obligatoria basada en claves.


Docker
  1. Cómo configurar y usar el registro privado de Docker

  2. Cómo instalar y alojar un servidor OpenVPN con Docker

  3. Cómo instalar y usar Docker en Ubuntu 20.04

  4. Cuándo y por qué usar Docker

  5. Cómo instalar y usar Docker Compose en CentOS

Cómo instalar y usar Docker en Ubuntu 22.04

¿Qué es Docker Compose y cómo se usa?

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo copiar archivos entre el host y el contenedor Docker

Cómo instalar y usar Docker en Ubuntu 20.04

Cómo instalar y usar Docker en AlmaLinux 8