Windows Server 2016: Introduzione ai Container

Windows Server

I Containers sono una delle novità presenti all’interno di Windows Server 2016 che rende il mondo IT Pro più vicino ai Developer, in tutte quelle aziende dove il concetto di DevOps è presente.

Cos’è un Container?

Un Container è sostanzialmente una sandbox dov’è possibile far girare servizi e processi in un ambiente isolato. Queste sandbox girano all’interno di un Container Host, una macchina basata su Windows Server 2016 (Full, Core o Nano); la differenza con una classica virtual machine sta nel fatto che un Container si distribuisce in pochi secondi, il livello di manutenzione è ridotto a zero, il patching non è necessario e l’utilizzo delle risorse è molto limitato.

2015_11_06_Containers_01

Figura 1 – Container Schema

I Container, come dicevo all’inizio, sono perfetti in scenari di DevOps dove gli sviluppatori hanno necessità di creare un sito web dal loro ambiente, senza dover richiedere l’intervento del Web Admin; Visual Studio prossimamente supporterà a pieno il deployment sui Container. Il vantaggio di queste “scatole” sta nella gestione in fase di upgrade che può essere fatta elimando il vecchio e ripartendo da zero, dato che le informazioni più importanti (es. DB) non saranno mai all’interno del container stesso.

Container Images

Per poter creare velocemente i Container, si parte da un template di riferimento, chiamato ContainerImage, che contiene il modello con al suo interno file, servizi ed applicazioni necessari ad erogare la nostra soluzione. Ogni volta abbiamo bisogno di un nuovo container, non dovremo far altro che selezionarlo con questo cmdlet: New-Container -Name “TmpIIS” -ContainerImageName WindowsServerCore -SwitchName “Virtual Switch”

Perchè i Containers?

Chiaramente i Container non sono per tutti; benchè i servizi offerti sono ampi, c’è una logica di utilizzo che non fa sì che la feature non si presti a tutti gli utenti. In questo momento, questi sono i servizi supportati:

  • Web Sites
  • Services
  • Process
  • Applications
  • Windows Role/Features (not all)

A livello di web server, troviamo il supporto ad IIS con .Net, Apache e Ngnix. Come applicativi, troviamo il supporto a diversi database engine, escluso per ora SQL Server, oltre che a molti servizi di Windows. Chiaramente è possibile creare servizi e processi personalizzati per le proprie necessità.

Model Types

Con l’arrivo di Windows Server 2016 TP4 sono stati introdotti due modelli di Container, come mostra la figura 2.

2015_11_06_Containers_02

Figura 2 – Container Model

Windows Server Containers

Questo modello fa sì che l’host Container possa vedere i processi eseguiti all’interno del Container.

Hyper-V Containers

Questo modello isola i processi del Container dai processi dell’host. Per attivare questa modalità è necessario utilizzare almeno la build 10575 (la prima build che supporta a pieno la nested virtualization) sia all’interno dell’Host Container che per quanto riguarda Hyper-V.

Network Model

By default il Container viene creato utilizzando un NAT; questo significa che la sandbox rimarrà isolata rispetto al mondo esterno e che l’unico modo per comunicarvici è abilitare l’Host Container a far transitare il traffico. Tuttavia esiste anche la possibilità di abilitare i Container per utilizzare un server DHCP; questa scelta personalmente a me non piace perchè intanto richiede molti IP e perchè si andrebbe ad esporre in modo eccessivo i Container stessi.

Tutti i Container creati nello stesso Host, possono comunicare tra di loro e quindi è possibile sviluppare applicazioni di Line of Business che prevedono più elementi tra di loro. Nel caso sia necessario mettere in comunicazione Container che si trovano in Host separati sarà necessario lavorare a livello di NAT.

Resource Manager

Dalla Technical Preview 4 è possibile configurare l’utilizzo delle risorse utilizzate dai Container per ottimizzare le risorse primarie del Container Host ed evitare un sovrautilizzo. In questo momento è possibile impostare le seguenti metriche: CPU, Memory, Network Bandwidth, Storage IO. Maggiori informazioni sono disponibili a questo link: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/management/manage_resources

Pubblicare i Container

Per esporre i Container verso l’esterno è necessario utilizzare PowerShell ma se volete automatizzare determinati processi, vi rimando a questi script che ho creato, all’interno della TechNet Gallery. Le soluzioni servono per creare e gestire i Container in ambienti con, e senza, NAT.

Interessati dai Container? Allora non resta che provarli!