Molti si chiedono quali siano le differenze tra container e Virtual Machines, il metodo di virtualizzazione fino’ora più utilizzato nel settore, o se siano davvero differenti e non si tratti di “semplice virtualizzazione”.
La tecnologia dei container può essere considerata figlia della virtualizzazione, che introduce delle innovazioni importanti alla tecnica tradizionale. In primo luogo, nell’approccio dei container non esiste l’hypervisor ma è presente un sistema che “impacchetta” le applicazioni/servizi applicativi in container. Questo sistema crea un livello di astrazione fra i container e il sistema operativo ospitante e gestisce l’attivazione e la disattivazione dei contenitori.
Un’altra grande differenza è che la virtualizzazione permette di eseguire più sistemi operativi contemporaneamente in un singolo sistema, mentre i container condividono lo stesso kernel del sistema operativo e isolano i processi applicativi dal resto dell’infrastruttura.
Ecco le principali differenze fra i container e le macchine virtuali:
– Deployment semplificato: la tecnologia dei container permette di semplificare il deployment di qualsiasi applicazione poichè essa viene “impacchettata” in un singolo componente distribuibile e configurabile con una sola linea di comando, senza doversi preoccupare della configurazione dell’ambiente di esecuzione
– Disponibilità rapida: virtualizzando solamente il sistema operativo e le componenti necessarie all’esecuzione dell’applicazione, invece che l’intera macchina, i tempi di avvio si riducono notevolmente rispetto a quelli di una VM
– Ampia portabilità: i container possono essere creati e replicati in qualsiasi ambiente in modo semplice e veloce. Si tratta di un grande vantaggio a livello del ciclo di vita di un software per esempio, poichè i container possono essere copiati molto velocemente per creare gli ambienti di sviluppo, test e produzione senza la necessità di operare configurazioni
– Controllo più granulare: i container possono “pacchettizzare” un’intera applicazione ma anche solo un singolo componente. In questo modo consentono agli sviluppatori di suddividere ulteriormente le risorse in microservizi, garantendo così un maggiore controllo sull’eseguibilità delle applicazioni e un miglioramento delle performance dell’intera infrastruttura
– Leggerezza: un grande punto di forza dei container è che sono molto più “leggeri” delle virtual machines perché non devono attivare un loro sistema operativo dedicato. Di conseguenza sono molto più veloci da attivare e disattivare e ideali per quegli ambienti in cui il carico di elaborazione varia sensibilmente e in maniera imprevedibile.
Ma come per ogni cosa vi sono pregi e difetti, anche i container hanno le loro debolezze.
Una di queste è rappresentata dalla difficoltà di gestione quando il numero di container è molto elevato. Al contrario, le virtual machine sono più semplici da amministrare anche perchè raramente raggiungono grandi quantità, come invece può accadere facilmente con l’utilizzo dei container. Un altro punto debole è proprio la condivisione dello stesso kernel del sistema operativo. A livello teorico, uno dei container potrebbe compomettere la stabilità del kernel, influenzando anche gli altri.
Per concludere possiamo dire che non si tratta di due soluzioni antitetiche. A secondo dello scopo, può essere più adatta la virtualizzazione o la tecnologia dei container. Ad esempio, la leggerezza dei container si scontra con l’impossibilità di avere più sistemi operativi nello stesso sistema. Allo stesso modo, con risorse e capacità limitate, una soluzione leggera come quella dei container è sicuramente più idonea e performante rispetto ad un’infrastruttura composta da virtual machines.