Installazione e gestione dei container con Docker Enterprise Edition in Windows Server 2019 e Windows Server, versione 1909

I Container sono una funzionalità introdotta in Windows Server 2016 che permette di far girare le applicazioni in maniera isolata tra loro e rispetto al sistema operativo. Questo garantisce una maggiore flessibilità nella distribuzione delle applicazioni e maggiore sicurezza in quanto le applicazioni girano in maniera tale da non creare nessun tipo di problematica al sistema operativo.

I container aiutano gli amministratori di sistema a creare un’infrastruttura più facile da aggiornare e gestire e che utilizza al meglio le risorse hardware. I professionisti IT possono usare i contenitori per creare ambienti standardizzati per i team di sviluppo e per la produzione. Aiutano invece gli sviluppatori a creare e spedire app in maniera più semplice e rapida. Grazie ai container gli sviluppatori possono creare un’immagine contenitore che viene distribuita in pochi secondi, in modo identico in tutti gli ambienti.

I diversi container che girano sullo stesso sistema operativo sono isolati tra di loro. Attualmente Windows Server supporta due differenti tipi di container:

  • Windows Server containers: condividono il kernel del sistema operativo con il container host. Nonostante questo permetta un avvio molto più veloce dei contenitori non è assicurato un completo isolamento tra i contenitori stessi
  • Hyper-V containers: permettono di poter avere un isolamento maggiore rispetto ai Windows Server containers e vengono eseguiti in una macchina virtuale altamente ottimizzata. Tuttavia gli Hyper-V container non condividono il kernel del sistema operativo con il container host.

Figura 1: Overview dei Windows Server Containers

Figura 2: Overview gli Hyper-V containers

In questa guida mi occuperò di installare la funzionalità dei container e di utilizzare Docker in Windows Server 2019 e Windows Server, versione 1909, l’ultima release di Windows Server rilasciata nel Semi-Annual Channel. Il Canale semestrale è ideale per i clienti che desiderano introdurre rapidamente le innovazioni, con l’opportunità di sfruttare le nuove funzionalità del sistema operativo, sia nelle applicazioni, in particolare quelle basate su contenitori e micro servizi, sia in data center ibridi software-defined.

I container possono essere gestiti tramite Docker. Docker è un’azienda fondata nel 2013 che ha creato un progetto open-source che automatizza il deployment di applicazioni all’interno di contenitori software sia in ambiente Windows che in ambiente Linux.

Per installare Docker è sufficiente utilizzate la cmdlet di PowerShell

Figura 3: Installazione del provider DockerMSFT

Terminata l’installazione del provider DockerMSFT procedete all’installazione del pacchetto Docker e all’attivazione della funzionalità di Windows Containers con la cmdlet PowerShell

Figura 4: Installazione del pacchetto Docker e attivazione della funzionalità di Windows Containers

Terminata l’installazione procedete al riavvio dell’host Windows Server.

Dopo il riavvio potete verificare la corretta installazione della funzionalità container e avviare il software Docker lanciando il comando:

Figura 5: Avvio del servizio docker

Verificate la versione di Docker che avete installato lanciando il comando

Figura 6: Verifica della versione di Docker installata

Maggiori informazioni sulla versione del kernel, il numero delle immagini dei container e la cartella dove verranno salvati i contenitori si possono ottenere lanciando il comando:

Figura 7: Informazioni sull’installazione di Docker

Immagini di base dei container

Windows offre quattro immagini di base da cui gli utenti possono creare nuovi contenitori:

Tutte le immagini di base dei Windows sono individuabili tramite Docker Hub e vengono servite da MCR.Microsoft.com, il registro dei contenitori Microsoft (Docker Registry).

Per cercare un’immagine si può utilizzare anche il comando

Figura 8: Ricerca delle immagini tramite comando docker search

Figura 9: Ricerca delle immagini tramite il Docker Hub

Figura 10: Immagine scelta nel Docker Hub

Nel mio caso ho scaricato l’immagine di base con già installato IIS utilizzando il comando:

Figura 11: Download dell’immagine scelta dal Docker Hub

Figura 12: Estrazione dell’immagine scelta nel repository locale

Figura 13: Estrazione dell’immagine Docker completata

Per verificare quali immagini di base sono disponibili sulla macchina host potete utilizzare il comando

Figura 14: Verifica delle immagini di base disponibili sulla macchina host

Esecuzione di un container

Dopo aver completato il download dell’immagine, potete lanciare il primo contenitore utilizzando il comando:

questo comando eseguirà un nuovo contenitore in background e mapperà la porta 80 dell’host con la porta 80 del contenitore appena creato. Tramite il comando ipconfig, verificate l’indirizzo IP assegnato alla macchina host e da un computer nella stessa rete provate a collegarvi tramite browser a quell’indirizzo. Se tutto è stato eseguito correttamente vedrete la pagina di default di IIS.

Figura 15: Esecuzione del primo container sulla macchina host

Figura 16: Pagina di default di IIS, eseguito all’interno del container

Per verificare quali container sono in esecuzione potete utilizzare il comando

Figura 17: Verifica dei container in esecuzione nella macchina host

Potete terminare l’esecuzione del container con il comando

Figura 18: Arresto del container

Per visualizzare tutti i container creati sull’host, anche quelli che sono arrestati, potete utilizzare il comando:

La rimozione di un container potrà essere invece effettuata semplicemente eseguendo il comando

Figura 19: Rimozione di un container

Hyper-V container

Abbiamo detto che gli Hyper-V container offrono un livello d’isolamento superiore rispetto a Windows container perché vengono eseguiti in micro macchine virtuali. Per poter eseguire gli Hyper-V container è necessario installare la funzionalità di Hyper-V sulla macchina host con il comando PowerShell:

Figura 20: installazione della funzionalità di Hyper-V

Per eseguire un Hyper-V container è sufficiente aggiungere il comando –isolation=hyperv (ci sono due segni -) al comando docker run . Nel mio caso ho anche utilizzato -it per creare una sessione interattiva con il container ed utilizzare il cmd.

Figura 21: Creazione di un Hyper-V container

Poiché ho mappato la porta 80 dell’host con la porta 80 del contenitore appena creato, collegandosi da un browser all’indirizzo IP della macchina host sarà possibile vedere la pagina di default di IIS.

Figura 22: IIS eseguito in un Hyper-V Container

Conclusioni

I container sono una tecnologia per il packaging e l’uso di applicazioni Windows e Linux in ambiente locale e nel cloud. Garantiscono un ambiente isolato e leggero che rende le app più facili da sviluppare, distribuire e gestire. Iniziano e si arrestano rapidamente e sono ideali per le app che devono adattarsi alle mutevoli esigenze della produzione. La natura leggera dei contenitori li rende inoltre uno strumento utile per aumentare la densità e l’utilizzo dell’infrastruttura hardware.