Ejecutar contenedores de Windows y Linux en Windows Server 2019.
En el mes de octubre de 2018 se lanzo la nueva versión de Windows Server llamada “Windows Server 2019” y trae como novedades en cuanto a contenedores la posibilidad de ejecutar contenedores Windows y Linux sin la utilización de la máquina virtual “MobyLinux”.
A continuación, vamos a describir como instalar y trabajar con docker en esta nueva versión de Windows Server.
Lo primero que tenemos que hacer es eliminar cualquier versión de docker que este instalada en la máquina. Para realizar esta acción se tiene que ejecutar la siguiente sentencia de powershell (con permisos de administrador) y reiniciar la máquina.
Unistall-Package -Name docker -ProviderName DockerMSFTProvider
Cuando tengamos la maquina limpia o recién creada (docker no se instala por defecto), se procederá a la instalación de la versión (preliminar en estos momentos) para poder ejecutar contenedores de Linux. Para instalar esta versión se tiene que seguir los siguientes pasos:
Verificar que esta instalado el rol de Hyper-V. Es necesario tenerlo instalado para esta versión de Docker Enterprise que se va a instalar.
A continuación, se instala la versión beta de Docker Enterprise Edition. Para instalar esta versión se tiene que ejecutar los siguientes comandos de powershell:
Install-Module DockerProvider
Y después
Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview
Por último, reiniciamos la máquina.
Configurar Docker Enterprise Edition para ejecutar contenedores Linux
Para configurar la ejecución de contenedores Linux se tiene que ejecutar la siguiente sentencia:
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")
Y a continuación, se tiene que reiniciar el servicio de docker utilizando la siguiente sentencia:
Restart-Service docker
*** Ejecutar contenedores Linux
Para probarlo, primero bajamos una imagen de Debian
A continuación, creamos un contenedor de la imagen descargada
Configurar Docker Enterprise Edition para ejecutar contenedores Windows
Para configurar la ejecución de contenedores Linux se tiene que ejecutar la siguiente sentencia:
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", $null, "Machine")
Y a continuación, se tiene que reiniciar el servicio de docker con la sentencia:
Restart-Service docker
Ejecutar contenedores Windows
Primero descargamos una imagen de Windows (nanoserver)
A continuación, se crea un contenedor de la imagen descargada
Y para verificar que se está ejecutando el contenedor accedemos al sistema de archivos donde se puede verificar que solo hay dos directorios: Users y Windows.
¿Cómo funciona?
Podemos pensar que funcionará igual que funciona en Docker for Windows para Windows 10, el cuál para ejecutar contenedores Linux utiliza la máquina virtual “MobyLinux” que se instala por defecto con Docker for Windows. Pero es incorrecto este pensamiento. Se puede verificar que la máquina virtual MobyLinux no existe en el administrador de Hyper-V.
La posibilidad de poder ejecutar contenedores Linux en Windows Server 2019 es debido a LCOW y LinuxKit.
LinuxKit es una herramienta que nos permite construir versiones de distros de Linux muy ligeras (https://github.com/linuxkit/linuxkit)
Y por otro lado tenemos LCOW, que a diferencia de ejecutar los contenedores Linux en la maquina virtual MobyLinux es que los que se ejecutan en LCOW se ejecutan en una máquina virtual de Linux optimizada con el sistema operativo suficiente para ejecutar los contenedores, es decir, tiene su propio Kernel y su sandbox que son gestionados por Docker en Windows directamente y no desde la máquina virtual MobyLinux.
En otro post explicaré con mayor detalle el funcionamiento de LCOW, pero para los que tienen curiosidad pueden mirar los siguientes enlaces:
https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers https://github.com/linuxkit/lcow