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
1 |
Install-Module -Name DockerMsftProvider -Repository PSGallery –Force |
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
1 |
Install-Package -Name docker -ProviderName DockerMsftProvider –verbose |
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:
1 2 3 |
get-service docker start-service docker |
Figura 5: Avvio del servizio docker
Verificate la versione di Docker che avete installato lanciando il comando
1 |
docker version |
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:
1 |
docker info |
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
1 |
docker search microsoft |
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:
1 |
docker pull mcr.microsoft.com/windows/servercore/iis |
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
1 |
docker images |
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:
1 |
docker run -d -p 80:80 mcr.microsoft.com/windows/servercore/iis cmd |
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
1 |
docker ps |
Figura 17: Verifica dei container in esecuzione nella macchina host
Potete terminare l’esecuzione del container con il comando
1 |
docker stop <container id> |
Figura 18: Arresto del container
Per visualizzare tutti i container creati sull’host, anche quelli che sono arrestati, potete utilizzare il comando:
1 |
docker ps -as |
La rimozione di un container potrà essere invece effettuata semplicemente eseguendo il comando
1 |
docker rm <container id> |
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:
1 |
Install-WindowsFeature Hyper-V -Restart |
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.
1 |
docker run -it --isolation=hyperv -p 80:80 mcr.microsoft.com/windows/servercore/iis 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.