Nell’ambito degli approcci alla virtualizzazione, un container è una forma di server virtualizzato a livello del sistema operativo. Invece di creare una istanza virtuale di tutto un server fisico (processore, storage, connessioni di rete, sistema operativo…) come accade per le macchine virtuali, nell’approccio IT a container si attiva una istanza virtuale solo dello spazio utente, quindi essenzialmente dell’ambiente di esecuzione delle applicazioni.

Tutto quello che supporta tale ambiente – quindi dal sistema operativo “in giù” verso l’hardware – non è virtuale ma reale e condiviso fra tutti i container in esecuzione.

Vantaggi dei container

Non dovendo inglobare tutte le risorse di un server, in particolare il kernel del sistema operativo, i container sono molto più “leggeri” delle macchine virtuali, richiedono poche risorse di CPU e possono essere attivati in pochi istanti. Questo li rende particolarmente adatti alle situazioni in cui il carico di elaborazione da sostenere è fortemente variabile nel tempo e ha picchi poco prevedibili.

Un caso tipico di questo scenario è la gestione del traffico per siti web di e-commerce che attivano promozioni speciali: i picchi di connessioni in entrata si possono gestire attivando in frazioni di secondo decine o centinaia di container, ciascuno dei quali esegue una istanza di un web server che sostiene parte del traffico dei visitatori del sito.

Leggi anche: Google rende disponibile Container Engine

Usare i container su Linux e Windows

Per implementare i container serve un modulo di astrazione tra il sistema operativo “ospitante” e i container. In ambiente Linux la soluzione dominante in questo senso è la piattaforma open source Docker, supportata e spesso integrata dalla maggior parte delle distribuzioni Linux più importanti (leggi anche: Container Linux, tra dubbi e grandi aspettative).

In ambiente Windows, si distinguono due diversi tipi di Windows Container:

Windows Server Container: forniscono uno strato di isolamento tra gli applicativi usando tecnologie basate sui namespace e la separazione dei processi, ma condividono il kernel tra tutti i container in esecuzione sullo stesso host.

Hyper-V Container: eseguono ogni container in una macchina virtuale ottimizzata, in cui viene eseguita una diversa istanza del kernel non condivisa con gli altri container Hyper-V.

Il tipo di container utilizzato ha implicazioni anche sul costo della licenza Windows Server.

Container e VM a confronto con le rispettive architetture

Container e VM a confronto con le rispettive architetture

Meglio container o macchine virtuali?

L’approccio dei container ha avuto una forte diffusione sul mercato per via della semplicità e della velocità nell’attivazione dei container stessi, ma ha alcuni limiti che non lo rendono adatto per qualsiasi applicazione.

Il primo e più evidente è che tutti i container condividono il medesimo sistema operativo, quindi non è possibile avere in esecuzione sullo stesso hardware ambienti con (virtualizzati) sistemi operativi diversi, cosa invece possibile usando le macchine virtuali.

Leggi anche: Tutti pazzi per i container

In secondo luogo non esiste una netta e completa separazione tra container: il kernel del sistema operativo ospitante è in comune e questo in linea teorica può comportare problemi di sicurezza. Se un container dovesse compromettere la stabilità del kernel, ad esempio, ciò si ripercuoterebbe su tutti gli altri container.