Condividi tramite


Contenitori e macchine virtuali

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

Questo argomento illustra alcune delle principali analogie e differenze tra contenitori e macchine virtuali e quando è consigliabile usarli. I contenitori e le macchine virtuali hanno infatti i propri usi, molte distribuzioni di contenitori usano macchine virtuali come sistema operativo host anziché essere eseguite direttamente nell'hardware, soprattutto quando si eseguono contenitori nel cloud.

Per una panoramica dei contenitori, vedere Windows e contenitori.

Architettura dei contenitori

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

diagramma dell'architettura che mostra come vengono eseguiti i contenitori sul kernel

Architettura delle macchine virtuali

A differenza dei contenitori, le macchine virtuali eseguono un sistema operativo completo, incluso il proprio 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

Contenitori e macchine virtuali

La tabella seguente illustra alcune analogie e differenze di queste tecnologie complementari.

Caratteristica Macchina virtuale Contenitore
Isolamento Fornisce l'isolamento completo dal sistema operativo host e da altre macchine virtuali. Ciò è utile quando un limite di sicurezza forte è fondamentale, ad esempio l'hosting di app provenienti da aziende concorrenti nello stesso server o cluster. In genere fornisce un isolamento leggero dall'host e da altri contenitori, ma non fornisce un limite di sicurezza sicuro come una macchina virtuale. È possibile aumentare la sicurezza usando Hyper-V modalità di isolamento per isolare ogni contenitore in una macchina virtuale leggera.
Sistema operativo Esegue un sistema operativo completo, incluso il kernel, richiedendo così più risorse di sistema (CPU, memoria e archiviazione). Esegue la parte della modalità utente di un sistema operativo e può essere personalizzata in modo da contenere solo i servizi necessari per l'app, usando un minor numero di risorse di sistema.
Compatibilità ospite Esegue solo qualsiasi sistema operativo all'interno della macchina virtuale. Viene eseguito nella stessa versione del sistema operativo dell'host (Hyper-V isolamento consente di eseguire versioni precedenti dello stesso sistema operativo in un ambiente di macchine virtuali leggero).
Implementazione Distribuire singole macchine virtuali usando Windows Admin Center o Hyper-V Manager; distribuire più macchine virtuali usando PowerShell o System Center Virtual Machine Manager. Distribuire singoli contenitori usando Docker tramite la riga di comando; distribuire più contenitori usando un agente di orchestrazione, ad esempio il servizio Azure Kubernetes.
Aggiornamenti e aggiornamenti del sistema operativo Scaricare e installare gli aggiornamenti del sistema operativo in ogni macchina virtuale. L'installazione di una nuova versione del sistema operativo richiede l'aggiornamento o la creazione di una macchina virtuale completamente nuova. Questo può richiedere molto tempo, soprattutto se si dispone di molte macchine virtuali. L'aggiornamento o l'aggiornamento dei file del sistema operativo all'interno di un contenitore è lo stesso:
  1. Modificare il file di compilazione dell'immagine del contenitore (noto come Dockerfile) in modo che punti alla versione più recente dell'immagine di base di Windows.
  2. Ricompila l'immagine del contenitore con questa nuova immagine di base.
  3. Caricare l'immagine del contenitore nel registro dei contenitori.
  4. Ridistribuire usando un agente di orchestrazione.
    L'agente di orchestrazione offre una potente automazione per eseguire questa operazione su larga scala. Per informazioni dettagliate, vedere Esercitazione: Aggiornare un'applicazione nel servizio Azure Kubernetes.
Archiviazione permanente 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. 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 delle macchine virtuali sposta le macchine virtuali in esecuzione in altri server in un cluster di failover. I contenitori stessi non si spostano; Un agente di orchestrazione può invece avviare o arrestare automaticamente i contenitori nei nodi del cluster per gestire le modifiche nel carico e nella disponibilità.
Tolleranza ai guasti Le macchine virtuali possono eseguire il failover in un altro server in un cluster, con il riavvio del sistema operativo della macchina virtuale nel nuovo server. Se un nodo del cluster ha esito negativo, tutti i contenitori in esecuzione su di esso vengono rapidamente ricreati dall'agente di orchestrazione in un altro nodo del cluster.
Networking Usa schede di rete virtuali. Usa una visualizzazione isolata di una scheda di rete virtuale, fornendo un po' meno di virtualizzazione, ovvero il firewall dell'host viene condiviso con i contenitori, mentre si usano meno risorse. Per altre informazioni, vedere rete dei contenitori windows.