Container vs Virtual Machine (VM). Container e VM sono due tra le tecnologie di virtualizzazione attualmente più diffuse, soprattutto grazie alla loro crescente disponibilità in cloud. Per certi versi potrebbero apparire abbastanza simili, indubbiamente presentano più di un punto di contatto, ma i differenti obiettivi alla base della loro creazione e le tecnologie con cui vengono virtualizzate fa sì che container e macchine virtuali costituiscano ormai due risorse assolutamente complementari nel soddisfare un’ampia gamma di esigenze in ambito IT.

Container vs Virtual Machine: cosa sono i container

Nella loro definizione più semplice i container sono dei contenitori virtuali che consentono di eseguire un’applicazione.

Serverless CTA

I container sono ben presto diventati l’ambiente di esecuzione ideale per i microservizi che compongono le applicazioni moderne e più in generale hanno acquisito una rapida popolarità nel contesto della modernizzazione delle app. Il proliferare di applicazioni cloud native ha infatti innescato una vera e propria rivoluzione, grazie alla decomposizione delle tradizionali architetture monolitiche in una serie di componenti disaccoppiati che possono essere sviluppati in maniera indipendente, anche per quanto concerne i relativi ambienti di runtime.

La diffusione delle architetture a microservizi ha consentito la diffusione delle metodologie di sviluppo Agile e DevOps, dove ogni team può agire sul singolo componente, senza dover necessariamente conoscere l’intera applicazione. Tale logica consente di utilizzare tecnologie differenti nello sviluppo dei singoli componenti, a partire dai linguaggi di programmazione.

I container costituiscono degli ambienti di runtime per i microservizi grazie alla facoltà di mettere a disposizione tutto l’occorrente per la loro esecuzione (librerie, codice binario, dipendenze, file eseguibili, file di configurazione, ecc.) durante tutte le fasi del loro ciclo di vita, con particolare attenzione per il test e il deploy. Tali operazioni vengono infatti svolte con elevata frequenza nei cicli CI/CD che caratterizzano le applicazioni cloud native, come quelle disponibili nel modello di distribuzione SaaS (Software as a Service).

Per dare un significato alla “contrapposizione” Container vs Virtual Machine, basta evidenziare che i container vengono creati da appositi software con un processo di virtualizzazione al livello del sistema operativo.

I vantaggi dei container

Containerization - Container concpet design
Containerization – Container concpet design

I principali vantaggi offerti dai container sono l’elevata disponibilità, la semplice portabilità e la capacità di personalizzazione degli ambienti di runtime. Nel loro complesso, queste qualità contribuiscono a dare forma al vantaggio più grande per un’azienda: la modernizzazione delle applicazioni, con lo sviluppo di nuove app cloud native e la migrazione in cloud delle soluzioni legacy.

Grazie a tecnologie open source come Docker e Kubernetes è ormai sempre più semplice rendere disponibili ed orchestrare i container per un ampio range di utilizzi, personalizzando ogni singolo dettaglio degli ambienti di esecuzione previsti per le varie applicazioni. In altri termini, Docker può essere ad esempio definito come un vero e proprio sistema operativo per container. Oltre a crearli e gestirli, consente di aggiungere notevoli funzioni rispetto ai container Linux standard, mantenendo il totale controllo del codice eseguito.

Un container può essere gestito come un singolo file, il che ne garantisce un’elevata portabilità, dal momento che può essere eseguito su più server o macchine virtuali, a condizione di avere installato la sua piattaforma di riferimento (container engine), come nel caso del già citato Docker.

Tali caratteristiche consentono inoltre di sfruttare tutti i vantaggi generici delle soluzioni in cloud, a cominciare dalla possibilità di pagare soltanto per ciò che si utilizza in termini di servizi, eliminando così qualsiasi costo iniziale di infrastruttura, unitamente alla scalabilità delle risorse in funzione dei carichi di lavoro previsti dalle varie applicazioni.

Container vs Virtual Machine: cosa sono le virtual machine

Virtual Machine - idea grafica del "posizionamento" funzionale delle virtual machine e del funzionamento della virtualizzazione
Virtual Machine – idea grafica del “posizionamento” funzionale delle virtual machine e del funzionamento della virtualizzazione

Le virtual machine sono ambienti virtuali in grado di emulare le caratteristiche di una macchina fisica, per via dell’assegnazione delle risorse hardware, del sistema operativo e delle applicazioni necessarie per garantirne il funzionamento. Utilizzando una tecnologia di virtualizzazione è possibile collocare su un server fisico più macchine virtuali, sfruttando in maniera più efficiente le risorse hardware a disposizione.

La virtualizzazione dei server consiste nell’astrazione delle risorse hardware di un server fisico, da ridistribuire in configurazioni virtuali dotate di processore, memoria, storage e rete che non coincidono pertanto con l’host fisico da cui derivano. Tale operazione viene gestita da una particolare categoria di software, definita hypervisor, o virtual machine monitor (VMM). Esistono due tipologie di hypervisor: di tipo 1 e di tipo 2.

L’hypervisor di tipo 1, o bare metal, agisce a tutti gli effetti da sistema operativo host, direttamente sopra l’hardware del server fisico. Sono particolarmente diffusi nell’ambito dei data center on-premise e in cloud. L’hypervisor di tipo 2 è invece un semplice software applicativo, installato su un sistema operativo host. Questa tipologia di VMM consente di avviare le macchine virtuali su qualsiasi macchina Windows, Linux o Mac, a patto che disponga delle risorse hardware necessarie per eseguirle.

Tra le principali applicazioni delle virtual machine annoveriamo il consolidamento dei server, il test dei sistemi hardware e software in fase di sviluppo, le operazioni di disaster recovery e l’emulazione di più sistemi operativi su un’unica macchina fisica.

I vantaggi delle virtual machine

Il parco dei vantaggi che l’impiego delle virtual machine può garantire ad un’azienda è estremamente ampio. Innanzitutto, è possibile ottenere notevoli risparmi di natura economica grazie al già citato consolidamento dei server, che equivale ad un minor dispendio in termini di risorse hardware per disporre delle macchine necessarie per svolgere le funzioni aziendali. Grazie all’astrazione delle risorse hardware di un server fisico è ad esempio possibile creare i sistemi VDI (Virtual Desktop Infrastructure), macchine virtuali dotate di un sistema operativo e delle applicazioni che ne consentono l’impiego da pc in remoto, disponibili in cloud attraverso l’accesso da un semplice browser web (o local app).

Il consolidamento delle risorse consente di utilizzare meno risorse hardware, riducendo di conseguenza anche i consumi energetici, risolvendo lo spreco delle risorse non utilizzate dai server fisici, a tutto vantaggio delle finanze aziendali e della qualità dell’ambiente.

Le macchine virtuali sono per design più sicure rispetto alle macchine fisiche, in quanto la loro esecuzione avviene in maniera isolata rispetto ai sistemi host. In caso di incidente, mitigare il danno è dunque più semplice. Nella maggior parte dei casi è sufficiente riavviare uno stato precedente della macchina virtuale infetta, di cui si ha totale certezza in termini di integrità.

Le virtual machine, in maniera simile a quanto avviene per i container, sono facilmente portabili, in quanto consistono in un semplice file immagine, che può essere montata da un hypervisor su differenti sistemi host. Ciò le rende estremamente flessibili in termini di creazione e duplicazione, oltre che di spostamento su vari server e data center.

In generale, le macchine virtuali, grazie alla loro rapida configurazione, consentono di eseguire test di sistema con maggior rapidità rispetto a dover svolgere una procedura analoga su un sistema fisico, il che favorisce l’approccio all’innovazione e le attività di ricerca e sviluppo. Il fatto di ridurre considerevolmente le operazioni sulle macchine fisiche si traduce inevitabilmente in un vantaggio per il reparto IT, chiamato a spendere meno risorse in termini di provisioning.

Le differenze tra le due soluzioni

Proseguendo l’analisi Container vs Virtual Machine, le argomentazioni dei precedenti paragrafi ci consentono di evidenziare le differenze che intercorrono tra container e virtual machine consapevoli del fatto che si tratti di tecnologie del tutto differenti, nate per risolvere esigenze del tutto differenti. Per rafforzare questo pur semplice concetto, possiamo ribadire che container e macchine virtuali sono il risultato di tecnologie di virtualizzazione che si collocano su livelli decisamente differenti a livello applicativo.

I container vengono virtualizzati al livello del sistema operativo ed hanno la sola finalità di garantire un ambiente di esecuzione per un’applicazione. Nulla meno, nulla più. Parliamo di unità nell’ordine di alcune decine di megabyte, mentre nel caso delle virtual machine l’ordine di grandezza si sposta inevitabilmente sulla scala dei gigabyte, in quanto occorre virtualizzare l’hardware di una macchina completa, che comprende anche il sistema operativo e tutte le applicazioni necessarie per rendere disponibile il sistema, oltre a tutte le risorse host necessarie per la pura virtualizzazione.

Cloud computing, Virtual Machine e Container - Immagine grafica che richiama l'importanza del Cloud e della virtualizzazione per abilitare il paradigma della containerizzazione delle applicazioni
Cloud computing, Virtual Machine e Container – Immagine grafica che richiama l’importanza del Cloud e della virtualizzazione per abilitare il paradigma della containerizzazione delle applicazioni

Se l’obiettivo fosse l’avviamento dell’istanza di un’applicazione, potremmo ovviamente farlo anche su una macchina virtuale, ma andremmo incontro ad un dispendio di risorse poco giustificato, in quanto un container, oltre ad essere concepito appositamente per svolgere tale funzione, sarebbe in grado di ottimizzare drasticamente le risorse necessarie per l’esecuzione. Oltre a collocarsi molto più in alto rispetto all’hardware e al kernel del server, i container condividono infatti anche lo stesso sistema operativo host, pur mantenendo la totale portabilità grazie a tecnologie come Docker. In tal senso, l’unica discriminante va ricercata nell’architettura dei sistemi host, in quanto i server dotati di processori ARM lavorano in maniera totalmente differente rispetto a quelli basati sull’architettura X86.

La qualità principale dei container è l’agilità, infatti risultano perfetti per lo sviluppo delle applicazioni moderne, secondo i dettami delle metodologie DevOps, mentre le virtual machine si distinguono dal punto di vista della flessibilità, rivolgendo l’occhio ad applicazioni più onerose in termini di risorse rispetto a quelle svolte dal container.

In ogni caso, non si tratta di dover scegliere, ma di utilizzare di volta in volta la tecnologia più idonea rispetto alla tipologia e al carico di lavoro da eseguire. Grazie alle moderne tecnologie di orchestrazione, è infatti possibile gestire in maniera simultanea l’utilizzo dei container e delle macchine virtuali anche in infrastrutture IT estremamente complesse.

Serverless CTA