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 鈥淗ola 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 鈥渁plicaci贸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