Eseguire i Linux Containers in Windows Server, versione 1709

Con il rilascio dell’ultima versione del sistema operativo server, chiamata Windows Server 1709 e delle cui novità ne ho parlato nella’articolo https://www.ictpower.it/sistemi-operativi/windows-server-2016-1709-quali-saranno-le-novita.htm, Microsoft e Docker ci offrono la possibilità di far girare i container Linux in un Windows Container Host.

Tra i prerequisiti richiesti per far girare i container Linux ci sono l’installazione di Docker Enterprise Edition e di LinuxKit.

In questa guida vi mostrerò come far girare i Linux Containers all’interno di una macchina virtuale. Per poterlo fare sarà necessario abilitare la Nested virtualization nella VM, in quanto i container Linux possono essere solo Hyper-V Containers. Per avere maggiori informazioni sulla Nested Virtualization vi rimando all’articolo https://www.ictpower.it/guide/abilitare-la-nested-virtualization-con-le-nuove-azure-vm-dv3-ed-ev3.htm

Dopo aver creato la macchina virtuale, che ho chiamato 1709 – Linux Containers, sarà necessario configurarla con la memoria RAM statica ed abilitare la nested virtualization con il comando PowerShell (eseguito con privilegi elevati)

Set-VMProcessor -VMName “1709 – Linux Containers” -ExposeVirtualizationExtensions $true

Configurate la scheda di rete della VM in modo tale che sia abilitato il Mac Address spoofing con il comando PowerShell

Get-VMNetworkAdapter -VMName “1709 – Linux Containers” Set-VMNetworkAdapter -MacAddressSpoofing On

Procedete quindi all’installazione di Windows Server 1709 e terminata l’installazione, utilizzando il tool sconfig, affettuate tutti gli aggiornamenti, come mostrato in figura:

Figura 1: Installazione di Windows Server versione 1709 completata

Figura 2: Installazione degli aggiornamenti

Al termine degli aggiornamenti la versione di Windows sarà la 10.0.16299.19

Installazione di Docker Enterprise Edition

Per installare Docker Enterprise Edition è necessario lanciare un prompt PowerShell con privilegi elevati ed eseguire i comandi:

Install-Module DockerProvider -Force

Install-Package Docker -ProviderName DockerProvider -Force

Figura 3: Installazione di Docker Enterprise for Windows completata

Terminata l’installazione procedete ad un riavvio della macchina virtuale.

Dopo il riavvio potete verificare che il servizio Docker stia girando usando il comando PowerShell Get-Service docker e potete verificare la versione utilizzando il comando Docker version, come mostrato in figura:

Figura 4: Verifica della versione di Docker e dello stato del servizio

Adesso che i prerequisiti sono stati installati possiamo procedere all’installazione di Docker for Linux e del LinuxKit.

Installazione di Docker for Linux e del LinuxKit

Utilizzando un prompt PowerShell eseguito con privilegi elevati installiamo LinuxKit con i seguenti comandi:

$progressPreference ‘silentlyContinue’

mkdir $Env:ProgramFiles\Linux Containers”

Invoke-WebRequest -UseBasicParsing -OutFile linuxkit.zip https://github.com/friism/linuxkit/releases/download/preview-1/linuxkit.zip

Expand-Archive linuxkit.zip -DestinationPath $Env:ProgramFiles\Linux Containers\.”

rm linuxkit.zip

Figura 5: Installazione del LinuxKit

A questo punto scaricate la build di Docker deamon che contiene una versione di Preview che supporta i Linux Container in Windows utilizzando la cmdlet di PowerShell

Invoke-WebRequest -UseBasicParsing -OutFile dockerd.exe https://master.dockerproject.org/windows/x86_64/dockerd.exe

Successivamente avviate un demone Docker che sia in ascolto su una pipe separata utilizzando il comando PowerShell

$Env:LCOW_SUPPORTED=1

$env:LCOW_API_PLATFORM_IF_OMITTED=“linux”

.\dockerd.exe -D –experimental -H “npipe:////./pipe//docker_lcow” –data-root c:\lcow

Figura 6: Avvio del demone Docker per l’esecuzione dei container Linux

Lasciate la finestra che ha avviato il demone in esecuzione (NON CHIUDETELA) e provate ad eseguire un Linux Container aprendo un’altra finestra con il Command Prompt e eseguendo il comando:

docker -H “npipe:////./pipe//docker_lcow” run -ti busybox sh

Figura 7: esecuzione del comando per il lancio del Linux Container

Se l’immagine non è presente nel vostro host Windows verrà scaricata, estratta ed eseguita. È possibile scaricare l’immagine anche utilizzando il comando docker -H “npipe:////./pipe//docker_lcow” pull busybox

Conclusioni

Attualmente l’esecuzione di Linux Container in un Windows Server host richiede un po’ di lavoro per la configurazione e non è supportata in produzione. Sicuramente è un ulteriore passo in avanti per poter permettere agli sviluppatori di poter creare e testare applicazioni Windows/Linux facendo girare container per entrambe le piattaforme side-by-side sullo stesso sistema operativo.