Frage Warum sollte ich Vagrant anstatt nur VirtualBox verwenden?


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 einfach nicht die Vorteile davon verstehen. Es scheint mir, als wäre es eine Reihe neuer Befehle, die man lernen muss, um das Gleiche 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 mit anderen Bürobenutzern teilen. Sie können einen Snapshot in VirtualBox machen, wenn etwas schief geht.

Marionette und Koch sind nicht wirklich Teil von Vagrant, sie sind ihr eigenes Ding, oder?

Also, welche Vorteile bietet Vagrant speziell für VirtualBox?


211
2018-04-17 14:39


Ursprung


Zwei Jahre später benutze ich Vagrant jeden Tag für die Entwicklung - es ist großartig! Mein Team benutzt es und es hat unsere Probleme mit der Entwicklungsumgebung gelöst. - John Hunt
rechthaberisch: Wenn Sie nie Probleme damit hatten, PXE-Server einzurichten, VBoxManage auswendig zu kennen, wissen, wie man nfs in weniger als einer Minute einrichtet usw. und auch gerne Build-Chains direkt verwalten, gibt es fast keinen Punkt. Der Wert steigt mit jedem Teil des Puzzles, den du vermisst. Der weit verbreitete Gebrauch ist nicht von der Integration der Puppen, sondern weil die Leute verseuchte Bilder direkt aus dem Internet herausholen könnten. egal was sie dir sagen. - Florian Heigl
Ich fand den Vagabund auch viel nützlicher in einem Multi-Entwickler-Team, während es vorher nur ich war. Ich habe meinem Team einen Vagabunden aufgezwungen und festgestellt, dass dort der Wert ankommt. - John Hunt
3.5 Jahre später benutze ich jeden Tag einen Docker für die Entwicklung. Es ist gut, aber ein anderes Biest zu vagabundieren ... Abhängig von Ihren Anforderungen glaube ich, dass vagrant immer noch eine bessere Entwicklungsplattform für Teams ist - es ist einfach viel einfacher mit zu arbeiten. - John Hunt
4 Jahre später und ich habe herausgefunden, Hafenarbeiter ist schrecklich. Lang lebe Vagrant. - John Hunt


Antworten:


Das ist eine große Frage, also werde ich sie in zwei Abschnitte aufteilen.

Landstreicher

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

  • Importieren von vorgefertigten Bildern ("Boxen" genannt)
  • VM-spezifische Einstellungen festlegen (IP-Adresse, Hostnamen, Portweiterleitung, Speicher usw.)
  • Running Provisioning-Software wie Puppet oder Chef

Beachten Sie, dass keine Software installiert oder der Computer nach dem Laden der VM und dem Einstellen der VirtualBox-Einstellungen eingerichtet wird. Stellen Sie es sich als Skript-Engine für VirtualBox vor.

Hier sind einige Gründe, warum ich Vagrant nur mit VirtualBox benutzt habe.

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

Bei den meisten Power-User-Inhalten von Vagrant, die ich gelesen habe, ging es darum, mehrere VMs gleichzeitig einzurichten. Vagrant gibt Ihnen eine einzige Konfigurationsdatei, um diese einzurichten, so dass Sie alle mit einem Befehl starten können.

Angenommen, Sie haben drei VMs so konfiguriert, dass sie sich miteinander verbinden, indem sie statische IPs im Subnetz 192.168.1. * Verwenden. Sie befinden sich an einem Standort, der dieses Subnetz bereits verwendet, um IP-Adressen zu vergeben, und Ihre VMs stehen in 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üssen, wenn Sie nicht jede VM booten und sie innerhalb ändern.

2. Versionskontrolle

Indem die Einstellungen in eine Textdatei geschrieben werden, kann die Konfiguration der Quellcodeverwaltung zugewiesen werden. Hat letzte Woche einige Änderungen vorgenommen und das Bild versehentlich beschädigt? Nehmen Sie die Änderungen einfach zurück und laden Sie die VM neu. Sie können dies mit VirtualBox-Snapshots erreichen, aber es wird viel mehr Platz als nur eine Vagrant-Datei einnehmen.

3. Verschiedene Plattformen

Es gibt eine große Anzahl von Kästen auf Websites wie http://vagrantbox.es. Auf diese Weise können Sie verschiedene Betriebssysteme oder Distributionen testen, indem Sie dieselbe Bereitstellung für ähnliche Umgebungen verwenden. Dies kann beim Testen oder Hinzufügen von Unterstützung zu neuen Plattformen helfen und wäre zeitaufwendig, wenn nur VirtualBox verwendet wird.

Es gibt viele Argumente für die Verwendung von Provisioning-Software sowie die Verwendung von Image-Snapshots. Für weitere Diskussionen werde ich Sie auf Stephen Nelson-Smiths ausgezeichneten Artikel hinweisen Wie 100 Webserver an einem Tag erstellt werden.


145
2018-04-27 05:41



Dennoch verstehe ich nicht, warum ich Vagrant in der Entwicklungsumgebung verwenden sollte! Weil, es ist teuer (wenn Sie VMWare verwenden möchten!) Wir können eine virtuelle Maschine wie Basisboxen vorbereiten, die von Vagrant verwendet wird, und dann von VMware zum Einrichten einer anderen virtuellen Maschine geklont werden. In erster Linie können wir alle Einstellungen der virtuellen Maschine per steuern vmrunBefehl, der von VMware angeboten wird, sogar IP-Adresse ändert oder ein Skript auf dem Gastcomputer ausführt! - Oğuz Çelikdemir
@ OğuzÇelikdemir Das ist ein fairer Punkt. Vagrant stellt VMWare ein einfacheres Frontend zur Verfügung, wenn es darum geht, eine neue Maschine zu erstellen. Hinter den Kulissen wird es benutzt vmrun um es zu kontrollieren. Ich hatte immer VirtualBox verwendet und habe daher keine Erfahrung mit dem VMWare-Backend. - Adam Lukens
@AdamLukens, Danke für die ausführlichen Kommentare. Was du erwähnt hast, hört sich interessant an ... aber ich frage mich, ob du dir dessen bewusst bist VboxManage Befehl? virtualbox.org/manual/ch08.html  So ziemlich alles, was Sie erwähnt haben, kann als Skript erstellt werden, indem Sie den spezifischen ip / Parameter übergeben vboxmanage controlvm oder ein ähnlicher Befehl in einem Shell-Skript und dann Versionskontrolle, die .. So wie vagrant verbessern über virtualbox? - alpha_989
@ alpha_989 Ich stimme zu. Es scheint keinen eindeutigen Punkt für die Verwendung von Vagrant zu geben. Nur für die Bequemlichkeit. - Niklas Rosencrantz


Zusätzlich zu der ausgezeichneten Antwort, die Adam gegeben hat, bindet Vagrant alles zusammen. Obwohl Chef und Puppet (und Salt und Shell Skripte und was auch immer andere Provisioner Sie verwenden möchten) separate Dinge sind, verbindet Vagrant alles zusammen und macht es mit nur einem vagrant up.

Dieser eine Befehl wird

  1. Starten Sie einfach die VM, wenn das alles ist, aber es wird auch
  2. Erstellen Sie die Box aus Ihrer angegebenen Basisbox, falls dies noch nicht geschehen ist, aber wenn Sie noch nicht einmal die Basisbox auf Ihrem Rechner haben, wird sie das zuerst tun
  3. hole es von seiner URL und lade es auf deinen Rechner herunter.

Du musst nicht über all das nachdenken. Nehmen wir an, Sie wechseln zu einem anderen Projekt, das von einem Mitarbeiter gestartet wurde. Sie checken einfach den Code aus Ihrem Repo und starten ihn vagrant upSie müssen sich keine Gedanken darüber machen, ob Sie ISO-Dateien herunterladen oder installieren oder sich fragen, welche Version dieser Distribution Sie für diesen bestimmten Client verwenden müssen oder ob Sie eine Kopie einer VM haben, die bereits über alles verfügt, was Sie benötigen.

Sie brauchen sich nicht einmal Gedanken darüber zu machen, ob Sie mit Chef oder Puppet oder Shell-Skripten alles eingerichtet haben. (Okay, also musst du vielleicht einen machen bundle install oder stellen Sie andernfalls sicher, dass Sie alles installiert haben, aber immer noch keine große Sache.)

Indem es alles zusammenhält und eine einheitliche Schnittstelle für alles bereitstellt, kann es alle bis auf die einfachsten Anwendungsfälle viel einfacher machen. Am Anfang mag es sein, als ob Sie gerade eine neue Art lernen, das zu tun, was Sie bereits tun, aber sobald Sie sich mit Vagrant vertraut machen, werden Sie feststellen, dass Sie mit viel weniger Aufwand viel mehr erreichen können. Es wird die anfängliche Zeitinvestition wert sein.


25
2018-01-09 17:56



Aber es ist viel einfacher und schneller für mich, einem Entwickler ein voreingestelltes VM-Image zu schicken, als es für die Installation von Vagrant zu verwenden, zu lernen, wie man es benutzt, und mit all den unzähligen Problemen fertig zu werden, besonders wenn es unterstützt wird Fensterkästen. Ich verstehe es einfach NICHT. Scheint nichts als Fanboys zu sein. - hopeseekr
Die Installation von Vagrant ist in diesen Tagen unglaublich einfach. Jeder, der es nicht installieren kann, kann nicht vertrauenswürdig sein, um Code zu schreiben. Eine Vagrant-Datei in Ihrem Quellcode, die 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 wird (die dann konfiguriert wird). Wenn Sie zunächst keine Konfigurationsänderungen vornehmen müssen, sind Sie fertig. Aber während Sie an Ihrem Projekt arbeiten, müssen Sie wahrscheinlich Änderungen vornehmen. Mach das in deiner Vagrant-Datei. - iconoclast
Da Sie die Vagrant-Datei mit Ihrem Code beibehalten, erhalten alle Entwickler, die dem Projekt beitreten, automatisch die Änderungen, die Sie an Ihrer VM vornehmen, da Sie sie in der Vagrant-Datei erstellen. Konfigurieren Sie Ihre Vagrantfile muss nicht schwierig sein. Sie können die Shell-Bereitstellung verwenden, wenn Sie feststellen, dass der Chef und die Puppe übertrieben sind (was sie oft sind). Wenn Sie die Shell-Befehle in der VM eingeben können, ist es eine kleine Hürde, Shell-Provisioning-Befehle in der Vagrant-Datei einzurichten. Es wird eine kleine Anstrengung von vorne und sparen Sie viele Kopfschmerzen auf lange Sicht. - iconoclast
@hopeseekr Ich dachte das auch. Ich habe weiter gelesen und versucht, den Nutzen zu sehen. Ich denke, ich verstehe es endlich. Ich habe ein Buch über Python-Netzwerke gelesen. Testen ist eine komplexe Einrichtung, die Maschinen nachahmt, mit denen Sie lernen können. Sie können eine VM mit Linux erstellen, tun Sie es von Hand, und ich bin eine Person, also ist das in Ordnung. Ich habe Vagrant unter Windows installiert und drei Vagrant-Befehle eingegeben, um sein Image zur Verwendung auf VirtualBox aufzurufen. Was wäre, wenn ich 50 PCs hätte? lange Zeit, um mit Snapshots einzurichten. Was ist, wenn es Änderungen gibt? 50 Aktualisierungen? Für mich konnte ich sofort anfangen zu arbeiten, ohne alles einzurichten. - johnny
und wenn Sie etwas auf allen 50 Computern ändern müssen? - iconoclast


Die Fähigkeit, Chefs oder Puppets in VM-Provisioning einzubinden, ist entscheidend. Die meisten Benutzer von Vagrant werden Ihnen sagen, dass sie häufiger "Landstreicherei" und gelegentlich "Landstreicher-Nachladen" betreiben als "Landstreicher" oder "Landstreicher". Diese Aufgaben zeigen an, dass die eigentliche Arbeit nicht darin besteht, VMs hoch- oder herunterzufahren, sondern sie im Nachhinein "zu managen".

Um eine bessere Frage zu stellen (die ohnehin von kompetenten Chefbenutzern gestellt wird) könnte es sein, dass Sie Vagrant verwenden und nicht mit dem entsprechenden Plugin arbeiten (wird in Kürze auf das virtualbox plugin zugreifen)? Zum Beispiel ist das Übergeben von Argumentwerten, die in einem Datenbeutel gespeichert sind, an ein Messer-Plugin (intelligenter, flexibler und handhabbarer) als das Jonglieren einer riesigen Vagrant-Datei. Ich definiere in der Regel meine 'dynamischen' Ressourcen wie # CPUs, Speichermenge, welches Betriebssystem zu implementieren, Hostname, IP, Routen usw. in Chef Databag (s), so dass ich mein Rezept nicht ändern muss; ). Das Bearbeiten eines Databag über das Chef-Web-Interface ist eine wirklich einfache Dateneingabe-Aufgabe, die ich den meisten jüngeren Betreibern geben kann. Mit Vagrantfile, Ihrem Code für immer ändern und glauben Sie es oder nicht - Code-Breaks - die so ziemlich garantiert, dass Sie nicht einfach Änderungen an Operations Mitarbeiter geben, überhaupt.

Abgesehen davon, dass Messer noch kein Plugin für virtualbox hat (obwohl ich mir eine in nicht allzu ferner Zukunft vorstellen werde), gibt es bereits Plugins für die meisten "Enterprise" Virtualisierungsprodukte, einschließlich vmware, xenserver und so ziemlich jede größere 'Cloud' Anbieter, als auch. Dies bedeutet, Messer ist weit überlegen, was Vagrant bietet, wenn / wenn Sie bereit sind, über Virtualbox hinaus zu bewegen. Fürs Erste scheint es der Chef-Community zu gefallen, die Benutzer von virtualbox zusammen mit Vagrant hinken zu lassen, indem sie virtualbox apis nicht für ein Messer-Plugin integrieren. Es gibt ein Messer-Vagrant-Plugin, das die Verwendung von Datensäcken ermöglicht, um Argumente zu übergeben. Aber es erfordert immer noch vagabundierende Software und es ist monolithische Vagrantfile zu funktionieren.

Also, ich gehe auf ein Bein und sage Vagrant ist definitiv NICHT "besser" als Koch mit Messer; aber notwendig (für jetzt), wenn Sie auf virtualbox bestehen und vielleicht "einfacher" sind, als Chef mit Datenbeuteln zu leiten, vorausgesetzt, Sie haben eine ziemlich einfache Umgebung zu verwalten.


8
2018-03-21 14:13





Hier sind zwei weitere Entwickler-Anwendungsfälle, die Vagrant vereinfacht (über "normale" VirtualBox). Ich habe diese Anwendungsfälle in den vorherigen Antworten nicht ausdrücklich erwähnt.

  1. Vagrant hilft mit dem Ziel, die Entwicklungs- und Produktionsplattformen möglichst nahe beieinander zu halten. In einer idealen Welt würden Sie die Produktionsumgebung mit den gleichen Skripten versorgen, die zur Bereitstellung der Vagrant-VM verwendet werden, um Überraschungen bei der Bereitstellung zu minimieren.

  2. Integrationstests und kontinuierliche Integration: Vagrant lässt sich einfach aus Tests steuern. Daher können ganze Multi-Stacks problemlos von Tools wie Jenkins gesteuert werden, wenn Testläufe durchgeführt werden.

Ja, "normale" VirtualBox kann auch hier verwendet werden - aber die Konventionen von Vagrant machen es einfacher, diese Szenarien einzurichten.


8
2018-06-20 11:19



Ich kopiere ernsthaft 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 vagrant files und den unzähligen Problemen, die schief gehen können, herumspielen? - hopeseekr
Um es genauer zu formulieren, kann Vagrant als eine virtuelle Definitionssprache betrachtet werden, die die Eigenschaften einer virtuellen Maschine beschreiben kann - unabhängig davon, ob sie unter VirtualBox, VMware, Parallels oder What-have-you gehostet wird. Sehen Sie, wie Vagrant nicht "Konkurrenz" zu VirtualBox ist, aber damit oder darüber hinaus arbeitet. - MarkHu
Man würde typischerweise eine Vagrant-Datei verwenden, um zu beschreiben, wie eine virtuelle Maschine für ein Projekt eingerichtet werden soll - die Vagrant-Datei würde zur Quellcodeverwaltung (git, etc) mit dem Projekt übergeben, zum Teilen auf GitHub usw. Dies ist viel kleiner zum Herunterladen als eine ganze VMDK. - Ben XO


Vagrant abstrahiert virtuelle Maschinen, sodass Sie die Implementierungen virtueller Maschinen problemlos wechseln können. Sie können von Virtual Box zu AWS oder Digital Ocean wechseln. Es ist so, als würde man SQL anstelle einer datenbankspezifischen Abfragesprache verwenden.

Mit Vagrant können Entwickler ihre Umgebung schnell mit nur einem Befehl einrichten und sie ist genau so wie alle anderen auch. Dies ist wichtig in großen Unternehmen, in denen Entwickler oft kommen und gehen. Es kann die Installationszeit von 3 Tagen auf 1 Stunde verkürzen.

+ Was Adam gesagt hat.

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


0
2018-03-29 01:58