Tras asistir al Roadshow de Microsoft, me picó la curiosidad el tema de los containers en Windows Server 2016, así que esté fin de semana he estado investigando y montando unos laboratorios para ver como funcionan. Así que sigue leyendo para saber paso a paso como se montan y como se usan.

¿Qué son los containers?

La idea de container no es nueva, lleva en el mundo Unix desde hace mucho tiempo. Básicamente se trata de tener un sistema base o host al que se le instala un Windows Server 2016, y  se le añade la característica containers. De esta manera se pueden ejecutar aplicaciones como por ejemplo servidores web de forma independiente uno de otro pero compartiendo un mismo host. Esto vendría a ser un hosting compartido.

Hay dos tipos de containers:

  • Containers en Windows Server 2016: Se instala la característica directamente en el servidor y allí se montan diferentes instancias de containers compartiendo el kernel del sistema.
  • Hyper-V 2016 Containers: Varias instancias se ejecutan simultáneamente en un mismo host, sin embargo, cada contenedor se ejecuta en un máquina virtual especial. Aislando el kernel de los diversos containers y el host.

Independientemente de que tipo de container usemos, se crean, gestionan y se administran de la misma manera. Tan solo varían algunos parámetros de tiempo de ejecución.

Containers en Windows Server 2016:

En este artículo sólo hablaré de los containers en Windows Server 2016 basados en la Technical Preview 4, es decir, los que se montan sobre el mismo host. Dejo para otro artículo como usar y montar los Hyper-V Containers 2016.

Después de probarlos he llegado a estas conclusiones:

Ventajas:

  • Ahorramos recursos de hardware.
  • Rápido despliegue de aplicaciones.
  • Solo tenemos que administrar la base de un servidor.
  • Los containers pueden tener configuraciones independientes.

Desventajas:

  • Los recursos del host se comparten y esto puede afectar al rendimiento de otro container.
  • En el caso de montar containers para servidores web independientes, tendremos que usar puertos diferentes para cada uno de ellos porque el host trabaja con NAT para repartir IP’s.
  • El entorno actualmente, esta muy limitado. Quizás con la versión final mejore, pero yo por lo menos no he sido capaz de montar un servidor Apache y PHP porque en la linea de comandos no he podido pasarle parametros de las opciones a los ejecutables. Ejemplo para apache: httpd -k install
  • No he sido capaz de encontrar una manera de editar ficheros desde powershell estilo vi o nano. Muy necesario para editar archivos de configuración.

Laboratorio – Containers en Windows Server 2016:

Containers en Windows Server 2016 Lab

El entorno está basado en una máquina host con Windows Server 2016 al que instalaré la característica Containers y configuraré para su correcta ejecución. Crearé un container base desde el cual desplegaré otro igual pero con diferente configuración que llevará instalado el servidor web nginx. Adicionalmente crearé otro con IIS. Los tres containers podrán ser accedidos desde el resto de la red mediante la apropiada configuración del firewall del host. ¡Comencemos!

Advertencia: Toda la configuración se basa en powershell y aunque lo único que se puede hacer en GUI es la instalación de Containers, también la haré en powershell porqué es más rápida.

Reproducción: Si quieres reproducir el laboratorio, aquí te dejo todos los archivos que necesitas. Es un resumen de lo que se explica a continuación.

Instalar característica Containers:

1. En la máquina host, abre un terminal Powershell con permisos de administrador.

2. Instala la característica containers. Cuando termine el servidor reiniciará automáticamente:

Containers en Windows Server 2016 - Instalación característica

Configurar red para Containers:

1. Cuando reinicie el equipo, abre un terminal Powershell o Windows Powershell ISE con permisos de administrador.

2. Lo primero de todo comprueba que tienes la característica Containers instalada:

Containers en Windows Server 2016 - Comprobando feature

3. Crea un nuevo switch para usarlo con los containers:

Containers en Windows Server 2016 - Nuevo switch

4. Crea un nuevo NAT para los containers:

Containers en Windows Server 2016 - Nuevo nat

Instalación de Containers:

1. Instala el proveedor de paquetes que es un módulo que te permitirá descargar, instalar e incluso guardar las imágenes de sistema operativo necesarias para crear el container:

Containers en Windows Server 2016 - Instalando proveedor de paquetes

2. Puedes comprobar las imágenes disponibles para descargar usando el siguiente comando:

Containers en Windows Server 2016 - Imagenes disponibles

3. Como puedes ver hay dos imágenes disponibles, tienes que tener claro que solo puedes usar la imagen que tiene las mismas características que tu host. En este caso es la WindowsServerCore. En el caso de que hubiera más de una versión puedes especificar cual quieres usar con el parámetro version. Si no lo usas, descargará e instalará la última versión disponible. Este comando requiere de Internet y ya te aviso que tardará bastante, así que te puedes ir tranquilamente a tomar un café 😉

4. Cuando termine comprueba el estado de la imagen del container:

Containers en Windows Server 2016 - Comprobando imagen

5. Crea tu primer container con nginx:

Containers en Windows Server 2016 - Creando container nginx

6. Como vas tener que editar algún fichero, la única forma sencilla que he encontrado para hacer esto es compartiendo una carpeta entre el host y el container. Esto hay que hacerlo en cada uno de los containers si queremos habilitarlo, porque aunque luego hagas una copia de este para distribuirlo, esta función no se distribuye. Como requisito tienes que crear una carpeta en tu host que tenga idéntica ruta al parametro SourcePath:

Containers en Windows Server 2016 - Carpeta compartida

7. Inicia el contenedor:

8. Inicia sesión en el contenedor:

Containers en Windows Server 2016 - Inicio de sesion

9. Descarga y descomprime el servidor web nginx 1.9.3:

10. Lista el directorio raíz  para ver que hay un archivo zip y una carpeta con nombre nginx:

Containers en Windows Server 2016 - Listado de C

11. Recuerdas que en el paso 6 has habilitado una carpeta compartida con el servidor host, pues ahora todo lo que pongas en C:\compartido de tu host aparecerá en el directorio C:\Compartido_Container. Aquí yo voy a poner para cada uno de los servidores web un archivo html que tengo preparado sin hoja de estilos para que vea algo diferente a la página de inicio del navegador.

Containers en Windows Server 2016 - html

12. Con el siguiente comando vas a copiar el html al directorio web para cambiar la página de inicio del servidor web del container01:

13. Arranca el servicio web:

14. Mira que IP tiene el container:

Containers en Windows Server 2016 - ipconfig

15. Abre el navegador del host y ves a la dirección http://172.16.0.2. Fuera del host no funcionará aún.

Containers en Windows Server 2016 - Web Interna container01

16. El container ya está creado y configurado. Ahora sal de la sesión y páralo:

Distribuir containers a partir de una imagen:

1. Crea una imagen del container01 a la que llamarás nginx:

Containers en Windows Server 2016 - Creacion imagen

2. Crea un nuevo container a partir de la imagen Nginx:

Containers en Windows Server 2016 - Crear container desde plantilla

3. Para configurarlo como el anterior, tendrías que habilitar la carpeta compartida, arrancar el nuevo container y conéctate:

4. Copia un nuevo archivo html en el directorio del servidor web, inicia el servicio, comprueba la IP y comprueba si el servicio web funciona. Veras la que IP sigue siendo la 172.16.0.2 porqué no está configurada como fija. Si hubieras iniciado antes el container01 y luego el 02, verías que la IP asignada sería la 172.16.0.3.

Containers en Windows Server 2016 - Servicio web Container02

Containers en Windows Server 2016 - Web interna container02

5. Sal del container sin apagarlo:

 

Instalación de un nuevo container con IIS:

1. Crea el container03 a partir de la imagen original:

Containers en Windows Server 2016 - Creando Container03 IIS

2. Crea carpeta compartida, inicíalo, inicia sesión e instala la característica de Internet Information Server IIS:

Containers en Windows Server 2016 - Configurando IIS

3. Copia el archivo html, consulta la dirección IP y abre un navegador para comprobarlo.

Containers en Windows Server 2016 - html en container03

Containers en Windows Server 2016 - Web interna container03

Como puedes comprobar la dirección IP ahora es diferente porque hay dos containers iniciados.

4. Cierra sesión en el container y para el container02 y container03.

Configurar Acceso desde el exterior:

1. Crea 3 reglas de NAT en el firewall para redirigir los puertos a las distintas IP y puertos en el host.

2. Crea 3 reglas en firewall para abrir los puerto 80,81 y 82 en el host:

3. Incia los 3 containers. Adicionalmente en los servidores nginx, hay que iniciar el servicio:

4. Abre un navegador fuera de tu host, es decir, desde un pc tu red y consulta las direcciones http://Host_IP, http://Host_IP:81 y http://Host_IP:82. Yo lo haré con el nombre del equipo host:

Containers en Windows Server 2016 - Web externa container01

Containers en Windows Server 2016 - Web externa container02

Containers en Windows Server 2016 - Web externa container03

Ya tienes 3 servidores web montados en 3 containers diferentes dentro de un mismo host en Windows Server 2016 y accesibles desde el exterior.

Cómo borrar containers:

Para borrar containers, estos tienen que estar apagados y tan solo tienes que ejecutar la orden:

Para borrar Container Imagen:

 

¡Amigos, esto es todo por hoy!

Si os parece interesante os ánimo a compartirlo con vuestros amigos y a suscribiros a la newsletter.

¡Hasta el próximo artículo!

P.D.: Containers no es correcto en castellano. Está escrito a propósito. En castellano es contenedores.

escrito por Javier Peral