Condividi tramite


Confronto tra contenitori e macchine virtuali

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016

In questo argomento vengono illustrate alcune delle principali analogie e differenze tra contenitori e macchine virtuali (VM) e vengono illustrati i possibili scenari di utilizzo. I contenitori e le macchine virtuali hanno ciascuno un uso specifico. Molte distribuzioni di contenitori usano infatti macchine virtuali come sistema operativo host anziché essere eseguite direttamente sull'hardware, soprattutto nel caso di contenitori nel cloud.

Per una panoramica dei contenitori, vedere Windows e i contenitori.

Architettura dei contenitori

Un contenitore è un silo isolato e leggero per l'esecuzione di un'applicazione sul sistema operativo host. I contenitori si basano sul kernel del sistema operativo host, che può essere considerato come lo scheletro del sistema operativo, e contengono solo app e alcune API e servizi leggeri del servizio operativo che vengono eseguiti in modalità utente, come illustrato in questo diagramma.

Diagramma dell'architettura che mostra la modalità di esecuzione dei contenitori sopra il kernel

Architettura di macchina virtuale

A differenza dei contenitori, le macchine virtuali eseguono un sistema operativo completo, incluso il relativo kernel, come illustrato in questo diagramma.

Diagramma dell'architettura che mostra come le macchine virtuali eseguono un sistema operativo completo accanto al sistema operativo host

Confronto tra contenitori e macchine virtuali

Nella tabella seguente vengono illustrate alcune delle analogie e differenze di queste tecnologie complementari.

Feature Macchina virtuale Contenitore
Isolamento Fornisce isolamento completo dal sistema operativo host e da altre macchine virtuali. È utile quando è essenziale garantire un limite di sicurezza avanzato, come nel caso dell'hosting di app di società concorrenti nello stesso server o cluster. In genere fornisce un isolamento leggero dall'host e da altri contenitori, ma non offre un limite di sicurezza avanzato di livello analogo a quello delle macchine virtuali. Per incrementare la sicurezza, è possibile usare la modalità di isolamento Hyper-V per isolare ogni contenitore in una macchina virtuale leggera.
Sistema operativo Esegue un sistema operativo completo, incluso il kernel, di conseguenza richiede più risorse di sistema (CPU, memoria e spazio di archiviazione). Esegue la parte della modalità utente di un sistema operativo e può essere adattato in modo da contenere solo i servizi necessari per l'app, usando un minor numero di risorse di sistema.
Compatibilità guest Viene eseguito praticamente su qualsiasi sistema operativo all'interno della macchina virtuale. Viene eseguito nella stessa versione del sistema operativo dell'host; l'isolamento Hyper-V consente di eseguire versioni precedenti dello stesso sistema operativo in un ambiente di macchina virtuale leggero.
Distribuzione Consente di distribuire singole macchine virtuali usando l'interfaccia di amministrazione di Windows o la console di gestione di Hyper-V, nonché di distribuire più macchine virtuali con PowerShell o System Center Virtual Machine Manager. Consente di distribuire singoli contenitori con Docker tramite la riga di comando, nonché di distribuire più contenitori usando un agente di orchestrazione, ad esempio il servizio Azure Kubernetes.
Aggiornamenti del sistema operativo Consente di scaricare e installare gli aggiornamenti del sistema operativo in ogni macchina virtuale. Per l'installazione di una nuova versione del sistema operativo è necessario aggiornare o spesso creare una macchina virtuale completamente nuova. Questa operazione può richiedere molto tempo, soprattutto se il numero di macchine virtuali esistenti è elevato. La procedura di aggiornamento dei file del sistema operativo all'interno di un contenitore è la stessa:
  1. Modificare il file di compilazione dell'immagine contenitore (noto come Dockerfile) in modo che punti alla versione più recente dell'immagine di base di Windows.
  2. Ricreare l'immagine contenitore con questa nuova immagine di base.
  3. Eseguire il push dell'immagine contenitore nel registro contenitori.
  4. Eseguire nuovamente la distribuzione con un agente di orchestrazione.
    L'agente di orchestrazione offre potenti funzionalità di automazione per eseguire questa operazione su larga scala. Per maggiori dettagli, vedere Esercitazione: Aggiornare un'applicazione nel servizio Azure Kubernetes.
Archiviazione permanente Consente di usare un disco rigido virtuale (VHD) per l'archiviazione locale per una singola macchina virtuale o una condivisione file SMB per l'archiviazione condivisa da più server. Consente di usare dischi di Azure per l'archiviazione locale per un singolo nodo o File di Azure (condivisioni SMB) per l'archiviazione condivisa da più nodi o server.
Bilanciamento del carico Il bilanciamento del carico della macchina virtuale consente di spostare le macchine virtuali in esecuzione in altri server di un cluster di failover. I contenitori non vengono spostati di per sé, ma un agente di orchestrazione può avviare o arrestare automaticamente i contenitori nei nodi del cluster per gestire le variazioni a livello di carico e disponibilità.
Tolleranza di errore È possibile eseguire il failover delle macchine virtuali in un altro server in un cluster, in modo che il sistema operativo della macchina virtuale venga riavviato nel nuovo server. In caso di errore di un nodo del cluster, tutti i contenitori in esecuzione in tale nodo vengono ricreati rapidamente dall'agente di orchestrazione in un altro nodo del cluster.
Funzionalità di rete Consente di usare schede di rete virtuali. Usa una visualizzazione isolata di una scheda di rete virtuale, offrendo una minore virtualizzazione perché il firewall dell'host viene condiviso con i contenitori, riducendo al contempo il numero di risorse usate. Per altre informazioni, vedere Rete di contenitori di Windows.