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"
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
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
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
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
}
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
}
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:
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!
Ya tenemos disponible nuestra aplicación.
Saludos,
Comments