Crear Windows Server Containers

Continuando con los post sobre los Windows Containers hoy vamos a ver como crear Windows Server Containers, considerando que cumplimos y configuramos nuestro sistema host, con el tutorial anterior.

Creando el Container

Lo primero que debemos de considerar es de ubicarnos en la VM (en nuestro ejemplo) que actuará de host, y luego generar una instancia de powershell, para ello, desde la consola abierta (cmd), ejecutamos:

powershell

Vamos a usar el cmdlet Get-ContainerImage para validar que nuestra versión de SO es la Windows Server 2016 Core:

Get-ContainerImage

Para crear el Container, e iniciarlo, debemos ejecutar el siguiente comando:

New-Container -Name TP4Con -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"

Crear Windows Server Container

Donde el parámetro Name indica el nombre del Container, ContainerImageName la imagen que vamos a usar para generarlo y SwitchName el nombre del switch que vamos a usar.

Debemos ejecutar el cmdlet Start-Container para iniciarlo, ya que el estado final luego de crearlo es off.

Start-Container -Name TP4Con

Crear Windows Server Container

Como sabrán, al no tener entorno gráfico, debemos gestionar la administración por medio de la consola, por lo que para conectarnos a nuestro Container nuevo, vamos a ejecutar:

Enter-PSSession -ContainerName TP4Con -RunAsAdministrator

Creando una imagen con IIS

Ahora que ya tenemos la sesión iniciada con nuestro container, vamos a modificarlo para luego generar una imagen de container. Para este ejemplo vamos a crear una imagen que contenga el rol de IIS.

Para instalar el rol de IIS en el containter, debemos usar el cmdlet Install-WindowsFeature.

Install-WindowsFeature web-server

Crear Windows Server Container

Al finalizar la instalación debemos salir de la sesión con el container, ejecutando exit. Con esta acción vamos a volver a situarnos en el container host.

Después, debemos detener el container, ejecutando lo siguiente:

Stop-Container -Name TP4Con

Ahora que se encuentra apagado, es posible utilizando el cmdlet New-ContainerImage, generar una nueva container image:

New-ContainerImage -ContainerName TP4Con -Name WindowsServerCoreIIS -Publisher vmsilvamolina -Version 1.0

En el ejemplo anterior, generamos la imagen llamada WindowsServerCoreIIS, con el publisher de nombre vmsilvamolina y definiendo como 1.0, la versión de la imagen.

Si no se desea mantener la imagen original (TP4Con), esposible eliminarla ejecutando:

Remove-Container -Name TP4Con -Force

Ahora tenemos en nuestro servidor, otra imagen disponible para utilizar con los containers.

Creando el Container IIS

Vamos a crear el container con la imagen que tiene el rol de IIS instalado y luego iniciarlo:

New-Container -Name IIS -ContainerImageName WindowsServerCoreIIS -SwitchName "Virtual Switch"
Start-Container -Name IIS

Crear Windows Server Container

Networking

Ahora que tenemos el container generado con el rol de IIS instalado, vamos a configurar la parte de redes, para poder acceder al container.

En este ejemplo vamos a crear una web simple, por lo que vamos a usar el puerto 80. Para poder acceder de manera externa al host, debemos mapear el puerto 80 del container host, con el puerto 80 del container que acabamos de crear. Para ello, debemos ejecutar:

Invoke-Command -ContainerName IIS {ipconfig}

Con el comando anterior realizamos la ejecución del comando ipconfig dentro del container que acabamos de crear.

Ahora necesitamos ejecutar el mapeo, para realizarlo, vamos autilizar el comando:

if (!(Get-NetNatStaticMapping | where {$_.ExternalPort -eq 80})) {
    Add-NetNatStaticMapping -NatName "ContainerNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -InternalPort 80 -ExternalPort 80
}

Crear Windows Server Container

El cmdlet Add-NetNatStaticMapping permite realizar el mapeo del puerto necesario.

Con el mapeo creado, vamos a configurar lo necesario en el Firewall, para ello:

if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"})) {
    New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80" -Protocol tcp -LocalPort 80 -Action Allow -Enabled True
}

Crear Windows Server Container

Creando la aplicación “

Hola Mundo!”

En este momento, podemos ejecutar un navegador y accediendo a la IP de nuestro container host vamos a poder ver lo siguiente:

IIS Container - Página de inicio

La pantalla de bienvenida del IIS! Ahora que sabemos que tenemos correctamente instalado el IIS en nuestro container, vamos a realizarle un pequeño cambio, a modo de Hola Mundo!.

Lo primero que hay que hacer es iniciar una sesión con el container:

Enter-PSSession -ContainerName IIS -RunAsAdministrator

Ahora podemos ejecutar lo siguiente para borrar la imagen por defecto (splash screen) que trae el IIS:

del C:\inetpub\wwwroot\iisstart.htm

Y vamos a generar un archivo .html personalizado que sea nuestra “ aplicación” :

@" 
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Hola Mundo!</title>
<style type="text/css">

body {
    font-family: Segoe UI Light,SegoeUILightWF,Arial,Sans-Serif;
}

.encabezado {
    color: #FFFFFF;
    line-height: 40px;
    padding: 25px;
    background: #00A2F4;
}

</style>
</head>
<body>
<div>
<h1 class="encabezado"> Esto no es el clásico Hola Mundo!</h1>
"@ > C:\inetpub\wwwroot\index.html

Ahora vamos a ir al navegador y vamos a presionar F5… Listo!

IIS Container - Página de inicio modificada

Ya tenemos disponible nuestra aplicación.

Saludos,

Comments