Artículo
· 31 mar, 2020 Lectura de 6 min

Configurar un entorno para utilizar Docker en máquinas virtuales Ubuntu sobre Hyper-V de Windows 10

Esta vez quiero hablar de algo que no es específico de InterSystems IRIS, pero que creo que es importante si quieres trabajar con Docker y tu máquina de trabajo es un PC o portátil con Windows 10 Pro o Enterprise.

Como probablemente sabes la tecnología de contenedores viene básicamente del mundo Linux y, a día de hoy, es en los hosts que corren Linux donde pueden mostrar su máximo potencial. Los que usamos Windows vemos que tanto Microsoft como Docker han hecho grandes esfuerzos estos últimos años y nos permiten correr contenedores Linux en nuestro sistema Windows de una manera muy sencilla... pero no está soportado para entornos productivos y, aquí viene el gran problema, no es fiable si queremos mantener persistencia de datos fuera del contenedor, en el sistema host,...  debido principalmente a las importantes diferencias entre los sistema de archivos de Windows y Linux. Al final el propio Docker for Windows utiliza una pequeña máquina Linux virtual (MobiLinux) sobre la que realmente se levantan los contenedores.... lo hace de forma transparente para el usuario de windows... y de hecho funciona muy bien hasta que, como digo, quieren hacer que tus bases de datos sobrevivan más allá de la vida del contenedor...

En fin,... que me enrollo,... el caso es que muchas veces, para evitar problemas y simplificar, lo que se precisa es de un sistema Linux completo... y, si nuestra máquina es Windows, la única forma de tenerlo es vía una máquina virtual. Al menos hasta que salga WSL2 en Windows 10 en unos meses, pero eso es otra historia.

En este artículo te voy a contar, paso a paso, como instalar un entorno en el que puedas trabajar con contenedores Docker sobre un Ubuntu en tu servidor Windows. Vamós allá...

1. Activa Hyper-V

Si no lo tienes ya activado, entra en añadir características de Windows y activa Hyper-V. Tendrás que reiniciar.

 

2. Crea una máquina virtual Ubuntu sobre Hyper-V

Creo que no hay forma más fácil de crearse una máquina virtual (MV). Simplemente abre la venta de Administrador de Hyper-V,  ve a la opción Creación Rápida... (a la derecha de la ventana) y crea tu máquina virtual en alguna de las versiones de Ubuntu que te ofrezca (podrías bajarte el iso de otra distribución de Linux y crearte la MV con una distro distinta). En mi caso he elegido la última versión disponible de Ubuntu, la 19.10. En todo caso, lo mismo que hagamos vale para la 18.04. En unos 15 o 20 minutos, según tarde en bajarse la imagen, tendrás tu nueva máquina virtual creada y lista.

Importante: Deja las opciones de conmutador por defecto (Default Switch). Esto te dará acceso a Internet tanto desde el host windows como desde la máquina virtual. 

3. Crea una red local

Uno de los problemas de utilizar máquinas virtuales que yo me he encontrado a menudo tiene que ver con la configuración de red... unas veces funciona, otras no, funciona si estoy con Wi-fi pero no si estoy con cable o al revés,... si tenemos una VPN en el host windows, a lo mejor no nos va el internet en la MV o no tenemos acceso entre la MV y mi host (Windows),... en fin, un poco locura. Genera inseguridad si utilizas tu máquina para hacer desarrollo, pequeñas demos o presentaciones en las que muy probablemente no es tan importate tener acceso a internet como que la comunicación entre tu host y tu(s) MV(s) funcione de forma fiable.

Con una red local ad-hoc, compartida por tu host Windows y tus máquinas virtuales, lo solucionas. Para comunicarse entre ellas, utilizas esa red y listo. Asignas IPs fijas a tu host y a las MVs que vayas creando y ya lo tienes.

Hacerlo es muy fácil con estos pasos que te voy a dar. Simplemente debes ir a "Administrador de Conmutadores Virtuales"  que encontrarás en tu Adminitrador de Hyper-V:

Una vez dentro, ve a la opción Nuevo Conmutador de red virtual  (vendría ser una nueva tarjeta de red):

Nos aseguramos eso sí que sea una Red Interna, le damos el nombre que nos guste y el resto de opciones por defecto:

Si ahora nos vamos al Panel de Control de Windows --> Centro de Redes y Recursos compartidos, veremos que tenemos ahí el conmutador que acabamos de crear:

 

4. Configura la Red Local compartida por el Host y las Máquinas Virtuales

Ahora ya puedes terminar de configurar tu nueva red local... coloca el cursor sobre la conexión asociada a Mi Nuevo Conmutador LOCAL, pincha y ve a propiedades y de ahí al protocolo IPv4 para asignar una IP fija:

 

Importante: La IP que asignes aquí, será la IP de tu host (Windows) en esta subred local.

 

5. Asocia y configura la nueva red local a la máquina virtual

Ahora vuelve a la ventana del Administración de Hyper-V. Si tienes la MV arrancada debes pararla. Una vez parada, entra en su configuración y añádele el nuevo conmutador interno:

(Nota.- En la imagen verás que hay otro conmutador, el Hyper-V Conmutador INTERNO , es para otra subred que tengo creada en mi caso. Pero no es necesario para este ejemplo) 

Cuando le des a Agregar, sólo te quedará seleccionar el conmutador que has creado antes:

Bien, pues hecho esto... le das a Aplicar y Aceptar y listo. Ya puedes iniciar y entrar de nuevo en  tu máquina virtual para terminar de configurar la conexión interna. Para ello, una vez rearrancada la máquina, pincha en el icono de red (arriba a la derecha) y verás que tienes 2 redes: eth0 y eth1. La eth1 aparece apagada... por ahora:

Entra en la configuración de Ethernet (eht1) e indica una IP fija en esa subred local, por ejemplo: 155.100.101.1, la máscara 255.255.255.0

y listo. Ya tienes tu máquina virtual, identificada con la IP 155.100.101.1 en la misma subred que el host.

7. Permite el acceso a Windows 10 desde tu máquina virtual

Lo que probablemente te encuentres es que Windows 10 no te permite conexiones desde otros servidores y, para él, la máquina virtual que acabas de crear es precisamente eso, un servidor externo... así que tendrás que añadir una regla en el Firewall para poder conectarte desde estas máquinas virtuales. ¿Cómo? Muy fácil, busca Firewall de Windows Defender en el Panel de Control de Windows, ve a Configuración Avanzada y crea una nueva Regla de Entrada:

Indica un rango o rangos de puertos... (o también puedes indicar todos los puertos)...

Como acción queremos que se permita la conexión...

Para todos los tipos de red...

Le das un nombre a la regla...

E importante, inmediatamente a continuación, abre las propiedades de la regla que acabas de crear y limita el ámbito de aplicación, para que sólo se aplique en conexiones dentro de tu Subred local...

8. LISTO. Instala Docker y cualquier otra aplicación en tu nueva Máquina Virtual Ubuntu

Una vez que hayas pasado por todo el proceso de instalación y tengas tu nueva MV lista y actualizada, con acceso a internet, etc... puedes instalarte las aplicaciones que quieras, ... como mínimo Docker, que de eso se trata en este caso, también puedes instalarte un cliente VPN corporativo, VS Code , Eclipse+Atelier...

En concreto, para instalar Docker, entra en tu MV y sigue las instrucciones que verás aquí: https://docs.docker.com/install/linux/docker-ce/ubuntu/

Asegúrate de que Docker funciona, bájate alguna imagen de prueba, etc... Una vez que estés seguro de que todo está bien, estás listo.

Y bueno, con esto... ¡ya lo tienes!, ahora podrás tener contenedores ejecutándose a pleno potencial en tu máquina virtual Ubuntu, con la que te podrás conectar desde tu host Windows 10, desde un navegador u otra aplicación y a la inversa, desde la máquina o máquinas Ubuntu, a tu host Windows 10. Todo ello utilizando direcciones IP locales en tu subred, que funcionarán independientemente de si tienes una VPN conectada o no, o de si estás por Wi-Fi o por cable.

Ah... un último  consejo. Si quieres intercambiar ficheros entre Windows 10 y tus máquinas virtuales, una opción muy sencilla y práctica es WinSCP. Es gratuito y funciona muy bien.

Bueno, seguro que hay otras configuraciones... pero esta me ha servido a mí. Espero que te ayude también a tí y te evite dolores de cabeza.

¡Happy Coding! 

Comentarios (3)1
Inicie sesión o regístrese para continuar

¡ Hola Salva ! (  @Jose-Tomas Salvador )  

Sabes que no soy fanático de Docker Desktop for Windows. Pero me motivaste a probarlo.
Mi contribución al concurso Open Exchange WebSocket Client JS with IRIS Native API as Docker Micro Server   
funciona tan bien en Windows como en Linux. Tiene un poco de ajuste de código común .
Una sorpresa positiva.

¡ Gracias por la sugerencia !