26 lines
2.8 KiB
Markdown
26 lines
2.8 KiB
Markdown
# Virtual Machine vs Container
|
|
|
|
## Virtual Machine
|
|
|
|
Una VM è un ambiente di esecuzione isolato che emula un sistema operativo completo Questo significa che ogni VM ha il proprio kernel, sistema operativo, librerie e applicazioni. Le VM sono utilizzate per isolare completamente i processi e le risorse, fornendo un ambiente di esecuzione indipendente e sicuro.
|
|
|
|
Nel paradigma delle Virtual Machine, un OS completo, dotato del proprio kernel, funge da `hypervisor` (HV). Questo consente di eseguire più VM, ognuna con il proprio sistema operativo e i propri servizi in esecuzione. Ogni VM opera come un'istanza isolata, garantendo un *elevato livello di separazione*.
|
|
|
|
Tuttavia, questa architettura presenta un'importante limitazione: ogni VM interagisce con l'hardware virtualizzato attraverso l'HV, che media la comunicazione con l'hardware fisico sottostante. Questo processo di mediazione introduce un *overhead* significativo, che rappresenta una delle principali cause di perdita di performance.
|
|
|
|
## Container
|
|
|
|
Il paradigma dei container si propone di affrontare le problematiche di overhead e performance associate alle VM. In questo modello, l'OS host non funge da hypervisor, ma esegue un `container engine`, che costituisce uno strato sottile di isolamento tra le applicazioni in esecuzione all'interno dei container e il sistema operativo sottostante.
|
|
|
|
A differenza delle VM, i container non eseguono un sistema operativo completo. Non possiedono un proprio kernel, poiché non gestiscono direttamente la comunicazione con l'hardware; piuttosto, *sfruttano il kernel del sistema host*. Le richieste di risorse hardware da parte dei container vengono, tramite il container engine, inoltrate direttamente al kernel dell'OS host, riducendo così l'overhead e migliorando le performance complessive.
|
|
|
|
## Vantaggi e limitazioni dei container
|
|
|
|
Rispetto alle VM, i container offrono prestazioni superiori e una maggiore flessibilità. È possibile modificare le risorse allocate a un container durante la sua esecuzione, senza necessità di spegnere il container stesso, evitando così downtime. Al contrario, le VM, simili a hardware reale, richiedono un riavvio per apportare modifiche alle risorse allocate.
|
|
|
|
Tuttavia, i container presentano anche delle *limitazioni, in particolare riguardo all'isolamento*. Sebbene offrano un certo livello di separazione, l'isolamento dei container è più debole rispetto a quello delle VM, poiché avviene solo a livello di processo e non di risorse. I container sono, infatti, *processi in esecuzione* sul sistema host e, a differenza delle applicazioni tradizionali, hanno accesso limitato alle risorse.
|
|
|
|
Un programma in esecuzione all'interno di un container è quindi *isolato* nel senso che può accedere esclusivamente alle risorse specificamente assegnate a quel container.
|
|
|
|

|