Docker Deployment in Windows Server 2016

Come ormai tutti sanno, Windows Server 2016 integra al suo interno il motore di Docker anche se la cosa non è stata chiara da subito. Correva Novembre 2015 e Microsoft aveva rilasciato la TP3 in cui era presente sia Docker che i Windows Server Containers, che erano una specie di copia del primo, sfruttando però alcune cose interessanti come PowerShell e la Nested-Virtualization di Hyper-V. Con l’arrivo della TP5, però, il progetto è stato messo da parte per essere totalmente sostituito da Docker, anche se Microsoft non ha rinunciato ad alcune feature già presenti nei Containers.

In questo articolo vedremo come installare Docker in Windows Server 2016 e come configurare il nostro primo container con un’applicazione web basata su IIS. I concetti non sono molto diversi da quanto già appreso nell’articolo Docker Deployment in Ubuntu, ma chiaramente ci sono delle differenze.

Installazione

L’attivazione della feature, figura 1, è abbastanza semplice e richiede un riavvio al termine del wizard.

2016_10_25_dockerws16-01jpg

Figura 1 – Installazione Feature

Una volta riavviata la macchina dovrete lanciare i seguenti comandi in PowerShell:

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
Restart-Computer -Force

Per verificare che tutto sia andato a buon fine, lanciate il comando docker version per vedere se vi vengono restituite le informazioni corrette.

Pull

Una volta conclusa la configurazione iniziale sarà necessario andare a scaricare le immagini su cui costruire i nostri container. A differenza però del mondo Linux, non è possibile scaricare immagini del pinguino ma solo quelle targate Microsoft. Questo vincolo potrebbe essere superato in futuro ma per ora non si ha visiblità in merito. Come sempre, l’elenco delle immagini disponibili è possibile effettuarlo dal Docker Hub, oppure tramite il comando docker search xxxx.

NB: Microsoft mette a disposizione molte immagini, con diversi applicativi già installati come SQL Server 2014/2016 Express oppure IIS o .Net.

Una volta scelta l’immagine che vi serve, potete scaricarla tramite il comando docker pull nomeimmagine (es. docker pull ubuntu). Il tempo di download varia a seconda della vostra connettività.

Per visualizzare la presenza dell’immagine si può usare il comando docker images, come mostra la figura 2.

2016_10_25_dockerws16-02

Figura 2 – Docker Images

Ora si può proseguire con la creazione del template, che conterrà tutte le nostre modifiche.

Configurazione Template

Per creare il nostro primo container sarà necessario usare il comando docker run -it microsoft/windowservercore cmd (o il nome dell’immagine scaricata). L’engine di Docker aprirà subito la sessione all’interno del container, come si può notare dal fatto che dopo il nome utente è presente l’identificativo dello stesso. Alcune immagini consentono l’installazione delle feature di Windows e/o di applicativi esterni; tra queste c’è appunto l’immagine microsoft/windowservercore.

Se volete fare un prova più rapida, potete eseguire questo comando: docker run -it -p 800:80 microsoft/iis cmd. Questo vi permetterà di avere subito il sito web di default operativo e di poterlo visionare tramite la pagina http://ipcontainerhost:800.

Come sempre, le immagini possono essere personalizzate come meglio volete: nel caso di un sito web, sicuramente potete mettere file e cartelle per poter creare i successivi container in modo più rapido.

Creazione Immagine

Per poter creare un’immagine è necessario che il container di referenza sia stoppato e per farlo è necessario usare il comando docker stop idcontainer. Per creare una nuova immagine si può usare il comando docker commit idcontainer nomeimmagine (es. docker commit xxx insidetech/mscoreweb-itlab).

A questo punto sarà possibile creare il nostro container partendo dall’immagine appena generata, tramite il comando docker run -it –-name web01 -p 800:80 insidetech/mscoreweb-itlab cmd. Nello specifico ho assegnato: un nome al container (web01), gli ho detto da quale immagine partire (insidetech/mscoreweb-itlab) e soprattutto gli ho detto di fare un NAT, esponendo la porta 80 del container verso la porta 800 del container host. Il motivo è semplice: ho una sola porta 80 sul mio Container Host e quindi devo usare altre porte per esporre i servizi che non si sovrappongano.

Verificare che il sito web sia fruibile dal vostro computer, tramite l’URL http://ipcontainerhost:800. Se avete fatto tutto correttamente, il risultato sarà simile a quello della figura 3.

2016_10_25_dockerws16-03

Figura 3 – Container in Funzione

A questo punto potete uscire dalla sessione, felici di aver creato il vostro primo container su Docker.

Isolation Mode

Come detto in precedenza, non tutto quello fatto all’interno di Windows Server Containers è stato buttato e così come avviene in Linux, anche nel mondo Microsoft è possibile creare livelli diversi di sicurezza. Nello specifico abbiamo due modalità diverse:

  • Windows Server Containers: la modalità di default che condivide il kernel del Container Host ed i processi sono visibili e gestibili da quest’ultimo. L’avvio dell’ambiente risulta rapido e non sono richiesti requisiti particolari. Questo scenario è indicato per gli ambienti di test o per ambienti di produzione controllati.
  • Hyper-V Isolation: la modalità prevede la totale esclusione del container rispetto al suo Host, grazie all’utilizzo della Nested-Virtualization. L’avvio dell’ambiente risulta più lento ed è richiesta una macchina fisica con il ruolo Hyper-V, oppure una macchina virtuale, sempre con il ruolo Hyper-V, il cui host ha un processore Intel (VT-x e tecnologia EPT). Questo scenario è indicato per gli ambienti di produzione, dove si vuole avere la massima sicurezza.

Per attivare un container in modalità isolata, basta eseguire il seguente comando: docker run -it –isolation=hyperv microsoft/windowservercore cmd

Comandi Utili

Ecco alcuni comandi utili per gestire al meglio Docker:

  • Avviare Container – docker start idcontainer
  • Fermare Container – docker stop idcontainer
  • Accedere alla Sessione – docker exec -it idcontainer bash
  • Elenco Immagini – docker images
  • Elenco Container – docker ps -a
  • Eliminare Immagine – docker rmi idimmagine
  • Eliminare Container – docker rm idcontainer
  • Copia tra Host e Container – docker cp source idcontainer:pathdestinazione

Conclusioni

In questo articolo abbiamo visto la facilità nell’implementazione di Docker all’interno di Windows Server 2016, con le stesse funzioni presenti nel mondo Linux che permettono di gestire un’infrastruttura in modo avanzato.

Link Utili