Warum sollte ich Vagrant anstelle von VirtualBox verwenden?

230

Ich benutze VirtualBox seit vielen Jahren, um eine Entwicklungsumgebung zu erstellen.

Viele meiner Kollegen sprechen über Vagrant und viele Leute scheinen sehr aufgeregt darüber zu sein, aber ich kann die Vorteile einfach nicht begreifen. Mir scheint, es ist eine Reihe neuer Befehle, die man lernen muss, um dasselbe zu tun Dinge, die ich mit Virtualbox gemacht habe.

Mit VirtualBox installiere und konfiguriere ich eine Umgebung perfekt, dann kann ich sie als OVA oder was auch immer verpacken und sie für andere Bürobenutzer freigeben. Sie können einen Schnappschuss in VirtualBox machen, wenn etwas schief geht.

Marionette und Koch sind nicht wirklich ein Teil von Vagrant, sie sind ihre eigene Sache, oder?

Ja, welche Vorteile bietet Vagrant speziell gegenüber VirtualBox?

John Hunt
quelle
11
Zwei Jahre später benutze ich Vagrant jetzt jeden Tag für die Entwicklung - es ist großartig! Mein Team nutzt es und es hat die Probleme mit der Entwicklungsumgebung gelöst.
John Hunt
1
meinung hier: Wenn Sie nie Probleme beim Einrichten von PXE-Servern hatten, VBoxManage auswendig können, wissen, wie man NFS in weniger als einer Minute einrichtet usw. und auch Build-Ketten direkt verwalten möchten, gibt es so gut wie keinen Grund. Der Wert steigt mit jedem Teil des Puzzles, den Sie vermissen. Der weitverbreitete Einsatz ist nicht auf die Integration von Puppen zurückzuführen, sondern darauf, dass die Leute mit Sicherheit infizierte Bilder direkt aus dem Internet lochen könnten. egal was sie dir sagen.
Florian Heigl
2
Nach 3,5 Jahren benutze ich Docker jeden Tag für die Entwicklung. Es ist gut, aber ein anderes Biest als Vagrant ... Je nach Ihren Anforderungen ist Vagrant meiner Meinung nach immer noch eine bessere Entwicklungsplattform für Teams - es ist einfach viel einfacher, mit ihm zu arbeiten.
John Hunt
5
4 Jahre später habe ich festgestellt, dass Docker schrecklich ist. Es lebe Vagrant.
John Hunt
3
Ihre Kommentare machen so viel mehr Spaß
Florian Heigl

Antworten:

151

Das ist eine große Frage, deshalb werde ich sie in drei Abschnitte aufteilen.

Landstreicher

Vagrant wird verwendet, um eine oder mehrere virtuelle Maschinen einzurichten, indem:

  • Importieren von vorgefertigten Bildern ("Boxen" genannt)
  • Festlegen von VM-spezifischen Einstellungen (IP-Adresse, Hostnamen, Portweiterleitung, Speicher usw.)
  • Ausführen von Provisioning-Software wie Puppet oder Chef

Beachten Sie, dass keine Software installiert oder der Computer eingerichtet wird, nachdem die VM geladen und die VirtualBox-Einstellungen vorgenommen wurden. Stellen Sie sich das als Scripting-Engine für VirtualBox vor.

Hier sind einige Gründe, die ich für die Verwendung von Vagrant anstelle von VirtualBox gesehen habe.

1. Richten Sie Multi-VM-Netzwerke mit Leichtigkeit ein

In den meisten von mir gelesenen Vagrant-Inhalten für Power-User ging es darum, mehrere VMs gleichzeitig einzurichten. Vagrant stellt Ihnen eine einzige Konfigurationsdatei zur Verfügung, mit der Sie alle mit einem Befehl starten können.

Angenommen, Sie haben drei VMs so konfiguriert, dass sie mit statischen IP-Adressen im Subnetz 192.168.1. * Miteinander vernetzt sind. Sie befinden sich an einem Ort, an dem dieses Subnetz bereits zum Verteilen von IP-Adressen verwendet wird, und Ihre VMs verursachen nun einen Konflikt. Mit Vagrant können Sie einfach die Vagrant-Datei bearbeiten und die VMs neu laden, während Sie mit VirtualBox die Einstellungen für jede VM öffnen müssten, wenn Sie nicht jede VM booten und im Inneren ändern möchten.

2. Quellcodeverwaltung

Durch das Speichern der Einstellungen in einer Textdatei kann die Konfiguration der Quellcodeverwaltung unterzogen werden. Letzte Woche einige Änderungen vorgenommen und versehentlich das Bild gebrochen? Setzen Sie einfach die Änderungen zurück und laden Sie die VM neu. Sie können dies mit VirtualBox-Snapshots erreichen, aber es nimmt viel mehr Platz ein als nur eine Vagrant-Datei.

3. Verschiedene Plattformen

Auf Websites wie http://vagrantbox.es ist eine große Anzahl von Boxen verfügbar . Auf diese Weise können Sie verschiedene Betriebssysteme oder Distributionen ausprobieren und dieselbe Bereitstellung anwenden, um ähnliche Umgebungen einzurichten. Dies kann beim Testen oder Hinzufügen von Support zu neuen Plattformen hilfreich sein und wäre nur mit VirtualBox zeitaufwendig.

Es gibt viele Argumente für die Verwendung von Bereitstellungssoftware sowie für die Verwendung von Image-Snapshots. Für weitere Erläuterungen verweise ich Sie auf Stephen Nelson-Smiths hervorragenden Artikel Wie man 100 Webserver an einem Tag erstellt .

Adam Lukens
quelle
8
Trotzdem verstehe ich nicht, warum ich Vagrant in der Entwicklungsumgebung einsetzen soll! Weil es teuer ist (wenn Sie VMWare verwenden möchten!). Wir können eine virtuelle Maschine wie Basisboxen vorbereiten, die von Vagrant verwendet wird, und dann von VMware klonen lassen, um eine andere virtuelle Maschine einzurichten. In erster Linie können wir alle Einstellungen der virtuellen Maschine über vmrunBefehle steuern , die von VMware angeboten werden, sogar IP-Adressänderungen oder das Ausführen eines Skripts auf der Gastmaschine!
Oguz Celikdemir
3
@ OğuzÇelikdemir Das ist ein fairer Punkt. Vagrant vereinfacht VMWare lediglich das Aufrufen einer neuen Maschine. Hinter den Kulissen wird es vmrunzur Steuerung verwendet. Ich hatte schon immer VirtualBox verwendet und daher keine Erfahrung mit dem VMWare-Backend.
Adam Lukens
1
@AdamLukens, Danke für die ausführlichen Kommentare. Was du erwähnt hast, hört sich interessant an. Aber ich frage mich, ob dir der VboxManageBefehl bekannt ist? So ziemlich alles, was Sie erwähnt haben, kann als Skript erstellt werden, indem Sie die spezifische ip / -Parameter vboxmanage controlvmoder einen ähnlichen Befehl in einem Shell-Skript übergeben und dann die Versionskontrolle durchführen. Wie vagrantverbessert sich das virtualbox?
Alpha_989
@ alpha_989 Ich stimme zu. Es scheint keinen eindeutigen Grund für die Verwendung von Vagrant zu geben. Nur der Einfachheit halber.
Niklas Rosencrantz
27

Neben der hervorragenden Antwort von Adam verbindet Vagrant alles miteinander. Obwohl Chef und Puppet (sowie Salt- und Shell-Skripte und alle anderen Provisioner, die Sie verwenden möchten) separate Dinge sind, verbindet Vagrant alles miteinander und sorgt dafür, dass es mit nur einem funktioniert vagrant up.

Dieser eine Befehl wird

  1. Starten Sie einfach die VM, wenn das alles ist, was benötigt wird, aber es wird auch
  2. Erstellen Sie die Box aus Ihrer angegebenen Basisbox, falls dies noch nicht geschehen ist. Wenn Sie jedoch noch nicht einmal die Basisbox auf Ihrem Computer haben, wird dies zuerst durchgeführt
  3. Holen Sie es von seiner URL und laden Sie es auf Ihren Computer herunter.

Darüber muss man nicht nachdenken. Angenommen, Sie wechseln zu einem anderen Projekt, das von einem Kollegen gestartet wurde. Sie checken einfach den Code aus Ihrem Repo aus und führen ihn aus vagrant up, ohne sich Gedanken über das Herunterladen von ISOs oder die Installation von etwas zu machen oder sich zu fragen, welche Version der Distribution Sie für diesen bestimmten Client verwenden müssen oder ob Sie eine Kopie einer VM haben, die bereits alles enthält du brauchst.

Sie brauchen sich nicht einmal darum zu kümmern, ob sie Dinge mit Chef oder Puppet oder nur mit Shell-Skripten eingerichtet haben. (Okay, also müssen Sie möglicherweise eine bundle installoder auf andere Weise sicherstellen, dass Sie alles installiert haben, aber immer noch keine große Sache.)

Indem Sie alles zusammenbinden und eine einheitliche Oberfläche für alles bereitstellen, können Sie alle bis auf die einfachsten Anwendungsfälle erheblich vereinfachen. Zuerst haben Sie vielleicht das Gefühl, dass Sie nur eine neue Methode erlernen, um das zu tun, was Sie bereits tun. Wenn Sie jedoch tiefer in die Verwendung von Vagrant einsteigen, werden Sie feststellen, dass Sie mit viel weniger Aufwand viel mehr erreichen können. Die anfängliche Investition lohnt sich.

Bilderstürmer
quelle
8
Aber für mich ist es verdammt viel einfacher und schneller, einem Entwickler ein voreingestelltes VM-Image zu senden, als dass er Vagrant installieren, lernen kann, wie man es verwendet, und mit den unzähligen Problemen umgehen kann, die auftreten, insbesondere wenn es um Support geht Windows-Boxen. Ich verstehe es auch nicht wirklich. Scheint nichts als Fanboys zu sein.
Hopeseekr
5
Die Installation von Vagrant ist heutzutage unglaublich einfach. Jedem, der es nicht installieren kann, kann beim Schreiben von Code nicht vertraut werden. Ein Vagrantfile in Ihrem Quellcode zu haben, das der Entwickler auscheckt, ist tatsächlich viel einfacher als das Senden einer VM. Die Vagrant-Datei definiert das Setup, einschließlich der URL, von der die Basis-VM heruntergeladen werden soll (die dann konfiguriert wird). Wenn Sie zunächst keine Konfigurationsänderungen vornehmen müssen, sind Sie bereit. Während Sie an Ihrem Projekt arbeiten, müssen Sie wahrscheinlich Änderungen vornehmen. Tun Sie das in Ihrem Vagrantfile.
Iconoclast
5
Da Sie das Vagrantfile mit Ihrem Code behalten, erhalten alle Entwickler, die dem Projekt beitreten, automatisch die Änderungen, die Sie an Ihrer VM vornehmen, da Sie sie im Vagrantfile vornehmen. Die Konfiguration Ihres Vagrantfiles muss nicht schwierig sein. Sie können die Shell-Bereitstellung verwenden, wenn Sie feststellen, dass Chefkoch und Marionette überfordert sind (was häufig der Fall ist). Wenn Sie die Shell-Befehle in die VM eingeben können, ist es eine winzige Hürde, Shell-Bereitstellungsbefehle in der Vagrant-Datei einzurichten. Es wird einen kleinen Aufwand erfordern und Ihnen auf lange Sicht viele Kopfschmerzen ersparen.
Iconoclast
4
und wenn Sie etwas auf allen 50 Computern ändern müssen?
Iconoclast
4
In den Diskussionen geht es hier wirklich um vorzeitige Optimierung. Verwenden Sie Vagrant nicht, wenn Sie es nicht brauchen. Verwenden Sie vagrant, wenn Sie feststellen, dass das Erstellen von VMs mühsam wird.
Cammil
9

Die Fähigkeit, Chef oder Marionette in die VM-Bereitstellung zu integrieren, ist der Schlüssel. Die meisten Vagrant-Benutzer werden Ihnen mitteilen, dass sie viel häufiger "Vagrant Provisioning" und gelegentlich "Vagrant Reload" ausführen als "Vagrant Up" oder "Vagrant Destroy". Diese Aufgaben deuten darauf hin, dass die eigentliche Arbeit nicht darin besteht, VMs hoch- oder herunterzufahren, sondern sie nachträglich zu verwalten.

Um eine bessere Frage zu stellen (jedenfalls von erfahrenen Kochnutzern), könnte es sein, warum Vagrant und nicht knife mit dem entsprechenden Plugin verwendet wird (wird gleich zum Virtualbox-Plugin weitergeleitet). Das Übergeben von Argumentwerten, die in einer Datentasche gespeichert sind, an ein Messer-Plugin ist (weit) intelligenter, flexibler und verwaltbarer als das Jonglieren einer riesigen Vagrant-Datei. In der Regel definiere ich meine "dynamischen" Ressourcen wie CPU-Anzahl, Speicherplatz, Betriebssystem, Hostname, IP-Adresse, Routen usw. in Kochdatenbeuteln, sodass ich mein Rezept nicht ständig ändern muss. ). Das Bearbeiten eines Datenbeutels über die Chef-Weboberfläche ist eine wirklich einfache Aufgabe für die Dateneingabe, die ich den meisten Nachwuchskräften geben kann. Mit Vagrantfile können Sie Ihren Code für immer verändern und ob Sie es glauben oder nicht - Code bricht ab - was so ziemlich sicherstellt, dass Sie KEINE einfachen Änderungen an das Betriebspersonal weitergeben.

Abgesehen davon, dass knife noch kein Plugin für virtualbox hat (obwohl ich mir eines für die nicht allzu ferne Zukunft vorstelle), gibt es bereits Plugins für die meisten Virtualisierungsprodukte für Unternehmen, einschließlich VMware, Xenserver und nahezu jeder größeren Cloud. auch Anbieter. Dies bedeutet, dass Messer den Angeboten von Vagrant weit überlegen sind, wenn Sie bereit sind, über virtualbox hinauszugehen. Im Moment scheint die Chef-Community glücklich zu sein, Virtualbox-Benutzer mit Vagrant zusammenarbeiten zu lassen, indem Virtualbox-APIs nicht für ein Messer-Plugin integriert werden. Es gibt ein Messer-Vagabund-Plugin, das die Verwendung von Datenbeuteln zur Weitergabe von Argumenten ermöglicht. Aber es erfordert immer noch Software von Vagrant und es ist eine monolithische Vagrant-Datei, um zu funktionieren.

Also werde ich mich auf die Beine stellen und sagen, dass Vagrant definitiv NICHT "besser" ist als Chefkoch mit Messer; Dies ist jedoch (vorerst) erforderlich, wenn Sie auf virtualbox bestehen und möglicherweise „einfacher“ als das Verwalten des Küchenchefs mit Datentaschen sind, vorausgesetzt, Sie haben eine relativ einfache Umgebung zum Verwalten.

Andrew
quelle
8

Hier sind zwei weitere Anwendungsfälle für Entwickler, die von Vagrant vereinfacht werden (gegenüber "einfacher" VirtualBox). Ich habe diese Anwendungsfälle in den vorherigen Antworten nicht speziell herausgestellt.

  1. Vagrant hilft mit dem Ziel, die Entwicklungs- und Produktionsplattformen so nah wie möglich beieinander zu halten. In einer idealen Welt würden Sie die Produktionsumgebung mit denselben Skripten bereitstellen, die zur Bereitstellung der Vagrant-VM verwendet werden, um Überraschungen bei der Bereitstellung zu minimieren.

  2. Integrationstests und kontinuierliche Integration: Vagrant lässt sich leicht über Tests steuern, sodass bei Testläufen ganze Stapel mit mehreren Maschinen problemlos über Tools wie Jenkins gesteuert werden können.

Ja, "normale" VirtualBox kann auch hier verwendet werden - aber die Konventionen von vagrant vereinfachen das Einrichten dieser Szenarien.

Ben XO
quelle
1
Ich kopiere ernsthaft nur die vmx und vmdk von Windows nach Linux. Vielleicht ist es in der Virtualbox-Welt anders, aber ich bezweifle es! Was ist einfacher? Eine Datei kopieren oder mit Vagrantfiles und den unzähligen Problemen herumspielen, die schief gehen können?
Hopeseekr
6
Vagrant kann als virtuelle Definitionssprache betrachtet werden, die die Merkmale einer virtuellen Maschine beschreibt - unabhängig davon, ob sie unter VirtualBox, VMware, Parallels oder What-Have-You gehostet wird. Sehen Sie, wie Vagrant nicht mit VirtualBox "konkurriert", sondern damit oder darüber hinaus arbeitet.
MarkHu
Normalerweise wird eine Vagrant-Datei verwendet, um zu beschreiben, wie eine virtuelle Maschine für ein Projekt eingerichtet werden soll. Die Vagrant-Datei wird für die Quellcodeverwaltung (Git usw.) mit dem Projekt festgelegt, um sie auf GitHub usw. zu teilen. Dies ist zum Herunterladen viel kleiner als ein ganzes VMDK.
Ben XO
0

Vagrant abstrahiert virtuelle Maschinen, sodass Sie problemlos die Implementierung virtueller Maschinen wechseln können. Sie können von Virtual Box zu AWS oder Digital Ocean wechseln. Es ist wie bei der Verwendung von SQL anstelle einer datenbankspezifischen Abfragesprache.

Mit Vagrant können Entwickler ihre Umgebung mit nur einem Befehl schnell einrichten und es ist genau das Gleiche wie bei allen anderen. Dies ist wichtig in großen Unternehmen, in denen Entwickler häufig kommen und gehen. Die Einrichtungszeit kann von 3 Tagen auf 1 Stunde verkürzt werden.

+ Was Adam gesagt hat.

(Ich habe immer noch keine Verwendung für Chef oder Puppet gefunden ...)

Chloe
quelle