Una macchina virtuale (VM) è un termine piuttosto generico per molte tecnologie di virtualizzazione.
Esistono molte varianti delle tecnologie di virtualizzazione, ma le principali sono:
- Virtualizzazione a livello hardware
- Virtualizzazione a livello di sistema operativo
qemu-kvm
e VMWare
sono esempi del primo. Impiegano un hypervisor per gestire gli ambienti virtuali in cui è in esecuzione un sistema operativo completo. Ad esempio, su un qemu-kvm
sistema puoi avere una VM con FreeBSD, un'altra con Windows e un'altra con Linux.
Le macchine virtuali create da queste tecnologie si comportano come singoli computer isolati per il guest. Questi hanno una CPU virtuale, RAM, NIC, grafica ecc. Che l'ospite ritiene sia l'articolo originale. Per questo motivo, molti sistemi operativi diversi possono essere installati sulle macchine virtuali e funzionano "out of the box" senza modifiche necessarie.
Sebbene questo sia molto conveniente, in quanto molti sistemi operativi verranno installati senza troppi sforzi, ha uno svantaggio in quanto l'hypervisor deve simulare tutto l'hardware, il che può rallentare le cose. Un'alternativa è l'hardware para-virtualizzato, in cui un nuovo dispositivo virtuale e driver sono sviluppati per il guest progettato per le prestazioni in un ambiente virtuale. qemu-kvm
fornire la virtio
gamma di dispositivi e driver per questo. Un aspetto negativo di questo è che il sistema operativo guest deve essere supportato; ma se supportati, i vantaggi in termini di prestazioni sono eccezionali.
lxc
è un esempio di virtualizzazione a livello di sistema operativo o container. In questo sistema, è installato un solo kernel: il kernel host. Ogni contenitore è semplicemente un isolamento dei processi dell'utente. Ad esempio, un server Web (ad esempio apache
) è installato in un contenitore. Per quanto riguarda quel web server, l'unico server installato è esso stesso. Un altro contenitore potrebbe eseguire un server FTP. Quel server FTP non è a conoscenza dell'installazione del web server - solo è proprio. Un altro contenitore può contenere l'installazione completa dell'utente di una distro Linux (purché tale distro sia in grado di funzionare con il kernel del sistema host).
Tuttavia, non ci sono installazioni separate del sistema operativo quando si usano i container - solo istanze isolate di servizi per l'utente. Per questo motivo, non è possibile installare piattaforme diverse in un contenitore, senza Windows su Linux.
I contenitori vengono generalmente creati utilizzando a chroot
. Questo crea una radice privata ( /
) separata per un processo con cui lavorare. Creando molte singole radici private, i processi (web server o una distribuzione Linux, ecc.) Vengono eseguiti nel proprio file system isolato. Tecniche più avanzate, come l' cgroups
isolamento di altre risorse come rete e RAM.
Ci sono pro e contro di entrambi e molti dibattiti di lunga data su quale sia il migliore.
- I contenitori sono più leggeri, in quanto non è installato un sistema operativo completo per ciascuno; che è il caso degli hypervisor. Possono quindi funzionare su hardware con specifiche inferiori. Tuttavia, possono eseguire solo guest Linux (su host Linux). Inoltre, poiché condividono il kernel, esiste la possibilità che un contenitore compromesso possa influire su un altro.
- Gli hypervisor sono più sicuri e possono eseguire diversi sistemi operativi poiché in ciascuna VM è installato un sistema operativo completo e i guest non sono a conoscenza di altre VM. Tuttavia, questo utilizza più risorse sull'host, che deve essere relativamente potente.