Files
learning/docker/001-intro.md
2025-08-02 22:05:55 +02:00

2.8 KiB

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.

container-vm