Perché dovrei usare Vagrant invece di VirtualBox?


230

Uso VirtualBox da molti anni per creare un ambiente di sviluppo.

Molti dei miei colleghi stanno parlando di Vagrant e molte persone sembrano molto entusiaste ma non riesco proprio a coglierne i benefici .. mi sembra che sia una serie di nuovi comandi da imparare per fare lo stesso cose che ho fatto con Virtualbox.

Con VirtualBox, installo e configuro perfettamente un ambiente, quindi posso impacchettarlo come OVA o altro e condividerlo con altri utenti dell'ufficio. Puoi creare un'istantanea in VirtualBox se qualcosa va storto.

Puppet e chef non fanno davvero parte di Vagrant, sono le loro cose, no?

Quindi sì, quali vantaggi offre Vagrant su VirtualBox da solo?


11
Due anni dopo sto usando Vagrant ogni giorno per lo sviluppo - è fantastico! Il mio team lo utilizza e ha risolto i nostri problemi di ambiente di sviluppo.
John Hunt,

1
ipotizzato qui: se non hai mai avuto problemi a configurare i server PXE, conosci VBoxManage a memoria, sai come configurare nfs in meno di un minuto ecc. e ti piace anche gestire direttamente le catene di build .. non ha quasi senso. Il valore aumenta con ogni parte del puzzle che ti manca. L'uso diffuso non proviene dall'integrazione fantoccio ma perché le persone potrebbero bucare le immagini infestate da Internet direttamente. non importa cosa ti dicono.
Florian Heigl,

2
3,5 anni dopo e ora uso la finestra mobile ogni giorno per lo sviluppo. È buono, ma una bestia diversa dal vagabondo ... A seconda delle tue esigenze, credo che il vagabondo sia ancora una piattaforma di sviluppo migliore per i team - è molto più facile lavorare con.
John Hunt,

5
4 anni dopo e ho scoperto che la finestra mobile è terribile. Lunga vita a Vagrant.
John Hunt,

3
i tuoi commenti stanno rendendo così molto più divertente
Florian Heigl,

Risposte:


151

Questa è una grande domanda, quindi la suddividerò in tre sezioni.

Vagabondo

Vagrant viene utilizzato per configurare una o più macchine virtuali tramite:

  • Importazione di immagini prefabbricate (chiamate "caselle")
  • Impostazione delle impostazioni specifiche della VM (indirizzo IP, nomi host, port forwarding, memoria, ecc.)
  • Esecuzione di software di provisioning come Puppet o Chef

Si noti che non installa software né configura la macchina dopo aver caricato la VM e aver impostato le impostazioni di VirtualBox. Pensalo come un motore di scripting per VirtualBox.

Ecco alcuni dei motivi che ho visto per usare Vagrant solo su VirtualBox.

1. Configurare reti multi-VM con facilità

La maggior parte dei contenuti di Vagrant per utenti avanzati che ho letto riguardava la configurazione di più macchine virtuali contemporaneamente. Vagrant ti dà un singolo file di configurazione per configurarli, permettendoti di avviarli tutti con un solo comando.

Supponiamo che tu abbia configurato tre VM per connettersi in rete tra loro utilizzando IP statici sulla sottorete 192.168.1. *. Ti trovi in ​​una posizione che sta già utilizzando quella sottorete per distribuire gli indirizzi IP e le tue VM ora sono in conflitto. Con Vagrant, puoi semplicemente modificare il Vagrantfile e ricaricare le VM, mentre con VirtualBox dovresti aprire le impostazioni per ogni VM, se non avviare ogni VM e modificarle all'interno.

2. Controllo del codice sorgente

Inserendo le impostazioni in un file di testo, consente di impostare la configurazione sotto il controllo del codice sorgente. Hai apportato alcune modifiche la scorsa settimana e hai rotto accidentalmente l'immagine? Ripristina le modifiche e ricarica la VM. Puoi farlo con le istantanee di VirtualBox, ma occuperà molto più spazio di un semplice file Vagrant.

3. Varie piattaforme

C'è un gran numero di scatole disponibili su siti come http://vagrantbox.es . Ciò consente di provare vari sistemi operativi o distribuzioni, applicando lo stesso provisioning per configurare ambienti simili. Ciò può essere utile per testare o aggiungere supporto a nuove piattaforme e richiederebbe molto tempo usando solo VirtualBox.

Esistono molti argomenti per l'utilizzo del software di provisioning e per l'utilizzo di snapshot di immagini. Per ulteriori discussioni, ti indicherò l'eccellente articolo di Stephen Nelson-Smith Come costruire 100 server Web in un giorno .


8
Tuttavia, non capisco perché dovrei usare il vagabondo nell'ambiente di sviluppo! Perché è costoso (se si desidera utilizzare VMWare!) Possiamo preparare una macchina virtuale come scatole di base che viene utilizzata da Vagrant e quindi clonare da VMware per configurare un'altra macchina virtuale. Innanzitutto, possiamo controllare tutte le impostazioni della macchina virtuale con il vmruncomando offerto da VMware anche le modifiche dell'indirizzo IP o l'esecuzione di uno script all'interno della macchina guest!
Oğuz Çelikdemir,

3
@ OğuzÇelikdemir Questo è un punto giusto. Vagrant apporta un front-end più semplice a VMWare per quanto riguarda l'avvio di una nuova macchina. Dietro le quinte, sta usando vmrunper controllarlo. Ho sempre usato VirtualBox e quindi non ho alcuna esperienza con il backend VMWare.
Adam Lukens,

1
@AdamLukens, grazie per i commenti dettagliati. Quello che hai detto sembra interessante .. ma mi chiedo se sei a conoscenza del VboxManagecomando? virtualbox.org/manual/ch08.html Praticamente tutto ciò che hai citato può essere creato come script passando lo specifico ip / parametro vboxmanage controlvmo un comando simile in uno script di shell e quindi il controllo di versione che .. Quindi, come si vagrantmigliora virtualbox?
alpha_989,

@ alpha_989 Sono d'accordo. Non sembra esserci un punto unico per l'utilizzo di Vagrant. Solo per comodità.
Niklas Rosencrantz,

27

Oltre all'eccellente risposta data da Adam, Vagrant lega tutto insieme. Sebbene Chef e Puppet (e gli script Salt e shell e qualunque altro provisioner che si desidera utilizzare) siano cose separate, Vagrant lega tutto insieme e lo fa funzionare solo con un vagrant up.

Quel comando lo farà

  1. basta avviare la VM se è tutto ciò che è necessario, ma lo farà anche
  2. crea la casella dalla casella di base specificata se anche ciò non è stato ancora fatto, ma se non hai nemmeno la casella di base sulla tua macchina, per prima cosa
  3. recuperalo dal suo URL e scaricalo sul tuo computer.

Non devi pensare a tutto ciò. Supponiamo che tu stia passando a un altro progetto, avviato da un collega. Basta controllare il codice dal proprio repository ed eseguire vagrant up, senza preoccuparsi di scaricare ISO o installare nulla o chiedersi quale versione di quale distro è necessario utilizzare per quel particolare client o se si dispone di una copia di una VM che ha già tutto hai bisogno.

Non devi nemmeno preoccuparti se hanno impostato le cose usando Chef o Puppet o solo script di shell. (Va bene, quindi potresti aver bisogno di fare un bundle installo altrimenti assicurarti di avere tutto installato, ma ancora non è un grosso problema.)

Collegando tutto insieme e fornendo un'interfaccia unificata per tutto, può rendere molto più semplice tutto tranne i casi d'uso più semplici. All'inizio potresti pensare di riapprendere un nuovo modo di fare quello che stai già facendo, ma una volta approfondito l'uso di Vagrant scoprirai che puoi fare molto di più con molto meno sforzo. Ne varrà la pena l'investimento di tempo iniziale.


8
Ma è molto più facile e veloce per me inviare a uno sviluppatore un'immagine VM preimpostata di quanto non lo sia per loro di installare il vagabondo, imparare a usarlo e affrontare qualsiasi miriade di problemi che si presentano, in particolare quando si supporta scatole di windows. Non lo capisco neanche io. Sembra essere nient'altro che fanboys.
hopeseekr,

5
L'installazione di Vagrant è incredibilmente facile in questi giorni. Chiunque non sia in grado di installarlo non può essere attendibile per scrivere codice. Avere un file Vagrant nel codice sorgente che lo sviluppatore verifica è in realtà molto più semplice dell'invio di una macchina virtuale. Il file Vagrant definisce l'installazione, incluso l'URL da cui scaricare la VM di base (che quindi configura). Se inizialmente non è necessario apportare modifiche alla configurazione, è tutto pronto. Ma mentre lavori al tuo progetto, probabilmente dovrai apportare modifiche. Fallo nel tuo Vagrantfile.
iconoclasta il

5
Poiché stai mantenendo il Vagrantfile con il tuo codice, tutti gli sviluppatori che si uniscono al progetto riceveranno automaticamente le modifiche apportate alla tua VM, dal momento che le stai apportando nel Vagrantfile. Configurare il tuo Vagrantfile non deve essere difficile. Puoi usare il provisioning della shell se trovi che Chef e Puppet sono eccessivi (cosa che spesso accade). Se puoi inserire i comandi di shell nella VM, allora è un piccolo ostacolo impostare i comandi di provisioning della shell nel Vagrantfile. Ci vorrà un piccolo sforzo iniziale e ti farà risparmiare un sacco di mal di testa a lungo termine.
iconoclasta il

4
e quando devi cambiare qualcosa su tutti e 50 i computer?
iconoclasta,

4
Le discussioni qui riguardano davvero l'ottimizzazione prematura. Non usare il vagabondo se non ne hai bisogno. Usa vagabondo quando scopri che creare VM sta diventando noioso.
cammil,

9

La capacità di integrare chef o burattino con provisioning VM è la chiave. La maggior parte degli utenti di Vagrant ti dirà che eseguono "fornitura di vagabondi" e occasionalmente "ricarica di vagabondi" molto più spesso di "vagabondaggio" o "distruzione di vagabondi". Queste attività indicano che il vero lavoro non consiste nello spin up / down delle VM, ma nel "gestirle" dopo il fatto.

Porre una domanda migliore (posta dagli utenti esperti di Chef) potrebbe essere il motivo per cui utilizzare Vagrant e non il coltello con il plug-in appropriato (arriverà al plug-in virtualbox, in un momento)? Ad esempio, passare i valori degli argomenti memorizzati in un data bag a un plugin coltello è (in qualche modo) più intelligente, flessibile e gestibile rispetto alla manipolazione di un gigantesco file Vagrant. In genere definisco le mie risorse "dinamiche" come il numero di CPU, la quantità di memoria, il sistema operativo da distribuire, il nome host, l'IP, i percorsi, ecc., Nei database dello chef in modo tale che non ho bisogno di continuare a cambiare la mia ricetta; - ). La modifica di una banca dati tramite l'interfaccia Web di Chef è un'operazione di immissione dei dati davvero semplice che posso svolgere per gli operatori più giovani. Con Vagrantfile, il tuo codice che modifica per sempre e che ci crediate o no - interruzioni di codice - che praticamente garantisce che NON consegnerete semplici modifiche al personale delle Operazioni,

A parte il fatto che il coltello non ha ancora un plugin per virtualbox (anche se ne prevedo uno in un futuro non troppo lontano), ci sono già plugin per la maggior parte dei prodotti di virtualizzazione "enterprise", inclusi vmware, xenserver e praticamente tutti i principali "cloud" fornitore, anche. Ciò significa che il coltello è di gran lunga superiore a quello che offre Vagrant se / quando sei pronto a passare oltre la virtualbox. Per ora, la community di Chef sembra felice di permettere agli utenti di virtualbox di zoppicare insieme a Vagrant non integrando le API di virtualbox per un plugin per coltelli. Esiste un plugin coltello-vagabondo che consente l'uso di sacchetti dati per passare argomenti. Ma richiede ancora un software vagabondo ed è monolitico Vagrantfile per funzionare.

Quindi, uscirò su un arto e dirò che Vagrant NON è sicuramente "migliore" dello Chef con il coltello; ma necessario (per ora) se insisti su virtualbox e forse 'più facile' che gestire lo chef con i data bag, a condizione che tu abbia un ambiente abbastanza semplice da gestire.


8

Qui ci sono altri due casi d'uso per sviluppatori che il vagabondo semplifica (rispetto al VirtualBox "normale"). Non ho visto questi casi d'uso richiamati specificamente nelle risposte precedenti.

  1. Vagrant aiuta con l'obiettivo di mantenere le piattaforme di sviluppo e produzione il più vicino possibile l'una all'altra. In un mondo ideale, forniresti all'ambiente di produzione gli script THE SAME usati per eseguire il provisioning della VM Vagrant, riducendo al minimo le sorprese al momento della distribuzione.

  2. Test di integrazione e integrazione continua: Vagrant è facile da controllare dai test, e quindi intere pile multi-macchina possono essere facilmente controllate da strumenti come Jenkins durante l'esecuzione di test.

Sì, VirtualBox "semplice" può essere utilizzato anche qui, ma le convenzioni utilizzate da Vagrant rendono più semplice l'impostazione di questi scenari.


1
Copio seriamente il VMX e il VMDK da Windows a Linux. Forse è diverso nel mondo della virtualbox, ma ne dubito! Cosa è più facile? Copia di un file o pasticciare con file vagabondi e la miriade di problemi che possono andare storti?
hopeseekr,

6
Per dirla meglio, Vagrant può essere pensato come un linguaggio di definizione virtuale in grado di descrivere le caratteristiche di una macchina virtuale, indipendentemente dal fatto che sia ospitato in VirtualBox, VMware, Parallels o what-have-you. Scopri come Vagrant non è "concorrenza a" VirtualBox, ma funziona con esso o al di là di esso.
MarkHu,

Si userebbe in genere un Vagrantfile per descrivere come deve essere impostata una macchina virtuale per un progetto - il Vagrantfile si impegnerebbe a controllare il codice sorgente (git, ecc.) Con il progetto, per condividerli su GitHub ecc. È molto più piccolo da scaricare di un intero VMDK.
Ben XO,

0

Vagrant estrae le macchine virtuali in modo da consentire di cambiare facilmente le implementazioni delle macchine virtuali. Puoi passare da Virtual Box ad AWS o Digital Ocean. È come usare SQL invece di un linguaggio di query specifico del database.

Vagrant consente agli sviluppatori di configurare rapidamente il proprio ambiente con un solo comando ed è esattamente uguale a quello di tutti gli altri. Questo è importante nelle grandi aziende in cui gli sviluppatori vanno e vengono spesso. Può ridurre i tempi di installazione da 3 giorni a 1 ora.

+ Cosa ha detto Adamo.

(Non ho ancora trovato un uso per Chef o Puppet ...)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.