GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Contenitori vs macchine virtuali (VM):qual è la differenza?

Introduzione

Entrambe le macchine virtuali e contenitori vengono utilizzati per creare ambienti virtuali isolati per lo sviluppo e il test di applicazioni o software. La domanda è come differiscono.

Questo articolo esamina i due concetti per comprendere la differenza tra un contenitore e una macchina virtuale. Definisce contenitori e macchine virtuali separatamente, nonché affiancati, per vedere cosa distingue uno dall'altro.

Cosa sono le macchine virtuali (VM)?

Una macchina virtuale (VM) è un sistema operativo che condivide le risorse fisiche di un server. È un guest sull'hardware dell'host, motivo per cui è anche chiamato macchina ospite .

Ci sono diversi livelli che compongono una macchina virtuale. Il livello che abilita la virtualizzazione è l'hypervisor . Un hypervisor è un software che virtualizza il server.

Come funziona una macchina virtuale

Tutto il necessario per eseguire un'app è contenuto all'interno della macchina virtuale:l'hardware virtualizzato, un sistema operativo e tutti i file binari e le librerie richiesti. Pertanto, le macchine virtuali hanno la propria infrastruttura e sono autonome.

Ogni macchina virtuale è completamente isolata dal sistema operativo host. Inoltre, richiede il proprio sistema operativo, che può essere diverso dal sistema operativo dell'host. Ognuno ha i propri binari, librerie e applicazioni.

Monitoraggio macchina virtuale (VMM) :un altro nome per l'hypervisor

Macchina host :l'hardware su cui è installata la VM

Ospite macchina :un altro nome per la VM

Macchina virtuale:PRO

Le macchine virtuali riducono le spese . Invece di eseguire un'applicazione su un singolo server, una macchina virtuale consente di utilizzare una risorsa fisica per svolgere il lavoro di molte. Pertanto, non è necessario acquistare, mantenere e archiviare enumerabili stack di server.

Poiché esiste una macchina host, ti consente di gestire in modo efficiente tutti gli ambienti virtuali con la potenza centralizzata dell'hypervisor. Questi sistemi sono completamente separati l'uno dall'altro, il che significa che puoi installare più ambienti di sistema .

Ancora più importante, una macchina virtuale è isolata dal sistema operativo host ed è sicura luogo per la sperimentazione e lo sviluppo di applicazioni.

Macchina virtuale:CONTRO

Le macchine virtuali possono occupare molte risorse di sistema della macchina host, essendo di dimensioni di molti GB. Eseguire una singola app su un server virtuale significa eseguire una copia di un sistema operativo e una copia virtuale di tutto l'hardware necessario per l'esecuzione del sistema. Questo aggiunge rapidamente molti cicli di RAM e CPU.

Anche il processo di trasferimento di un'app in esecuzione su una macchina virtuale può essere complicato poiché è sempre collegato al sistema operativo. Quindi, devi migrare l'app e il sistema operativo con essa. Inoltre, durante la creazione di una macchina virtuale, l'hypervisor alloca risorse hardware dedicate alla macchina virtuale.

Una macchina virtuale utilizza raramente tutte le risorse disponibili che possono rendere difficile la pianificazione e la distribuzione. È comunque economico rispetto all'esecuzione di computer effettivi separati.

Fornitori di macchine virtuali popolari:

  • VMware vSphere
  • VirtualBox
  • Zen
  • Hyper-V
  • KVM

Cos'è un contenitore?

Un contenitore è un ambiente che esegue un'applicazione che non dipende dal sistema operativo. Isola l'app dall'host virtualizzandola. Ciò consente agli utenti di creare più carichi di lavoro su una singola istanza del sistema operativo.

Il kernel del sistema operativo host soddisfa le esigenze di esecuzione di diverse funzioni di un'app, separate in contenitori. Ogni contenitore esegue attività isolate. Non può danneggiare il computer host né entrare in conflitto con altre app in esecuzione in contenitori separati.

Come funzionano i container?

Quando lavori all'interno di un container, puoi creare un modello di un ambiente di cui hai bisogno. Il contenitore esegue essenzialmente uno snapshot del sistema in un determinato momento, fornendo coerenza nel comportamento di un'app.

Il contenitore condivide il kernel dell'host per eseguire tutte le singole app all'interno del contenitore. Gli unici elementi richiesti da ogni contenitore sono bin, librerie e altri componenti di runtime.

Contenitore:PRO

I contenitori possono essere piccoli fino a 10 MB e puoi facilmente limitare la loro memoria e l'utilizzo della CPU. Questo rende i contenitori straordinariamente leggeri e avvio rapido al contrario della distribuzione di macchine virtuali, in cui è necessario distribuire l'intero sistema operativo.
A causa delle loro dimensioni, puoi ridimensionare rapidamente dentro e fuori dai contenitori e aggiungi contenitori identici.

Inoltre, i container sono eccellenti per integrazione continua e distribuzione continua (CI/CD). Favoriscono lo sviluppo collaborativo distribuendo e unendo le immagini tra gli sviluppatori.

Contenitore:CONTRO

Un contenitore utilizza il kernel del sistema operativo host e ha dipendenze dal sistema operativo. Pertanto, i contenitori possono differire dal sistema operativo sottostante in base alla dipendenza, ma non al tipo. Il kernel dell'host limita l'uso di altri sistemi operativi .

I container continuano a non offrire la stessa sicurezza e stabilità che le VM possono. Poiché condividono il kernel dell'host, non possono essere isolati come una macchina virtuale. Di conseguenza, i container sono isolati a livello di processo e un container può influire sugli altri compromettendo la stabilità del kernel.

Inoltre, una volta che un container ha svolto il suo compito, si spegne, cancellando tutti i dati al suo interno. Se si desidera che i dati rimangano sul server host, è necessario salvarli utilizzando i volumi di dati. Ciò richiede configurazione e provisioning manuali sull'host.

Fornitori di contenitori popolari:

  • Docker
  • AWS
  • LXD
  • Contenitori Java
  • Contenitori Hyper-V
  • Contenitori di Windows Server

Come scegliere VM e container

La decisione se utilizzare macchine virtuali o container dipende dal lavoro che vuoi che il tuo ambiente virtuale esegua.

Le macchine virtuali sono una soluzione migliore se devi:

  1. Gestire una varietà di sistemi operativi
  2. Gestisci più app su un unico server
  3. Esegui un'app che richiede tutte le risorse e le funzionalità di un sistema operativo
  4. Garantire il completo isolamento e sicurezza

I contenitori sono adatti se è necessario:

  1. Massimizza il numero di app in esecuzione su un server
  2. Distribuisci più istanze di una singola applicazione
  3. Disponi di un sistema leggero che si avvia rapidamente
  4. Sviluppare un'applicazione che funzioni su qualsiasi infrastruttura sottostante

Le macchine virtuali sono comunemente utilizzate per applicazioni esigenti, infrastruttura di rete e app che consumeranno la maggior parte delle risorse della VM.

I contenitori sono comunemente usati per web, applicazioni e servizi di memorizzazione nella cache, demoni di rete e piccoli database.


Ubuntu
  1. Come rimuovere le macchine virtuali basate su KVM su Redhat Linux

  2. Qual è la differenza tra i metodi Tasksel e quelli normali?

  3. Come accedere a Internet da una macchina virtuale in Gnome Box?

  4. Hosting cloud e hosting VPS:qual è la differenza?

  5. Come avviare/arrestare macchine virtuali in RedHat Virtualization

Failover vs. Failback:qual è la differenza

Come trovare l'indirizzo IP di una macchina virtuale KVM

Come creare una macchina virtuale in KVM dalla riga di comando

Come creare macchine virtuali in KVM usando Virt-Manager

Come installare macchine virtuali ottimizzate e configurate per l'ambiente Red Hat Virtualization

Come migrare le macchine virtuali da un host all'altro nell'ambiente di virtualizzazione di Red Hat