Macchine virtuali
Una macchina virtuale (VM) emula un computer fisico. Viene fornito con il proprio sistema operativo completo e allocazione delle risorse. La macchina host fornisce le risorse fisiche necessarie ma l'ambiente virtualizzato funziona come una macchina indipendente con i propri adattatori BIOS, CPU, archiviazione e rete. Anche se oggi VMware è più famoso per la moderna tecnologia VM, l'idea della macchina virtuale è in circolazione da molto tempo. Nel 1965, IBM Yorktown Research Center aveva bisogno di un modo per misurare l'efficacia di diverse idee di informatica. Il team di ricerca voleva passare da un numero di funzionalità e misurare i risultati. Il team ha ideato uno schema per dividere una singola macchina in partizioni più piccole. Le partizioni più piccole gestirebbero le proprie risorse. Sarebbero piccole macchine virtuali. L'idea di VM ha avuto successo. IBM ha iniziato a creare sistemi operativi basati su macchine virtuali. IBM System 370 (S/370) e IBM System 390 (S/390), entrambi i sistemi basati su VM/ESA IBM, sono diventati popolari tra le aziende e le università perché hanno permesso alle istituzioni di consentire ai loro utenti di condividere le risorse di elaborazione senza influire reciproche ambienti reciproci. L'idea ha anche contribuito a creare il sistema operativo UNIX e il linguaggio di programmazione Java.
Le moderne macchine virtuali vengono eseguite su hypervisor. Gli hypervisor sono il software, il firmware o l'hardware responsabili della creazione e dell'esecuzione delle VM. Ci sono molti hypervisor disponibili sul mercato. KVM, Red Hat Enterprise Virtualization (RHEV), XenServer, Microsoft Hyper-V e VMware vSphere / ESXi sono i giocatori di spicco. Oggi le macchine virtuali hanno stimolato la crescita del cloud computing. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean e altre aziende cloud dipendono fortemente dalla tecnologia di virtualizzazione.
Contenitori
I contenitori creano virtualizzazione a livello di sistema operativo. Funzionano come un pacchetto software eseguibile che isola le applicazioni dall'ambiente circostante. All'interno del pacchetto, un contenitore ha le proprietà necessarie come codice, runtime, librerie di sistema e strumenti per mantenere l'applicazione separata dall'influenza esterna. Funziona sul sistema operativo della macchina host. I contenitori condividono librerie e binari quando possibile e separa solo le risorse assolutamente necessarie.
Nel 1979, le chiamate di sistema "Chroot" potrebbero isolare i processi per UNIX. Era il primo seme dell'idea del contenitore. La tecnologia dei primi container è iniziata con le carceri FreeBSD nel 2000. Un anno dopo, Linux Vserver ha permesso a più macchine Linux di funzionare su un singolo host. Nel 2004, Oracle Solaris Zones ha fornito funzionalità simili alle carceri di FreeBSD. Nel 2006-2007, Google ha sviluppato il contenitore di processo e poi lo ha unito nel kernel Linux. I contenitori Linux (LXC) sono stati creati nel 2008 per sfruttare i cgroup Linux e lo spazio per i nomi. Nel 2013, Docker è stato creato attraverso la combinazione di idee LXC. Ha anche aggiunto strumenti per costruire e recuperare facilmente immagini di contenitori.
Docker
Docker è una tecnologia container open source basata su LXC. È popolare perché rende più facile creare, eseguire e distribuire applicazioni in un ambiente autonomo. Docker non crea un intero sistema operativo come una macchina virtuale. Invece, utilizza il kernel del sistema operativo dell'host e crea virtualizzazione solo per l'applicazione e le librerie necessarie. Questo approccio lo rende molto più leggero delle macchine virtuali.
I contenitori Docker sono creati da Docker Immagini. Le immagini Docker possono essere pensate come istantanee di macchine. Gli utenti possono facilmente avviare un contenitore da un'immagine. Le immagini vengono create come livelli. Supponiamo che un team di sviluppo abbia bisogno di un contenitore con Apache e Python installato su una determinata versione di Linux. Uno sviluppatore può scaricare un'immagine Linux da Docker Hub, avviare un contenitore, installare Apache e Python, creare una nuova immagine dal contenitore e condividere quell'immagine. Altri membri del team non devono passare attraverso la stessa installazione. Aiuta a mantenere un ambiente coerente per tutti.
Docker supporta anche applicazioni di script e multi-container. Gli utenti possono utilizzare un Dockerfile basato sul testo per definire i requisiti e quindi creare contenitori tramite Docker Commy. L'esempio sopra di creazione di un server Apache/Python/Linux può anche essere ottenuto attraverso questo processo. Con Docker Compose, i team devono solo condividere Dockerfile per creare lo stesso ambiente. Docker ha strumenti più specializzati per attività complesse. Docker Swarm aiuta a orchestrare le distribuzioni Docker su larga scala.
Vagabondo
Vagrant è uno strumento open source che aiuta a creare e mantenere macchine virtuali. Funziona con VirtualBox, VMware, AWS e altri provider. Vagrant semplifica la gestione delle macchine virtuali. Utilizzando un file vagrant, gli sviluppatori possono definire le proprietà della macchina virtuale come il sistema operativo, le installazioni del software e altri. Il VagrantFile basato su testo può essere condiviso tramite il controllo della versione e la macchina necessaria può essere avviata utilizzando un semplice comando come "Vagrant Up". Gli utenti possono quindi accedere alla macchina come un server fisico.
Quando usare Docker o Vagrant
L'uso di Docker o Vagrant si riduce spesso alla necessità di contenitori o macchine virtuali. Ecco alcune somiglianze e differenze tra Docker e Vagrant in termini di utilizzo. Sia Docker che Vagrant hanno ambienti facilmente configurabili che possono essere controllati attraverso gli script. Sono anche amichevoli al cloud. Vagrant Virtual Machine fornisce separazione di sicurezza basata sul kernel. La separazione rende le macchine virtuali meno rischiose dei contenitori. Ma i contenitori Docker sono molto leggeri. Usano meno risorse e sono veloci in esecuzione. Quindi puoi avere molti più contenitori su un singolo host delle macchine virtuali. Inoltre, l'avvio e l'arresto dei contenitori è quasi istantaneo rispetto alle VM. Le macchine virtuali passano attraverso il BIOS completo e il ciclo di avvio del sistema operativo.
La separazione di sicurezza di una macchina virtuale rende un guasto VM più autonomo. D'altra parte, i container condividono risorse e possono avere un effetto crash a cascata. Inoltre, le minacce alla sicurezza dei container possono raggiungere il kernel del sistema operativo host. Tuttavia, la velocità di esecuzione e l'impronta leggera dei contenitori rendono Docker molto attraente per lo sviluppo. Con un'architettura a microservizio, i contenitori possono funzionare bene perché i fattori di rischio vengono mitigati attraverso l'uso di microservizi. Inoltre, vengono fatti progressi per rendere Docker più sicuro ogni giorno.
Dal punto di vista del caso d'uso pratico, sia Docker che Vagrant sono utilizzati solo da professionisti IT e o sviluppatori, non sono utilizzati da consumatori generali o tecnologie informatiche. In specifico vaga. Docker viene spesso utilizzato frequentemente nelle distribuzioni di produzione di applicazioni per eseguire server Web o applicazioni che sono apolidi e facilmente uccisi e ricreati su qualsiasi host o IP. Quindi Docker è probabilmente molto più un caso d'uso comune.
Docker e Vagrant sono entrambe tecnologie utili che possono aiutare gli sviluppatori a migliorare la loro produttività. Se la sicurezza delle applicazioni è un problema, l'utilizzo di Vagrant e VMS potrebbe essere una buona idea. Per un rapido sviluppo e condivisione, Docker offre un vantaggio. La maggior parte dei team utilizza entrambi per eseguire un'operazione regolare.