Blog  //  Abril 2017  //  Docker en Windows 10

Docker en Windows 10



Anteriormente hemos hablado largo y tendido de lo que es Docker, las distintas versiones que existen y de las ventajas que nos aporta el uso de contenedores, pero parece que el mundo de los contenedores está muy ligado a entornos Unix, cuando la realidad es totalmente distinta.


En general, como la mayoría de nosotros, realizo la mayor parte de mi trabajo bajo alguna versión del sistema operativo de Microsoft con mi Surface o mi ordenador de escritorio. Desde hace tiempo se puede trabajar con Docker, pero era necesario instalar virtualbox, virtualizar un Linux, etc. no era una solución nativa bajo Windows hasta que llegó Windows Server 2016.

Los de Redmond han apostado por Docker y el uso de contenedores, tanto en el día de hoy como para el futuro. Con Windows Server 2016 llegó el soporte nativo de contenedores bajo  Windows y, lo mejor de todo, que también tenemos compatibilidad con Docker bajo la última versión de su sistema operativo de escritorio (W10 a partir de la anniversary update), de lo que hablaremos más adelante.

WS 2016 vino de la mano de dos tipos de contenedores, los contenedores basados en Windows server y los contenedores de Hyper-v. A continuación veremos las ventajas y diferencias de cada uno de ellos.

Contenedores Windows Server

Esta clase de contenedores proporcionan un rendimiento superior, debido a que son más ligeros. Esto es debido a que tienen una gran dependencia con las librerías de Windows que hay por debajo, y no dependen de una capa intermedia de virtualización (hypervisor).

Los desarrolladores pueden usar por ejemplo Visual Studio para construir aplicaciones modulares que se ejecuten en distintos contenedores con kernel compartidos. Pueden ser desplegados nativamente bajo powershell en Windows Server 2016 o bajo Docker.

Windows Server Containers

Contenedores Hyper-V

Este tipo de contenedor es más lento y pesado, ya que necesita de un hypervisor por debajo, pero ofrece una mayor seguridad, ya que no comparte componentes del núcleo con el host. Estos Dockers usan las mismas APIs que los del tipo de WS. Tanto la capa de virtualización como la de VM están optimizadas para la ejecución de contenedores.

Así que, ¿cuándo debería utilizar cada uno de los tipos? El tipo WS es el mejor para cargas de trabajo de propósito general, mientras que el tipo basado en Hyper-V es más adecuado para entornos de alta seguridad y para desplegarlos en la nube.

Imágenes base

Por otra parte, para crear un contenedor de una aplicación bajo Windows, tenemos que elegir una de las dos imágenes base que existen: microsoft/nanoserver y microsoft/Windowsservercore

¿En qué se diferencian? ¿Cuál elegir? Pues depende del aplicativo que vayas a instalar en el contenedor. Básicamente y como primera regla inicial, elige la imagen base Windows Server Core si tu aplicación necesita:

  • .NET Framework.
  • Un instalador MSI para la app o sus dependencias.
  • Soporte para un runtime de 32-bit.

Si no es el caso, deberías intentar usar primero la versión NanoServer. Es preferible usar esta imagen respecto a la otra por:

  • Más reducida, le da seguridad al tener solo lo que se necesita.
  • Más ligera y fácil de distribuir.
  • Más rápida en ejecutarse y consume menos recursos.

Aunque no todo son ventajas con la versión Nanoserver, al ser tan reducida, existen determinadas APIs de Windows que no están incluidas en esta versión, por lo que lo mejor es probar a ver si funciona bien nuestra aplicación Dockerizada bajo esta imagen. Si tenemos algún problema, lo mejor es partir de la otra imagen base, más completa.

Por norma general, cualquier aplicación basada en Go, Java o Node.js debería funcionar correctamente con la imagen basada en Nanoserver.


Docker for Windows

Todo esto es muy bonito, pero seguro que estás pensando, y para Windows 10, ¿qué tenemos?
Pues existe una herramienta muy útil, llamada Docker for Windows, basada en la CE (Community Edition) de Docker. Dicha herramienta instala todo lo que necesitas para ejecutar contenedores en sistemas Windows. Es una buena manera de empezar en este mundo y familiarizarse con él.

Al estar basado en contenedores de tipo Hyper-v, podemos configurar Docker for Windows tanto para trabajar con contenedores Linux como contenedores Windows, todo ello integrado desde el cmd o powershell de Windows 10.

Este software instala y mantiene actualizados:

  • Docker Engine
  • Docker CLI client
  • Docker Compose
  • Docker Machine

Requisitos

  • La versión actual de Docker for Windows requiere Windows 10 Pro, Enterprise o Education con la anniversary update (build 10586 o superior).
  • Tener habilitada la característica de Windows de Hyper-V. Si no lo tienes aún, puedes hacerlo siguiendo esta pequeña guía.
  • Tener habilitada la virtualización en el PC. Se puede comprobar en el Administrador de tareas:


 

Instalación

Únicamente hay que bajarse el instalador, si no lo tenemos aún podemos descargarlo desde aquí e instalarlo. Esta es la versión estable. Solamente indicar que existe otra versión (edge) que tiene las últimas novedades que aún se encuentran en desarrollo y puede ser más inestable. Es elección de cada uno que versión elegir, los más aventureros que la prueben.

Hay que tener en cuenta que el instalador requiere de permisos de administrador, ya que instala componentes de red y de máquinas virtuales bajo hyper-v.

Una vez terminada la instalación (es rápida, no es el Visual Studio), Docker se iniciará automáticamente.

Podemos cerrar la ventana de bienvenida y acceder a las opciones del D4W desde el icono del área de notificaciones.

Bueno, pues ya lo tenemos preparado para dar nuestros primeros pasos.

Primeros pasos

Lo primero que haremos será abrir una ventana de powershell.
Por defecto, Docker for Windows viene en modo para utilizar contenedores Linux. Aunque no es el foco de este post, si no habéis probado nunca Docker, podéis probar la magia de Docker con un simple comando:

Con esto hemos instalado un servidor web nginx, bajo Linux  y que podemos probar accediendo desde el navegador entrando a http://localhost.

Pero venga, vamos al tema que nos atañe, que aquí he venido a hablar de mi libro. Vamos a cambiar al modo contenedores de Windows, pero antes borramos todo lo que hemos creado:



Si todo va bien, al cabo de un par de minutos como mucho, tendremos ya activada la versión de Windows Containers. Podemos comprobarlo:



Ahora vamos a realizar el mismo ejemplo que hemos hecho antes, pero levantando un IIS en Windows Server 2016 core edition. Usaremos la imagen de Docker de la versión oficial de Microsoft del IIS. Esta imagen y muchas otras se pueden ver en detalle aquí: https://hub.Docker.com/r/microsoft/iis/
Aunque ya se hablará en otro momento de Docker Hub y de la recién estrenada Docker Store.

Volvamos a centrarnos:

Aquí empezamos a tener el primer problemilla. La versión de contenedores de Windows está un poco más verde, y aún, a día de escribir estas líneas, no podemos acceder a la web a través de http://localhost como hemos hecho antes, por un problema conocido con el WinNAT, seguro que se soluciona pronto, pero mientras tanto, tendremos que conectarnos al Docker para obtener la IP virtual. Sí, lo se, podemos sacar la IP con un Docker Inspect, pero así nos obligamos a entrar dentro del contenedor y pegarnos con Powershell un poco.



Como ya tenemos la IP del contenedor, basta con ir a nuestro navegador y comprobar que efectivamente llegamos a nuestro Internet Information Services.

Espero que os haya gustado el post como primer acercamiento a los contenedores en Windows. En próximos posts, nos meteremos más en faena bajo Docker en Windows.

 

Comentarios:
Eduardo
Un trabajo muy currado, tengo que probarlo!
21/04/2017 8:21:37

 Security code