Macchine Virtuali e Container
Premessa
Cercherò di descrivere le due tecnologie in maniera non troppo tecnica e darò per scontato alcune conoscenze. Chiaramente parliamo di virtualizzazione e quale sia la tecnologia migliore per l’obiettivo per dobbiamo raggiungere.
Macchina virtuale
La macchina virtuale (Virtual machine o VM) è un tipo di virtualizzazione presente da moltissimi anni. Di fatto una macchina virtuale è un nuovo sistema operativo che ha nascita, vita e morte indipendente dal sistema che virtualizza. In questo scenario saremo costretti a definire in anticipo le risorse destinate alla VM (RAM, Vcpu, disco, etc). La macchina virtuale ha accesso diretto all’hardware e potrà disporre delle risorse assegnate.
Un esempio di questa tecnologia è sicuramente Virtualbox. Un sistema versatile, gratuito e multipiattaforma. E’ possibile installarlo su Linux, Windows e MacOS con pochi semplicissimi click. Per i puristi del settore non possiamo non citare KVM e XEN che insieme a VMWare offrono soluzioni più professionali.
Container
Il container è un tipo di virtualizzazione lite e permette di avere separazione applicativa senza dover destinare risorse specifiche al suo funzionamento. Il container non ha accesso diretto all’hardware e molto spesso non ha un vero e proprio sistema operativo.
Ad oggi il più utilizzato (forse per moda) è docker ma non possiamo di certo dimenticare LXC (Linux container) e OpenVZ.
Quando, come e perchè
La domanda che ogni giorno mi sottopongono è: “… Faccio una VM o un container?” La verità è che non c’è una risposta universale a questa domanda. Dobbiamo analizzare caso per caso quale sia il risultato che vogliamo ottenere.
Container pro e contro
- Non affamato di risorse
- Installazione veloce
- Tempi di avvio ridotti (secondi o millisecondi)
- Isolamento a livello di processo
- Allocazione dinamica delle risorse
- Aggiornamenti semplici e veloci
- Condivisione S.O.
Virtual Machine pro e contro
- Affamato di risorse
- Installazione lenta (intero S.O.)
- Tempi di avvio lunghi (boot completo S.O. - minuti)
- Isolamento completo
- Allocazione statica delle risorse (possibile spreco)
- Aggiornamenti standard
- Ogni VM ha il suo S.O.
Conclusioni
In linea di massima io adotto questo approccio. Se si tratta di dover virtualizzare per avere a disposizione una singola applicazione prediligo i contaniers mentre se l’infrastruttura da ottenre è più complessa preferirò le macchine virtuali. A ogni modo se devo dare supporto a uno sviluppatore la mia scelta ricade quasi sempre su un container in quanto la gestione, aggiornamento e avvio è molto più immediato.
Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.
Risorse: