En este artículo no se habla sobre que es docker o los contenedores/NanoServer, si no como instalar-lo en nuestro Windows Server 2016 TechPreview 3.
Sobre que es, os dejamos el siguiente Link: https://news.microsoft.com/es-es/2015/08/19/disponible-un-nueva-technical-preview-de-windows-server-2016/
Visto que es, procederemos a instalar los Contenedores en nuestro Server 2016:
1 |
$ powershell.exe |
1 |
$ start-process powershell -verb runas |
1 |
$ wget -uri https://aka.ms/setupcontainers -OutFile C:\ContainerSetup.ps1 |
1 |
$ C:\containerSetup.ps1 |
Ello instalará y configurará los Containers en Windows Server.
Tras ello, se realizará un reinicio de WServer y una vez arranque finalizará la instalación de “Containers”, descargando el paquete WIM desde aka.ms y procediendo a su instalación. Para finalizar, el proceso descargará la imagen de ContainerBaseImage.wim.
Una vez finalizado, se instala Docker, con lo que podemos gestionar los Containers de Windows tanto con PowerShell como con Docker.
Containers con PowerShell
Para obtener un listado de los comandos habilitados para la gestión de containers, ejecutar:
1 |
Get-command –Module Containers |
Crear un Contenedor
Para ello, listaremos la imagen que tenemos disponible.
1 |
PS C:\Users\Administrator> Get-ContainerImageName |
1 |
Publisher Version IsOSImage |
1 |
WindowsServerCore CN=Microsoft 10.0.10514.0 True |
Con el comando get-vmswitch listará los switches instalados en el host. Toma nota del mismo para el proceso de creación del contenedor.
1 |
PS C:\Users\Administrator> Get-VMSwitchName |
1 |
SwitchType NetAdapterInterfaceDescription |
1 |
Virtual Switch NAT |
Con el siguiente comando crearemos un nuevo contenedor. En este ejemplo, la salida se almacena en una variable, llamada $container.
1 |
$container = New-Container -Name "MiContenedor" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch" |
Ahora, con el commando, get-container, podremos ver el contendor generado.
1 |
PS C:\Users\Administrator> Get-Container |
1 2 |
Name State Uptime ParentImageName MiContenedor Off 00:00:00 WindowsServerCore |
Para encender uno de los contenedores ejecutaremos:
1 |
PS C:\Users\Administrator> Start-Container -Name MiContenedor |
1 2 |
Name State Uptime ParentImageName MiContenedor Running 00:00:06.4350000 WindowsServerCore |
Si generamos el contenedor almacenando el contenido en una variable, como hicimos anteriormente, ahora podremos abrir sesión sobre nuestro contenedor de la siguiente forma:
Si no lo hicimos, podemos establecer la conexión mediante el ID de contenedor. Para obtener el mismo ejecutaremos:
1 |
Get-Container –Name “MiContenedor” | Select ContainerID |
Para después utilizar el ContainerID como ID de conexión PSSsesion.
1 |
PS C:\Users\Administrator> Get-Container -Name "MiContenedor" | select containerId |
1 |
ContainerId: 87424054-9921-42b5-8eea-d652fd03ca2c |
1 |
PS C:\Users\Administrator> Enter-PSSession -ContainerId 87424054-9921-42b5-8eea-d652fd03ca2c -RunAsAdministrator |
La siguiente salida, indicará que estamos logados en nuestro contenedor.
1 |
[87424054-992]: PS C:\Windows\system32> |
La gestión de la misma, se realizará igual que hacemos con una máquina virtual/física.
Instalar un servidor Web
Como el ejemplo de Microsoft vamos a usar ngnix como servidor web: http://nginx.org/
Para ello, descargaremos el software en nuestro contenedor:
1 |
wget -uri 'http://nginx.org/download/nginx-1.9.3.zip' -OutFile "c:\nginx-1.9.3.zip" |
Extraemos el zip en el contenedor:
1 |
Expand-Archive -Path C:\nginx-1.9.3.zip -DestinationPath c:\ -Force |
En este punto, podemos generar una imagen de este contenedor. O ejecutar nginx desde c:\nginx de la siguiente forma:
1 |
Start .\nginx.exe |
Por supuesto, si no queremos nginx, podemos instalar IIS. Para ello, instalar la feature:
1 |
Install-WindowsFeature –name Web-Server |
Una vez finalizado, ya dispondremos de IIS instalado.
Configurando la Red
Ahora, vamos a configurar la red de nuestro Contenedor a fin de poder tener acceso a nuestro nuevo servicio. Dependiendo de la conf. del host y de la red, un contenedor podrá recibir una IP de un servidor DHCP o del propio host utilizando el NAT. En este ejemplo vamos a usar NAT para el acceso al servicio del Contenedor.
Vamos a asignar un puerto del Host para que redirija las peticiones a un puerto del Contenedor. Por ejemplo, vamos a asignar la petición al host sobre el puerto 55555 sobre el puerto 80 del Contenedor, de este modo podríamos realizar una petición http://ContainerHost:55555
Para el laboratorio será necesario generar un portMApping. Para ello es necesario conocer la IP del contenedor i el puerto utilizado por el host que será configurado. Utilizaremos los comandos add-netNatStaticMapping con el parámetro –InternalIPAddres.
En nuestro ejemplo, la sintaxis seria la siguiente:
1 |
PS C:\> Add-NetNatStaticMapping -NatName "ContainerNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.3 -InternalPort 80 -ExternalPort 80 |
1 2 3 4 5 6 7 8 9 10 |
StaticMappingID : 0 NatName : ContainerNat Protocol : TCP RemoteExternalIPAddressPrefix : 0.0.0.0/0 ExternalIPAddress : 0.0.0.0 ExternalPort : 80 InternalIPAddress : 172.16.0.3 InternalPort : 80 InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000} Active : True |
Si disponemos de firewall, ahora sería necesario configurar la regla de entrada para el Firewall.
Ahora, desde otra máquina accedemos con un navegador a la IP de nuestro HOST de contenedores.
1 |
http://ContainerHost |
Conexió RDS
¿Podemos conectar vía RDS? Lo primero que haremos es conectar a nuestro contenedor, como indicamos anteriormente, mediante el uso de PSSesion. Una vez dentro del contenedor, establecemos password para el administrador local y activamos la cuenta.
1 2 |
net user administrator [yourpassword] net user administrator /active:yes |
En este punto, igual que hicimos con el servidor Web, deberemos realizar un NAT interno para la redirección de un puerto local, sobre el puerto del servicio del Contenedor.
1 |
Add-NetNatStaticMapping -NatName ContainerNAT -Protocol TCP -ExternalPort 3390 -ExternalIPAddress 0.0.0.0 -InternalPort 3389 -InternalIPAddress 172.16.0.3 |
Si disponemos de firewall, deberemos incluir la respectiva regla de acceso. Ahora es momento de abrir la conexión RDS:
1 |
mstsc /v:hostserver:3390 /prompt |
Recursos:
PowerShell Reference: https://msdn.microsoft.com/virtualization/windowscontainers/reference/powershell_overview
Leave a Reply