Dlaczego powinienem używać Vagrant zamiast VirtualBox?

230

Używam VirtualBox od wielu lat do tworzenia środowiska programistycznego.

Wielu moich kolegów mówi o Vagrant i wiele osób wydaje się bardzo podekscytowanych, ale po prostu nie mogę pojąć korzyści z tego. Wydaje mi się, że jest to seria nowych poleceń do nauczenia się, aby zrobić to samo rzeczy, które zrobiłem z Virtualbox.

Dzięki VirtualBox idealnie instaluję i konfiguruję środowisko, a następnie mogę spakować je jako OVA lub cokolwiek innego i udostępnić je innym użytkownikom biurowym. Możesz zrobić migawkę w VirtualBox, jeśli coś pójdzie nie tak.

Marionetka i szef kuchni tak naprawdę nie są częścią Vagrant, to ich własna sprawa, prawda?

Więc tak, jakie korzyści oferuje Vagrant w porównaniu z VirtualBox na własną rękę?

John Hunt
źródło
11
Dwa lata później używam Vagrant codziennie do rozwoju - to świetnie! Mój zespół używa go i rozwiązało to nasze problemy ze środowiskiem programistycznym.
John Hunt,
1
sprecyzowano tutaj: jeśli nigdy nie miałeś żadnych problemów z konfiguracją serwerów PXE, pamiętaj VBoxManage na pamięć, umieć konfigurować nfs w mniej niż minutę itp., a także lubić bezpośrednie zarządzanie łańcuchami kompilacji ... nie ma w ogóle sensu. Wartość rośnie wraz z każdą brakującą częścią układanki. Powszechne zastosowanie nie polega na integracji marionetek, ale dlatego, że ludzie mogli dziurawić zdjęcia za pośrednictwem Internetu. bez względu na to, co ci powiedzą.
Florian Heigl
2
3,5 roku później i teraz używam dokera do programowania. To dobrze, ale inna bestia niż włóczęga ... W zależności od twoich wymagań uważam, że włóczęga jest wciąż lepszą platformą programistyczną dla zespołów - z nią jest po prostu łatwiej.
John Hunt
5
4 lata później odkryłem, że doker jest okropny. Niech żyje włóczęga.
John Hunt
3
twoje komentarze sprawiają, że jest to o wiele bardziej zabawne
Florian Heigl

Odpowiedzi:

151

To duże pytanie, więc podzielę je na trzy części.

Włóczęga

Vagrant służy do konfigurowania jednej lub więcej maszyn wirtualnych poprzez:

  • Importowanie gotowych obrazów (zwanych „pudełkami”)
  • Konfigurowanie ustawień specyficznych dla maszyny wirtualnej (adres IP, nazwy hostów, przekierowanie portów, pamięć itp.)
  • Uruchamianie oprogramowania do zarządzania, takiego jak Puppet lub Chef

Pamiętaj, że nie instaluje oprogramowania ani nie konfiguruje komputera po załadowaniu maszyny wirtualnej i ustawieniu ustawień VirtualBox. Pomyśl o tym jak o silniku skryptowym dla VirtualBox.

Oto kilka powodów, dla których widziałem używanie Vagrant tylko w VirtualBox.

1. Skonfiguruj sieci wielu maszyn wirtualnych z łatwością

Większość treści Vagrant dla zaawansowanych użytkowników, które przeczytałem, dotyczy konfigurowania wielu maszyn wirtualnych jednocześnie. Vagrant daje ci jeden plik konfiguracyjny, aby je skonfigurować, umożliwiając uruchomienie ich wszystkich za pomocą jednego polecenia.

Załóżmy, że skonfigurowałeś trzy maszyny wirtualne do pracy w sieci za pomocą statycznych adresów IP w podsieci 192.168.1. *. Znajdujesz się w lokalizacji, która już używa tej podsieci do rozdawania adresów IP, a Twoje maszyny wirtualne są teraz w konflikcie. Za pomocą Vagrant możesz po prostu edytować plik Vagrant i ponownie załadować maszyny wirtualne, podczas gdy w VirtualBox będziesz musiał otworzyć ustawienia dla każdej maszyny wirtualnej, jeśli nie uruchomisz każdej maszyny wirtualnej i zmienisz ją w środku.

2. Kontrola źródła

Umieszczając ustawienia w pliku tekstowym, można poddać konfigurację kontroli źródła. Wprowadziłeś jakieś zmiany w zeszłym tygodniu i przypadkowo złamałeś obraz? Wystarczy przywrócić zmiany i ponownie załadować maszynę wirtualną. Możesz to zrobić za pomocą migawek VirtualBox, ale zajmie to znacznie więcej miejsca niż zwykły plik Vagrantfile.

3. Różne platformy

Na stronach takich jak http://vagrantbox.es dostępna jest duża liczba skrzynek . Pozwala to wypróbować różne systemy operacyjne lub dystrybucje, stosując to samo zaopatrzenie w celu skonfigurowania podobnych środowisk. Może to pomóc w testowaniu lub dodawaniu wsparcia do nowych platform, a korzystanie z VirtualBox byłoby czasochłonne.

Istnieje wiele argumentów przemawiających za użyciem oprogramowania do obsługi administracyjnej, a także za pomocą migawek obrazów. W celu dalszej dyskusji wskażę doskonały artykuł Stephena Nelsona-Smitha Jak zbudować 100 serwerów WWW w ciągu jednego dnia .

Adam Lukens
źródło
8
Nadal nie rozumiem, dlaczego powinienem używać włóczęgi w środowisku programistycznym! Ponieważ jest to kosztowne (jeśli chcesz korzystać z VMWare!) Możemy przygotować maszynę wirtualną, taką jak boxy bazowe, z których korzysta włóczęga, a następnie uzyskać klonowanie przez VMware, aby skonfigurować inną maszynę wirtualną. Przede wszystkim możemy kontrolować wszystkie ustawienia maszyny wirtualnej za pomocą vmrunpolecenia oferowanego przez VMware, nawet zmiany adresu IP lub uruchomienie skryptu w maszynie gościa!
Oğuz Çelikdemir
3
@ OğuzÇelikdemir To słuszna kwestia. Vagrant po prostu udostępnia VMWare łatwiejszy interfejs w zakresie wprowadzania nowej maszyny. Za kulisami służy vmrundo kontrolowania tego. Zawsze korzystałem z VirtualBox, a zatem nie mam doświadczenia z backendem VMWare.
Adam Lukens
1
@AdamLukens, dziękuję za szczegółowe komentarze. To, co wspomniałeś, brzmi interesująco ... ale zastanawiam się, czy znasz VboxManagepolecenie? virtualbox.org/manual/ch08.html Prawie wszystko, o czym wspomniałeś, można utworzyć jako skrypt, przekazując konkretny parametr ip / do vboxmanage controlvmpodobnego polecenia w skrypcie powłoki, a następnie kontrolując wersję tego ... Więc jak to vagrantpoprawić virtualbox?
alpha_989
@ alpha_989 Zgadzam się. Wydaje się, że nie ma wyjątkowego powodu do używania Vagrant. Dla wygody.
Niklas Rosencrantz
27

Oprócz doskonałej odpowiedzi udzielonej przez Adama, Vagrant wiąże wszystko razem. Chociaż Chef i Puppet (oraz skrypty Soli i powłoki oraz cokolwiek innego dostawcy, którego chcesz użyć) to osobne rzeczy, Vagrant wiąże to wszystko razem i sprawia, że ​​działa tylko z vagrant up.

To jedno polecenie

  1. po prostu uruchom maszynę wirtualną, jeśli to wszystko, czego potrzebujesz, ale to też się stanie
  2. utwórz skrzynkę z określonej skrzynki podstawowej, jeśli jeszcze tego nie zrobiono, ale jeśli nawet nie masz skrzynki podstawowej na komputerze, najpierw
  3. pobierz go z jego adresu URL i pobierz na swój komputer.

Nie musisz o tym myśleć. Załóżmy, że zmieniasz projekt na inny, rozpoczęty przez współpracownika. Wystarczy vagrant uppobrać kod z repozytorium i uruchomić , nie martwiąc się o pobieranie plików ISO lub instalowanie czegokolwiek, ani zastanawianie się, której wersji dystrybucji należy użyć dla tego konkretnego klienta lub czy masz kopię maszyny wirtualnej, która już ma wszystko potrzebujesz.

Nie musisz się nawet martwić, czy skonfigurowali coś za pomocą Chef lub Puppet, czy po prostu skryptów powłoki. (Okej, więc możesz potrzebować zrobić bundle installlub w inny sposób upewnić się, że masz wszystko zainstalowane, ale nadal nie jest to wielka sprawa.)

Dzięki powiązaniu wszystkiego i zapewnieniu zunifikowanego interfejsu do tego wszystkiego, może znacznie ułatwić wszystkie przypadki użycia z wyjątkiem najprostszych zastosowań. Na początku możesz mieć wrażenie, że dopiero zaczynasz poznawać nowy sposób robienia tego, co już robisz, ale gdy wejdziesz głębiej w Vagrant, odkryjesz, że możesz zrobić znacznie więcej przy znacznie mniejszym wysiłku. Będzie to warte początkowej inwestycji czasu.

ikonoklasta
źródło
8
Ale dla mnie jest o wiele łatwiej i szybciej wysyłać programistom obraz maszyny wirtualnej przed konfiguracją, niż instalowanie włóczęgi, nauczenie się korzystania z niego i radzenie sobie z każdym z niezliczonych problemów, szczególnie podczas wspierania pudełka z oknami. Po prostu tak naprawdę NIE rozumiem. Wydaje się być tylko fanboyem.
hopeseekr
5
Instalacja Vagrant jest obecnie niewiarygodnie łatwa. Każdemu, kto nie może go zainstalować, nie można ufać, że napisze kod. Posiadanie pliku Vagrantfile w kodzie źródłowym, który programista sprawdza, jest w rzeczywistości o wiele łatwiejsze niż wysłanie maszyny wirtualnej. Plik Vagrant określa konfigurację, w tym adres URL, z którego ma zostać pobrana podstawowa maszyna wirtualna (którą następnie konfiguruje). Jeśli początkowo nie musisz wprowadzać zmian w konfiguracji, wszystko jest gotowe. Ale podczas pracy nad projektem prawdopodobnie będziesz musiał wprowadzić zmiany. Zrób to w swoim pliku Vagrantfile.
iconoclast
5
Ponieważ przechowujesz plik Vagrantfile za pomocą kodu, wszyscy programiści dołączający do projektu automatycznie otrzymają zmiany, które wprowadzisz na maszynie wirtualnej, ponieważ wprowadzasz je w pliku Vagrantfile. Konfiguracja pliku Vagrantfile nie musi być trudna. Możesz użyć aprowizacji, jeśli stwierdzisz, że Szef Kuchni i Marionetka mają nadmiar umiejętności (którymi często są). Jeśli możesz wprowadzić polecenia powłoki na maszynie Wirtualnej, wówczas konfigurowanie poleceń udostępniania powłoki w pliku Vagrantf jest niewielką przeszkodą. To zajmie niewielki wysiłek z góry i pozwoli zaoszczędzić wiele bólów głowy na dłuższą metę.
iconoclast
4
a kiedy trzeba coś zmienić na wszystkich 50 komputerach?
iconoclast
4
Dyskusje tutaj dotyczą naprawdę przedwczesnej optymalizacji. Nie używaj włóczęgi, jeśli jej nie potrzebujesz. Użyj włóczęgi, gdy odkryjesz, że tworzenie maszyn wirtualnych staje się nudne.
cammil
9

Kluczowa jest umiejętność integracji szefa kuchni lub marionetki z obsługą administracyjną maszyn wirtualnych. Większość użytkowników Vagrant powie ci, że uruchamiają „włóczęgowskie zaopatrzenie” i czasami „włóczęgowskie przeładowanie” znacznie częściej niż „włóczęgowskie ładowanie” lub „włóczęgowskie niszczenie”. Te zadania wskazują, że prawdziwą pracą nie jest wirowanie w górę / w dół maszyn wirtualnych, ale „zarządzanie” nimi po fakcie.

Aby zadać lepsze pytanie (w każdym razie sprawni użytkownicy Chef), może być dlaczego używać Vagrant, a nie nóż z odpowiednią wtyczką (za chwilę dostanie się do wtyczki virtualbox)? Na przykład przekazywanie wartości argumentów przechowywanych w torbie danych do wtyczki noża jest (o wiele) bardziej inteligentne, elastyczne i łatwiejsze do zarządzania niż żonglowanie jednym gigantycznym plikiem Vagrantfile. Zazwyczaj definiuję moje „dynamiczne” zasoby, takie jak liczba procesorów, ilość pamięci, którą system operacyjny wdrożyć, nazwa hosta, adres IP, trasy itp. W kartach danych szefa kuchni, tak że nie muszę ciągle zmieniać przepisu; - ). Edycja znacznika danych za pośrednictwem interfejsu internetowego szefa kuchni jest naprawdę łatwym zadaniem do wprowadzania danych, które mogę wykonać dla większości młodszych operatorów. Dzięki Vagrantfile, twojemu na zawsze modyfikującemu kodowi i wierz w to lub nie - łamie kod - co właściwie gwarantuje, że NIE będziesz przekazywał prostych zmian personelowi Operacji,

Oprócz tego, że nóż nie ma jeszcze wtyczki do virtualboksa (choć przewiduję jedną w niezbyt odległej przyszłości), istnieją już wtyczki do większości produktów do wirtualizacji „korporacyjnych”, w tym vmware, xenserver i prawie każdej większej „chmury” dostawca również. Oznacza to, że nóż jest znacznie lepszy od tego, co oferuje Vagrant, jeśli / kiedy jesteś gotowy, aby wyjść poza wirtualną skrzynkę. Na razie społeczność szefów kuchni wydaje się zadowolona, ​​że ​​użytkownicy Virtualbox utykają razem z Vagrantem, nie integrując aplikacji virtualbox apis z wtyczką noża. Istnieje plugawe narzędzie, które pozwala na wykorzystanie worków danych do przekazywania argumentów. Ale nadal wymaga błędnego oprogramowania i jego monolitycznego pliku Vagrantfile do działania.

Więc wychodzę na kończynę i mówię, że włóczęga zdecydowanie NIE jest „lepszy” niż szef kuchni z nożem; ale jest to konieczne (na razie), jeśli nalegasz na wirtualną skrzynkę i być może łatwiejsze niż zarządzanie szefem kuchni z workami danych, pod warunkiem, że masz dość proste środowisko do zarządzania.

Andrzej
źródło
8

Oto dwa kolejne przypadki użycia przez programistów, które włóczęga upraszczają (w stosunku do „zwykłego” VirtualBox). Nie widziałem tych przypadków użycia, które zostały przywołane w poprzednich odpowiedziach.

  1. Vagrant pomaga utrzymać platformy rozwojowe i produkcyjne jak najbliżej siebie. W idealnym świecie zaopatruje się środowisko produkcyjne w SAME skrypty używane do obsługi maszyny wirtualnej Vagrant, minimalizując niespodzianki podczas wdrażania.

  2. Testy integracyjne i ciągła integracja: Vagrant jest łatwy do kontrolowania na podstawie testów, a zatem całe stosy na wielu maszynach można łatwo kontrolować za pomocą narzędzi takich jak Jenkins podczas wykonywania testów.

Tak, tutaj można również użyć „zwykłego” VirtualBox - ale konwencje używane przez włóczęgę ułatwiają konfigurowanie tych scenariuszy.

Ben XO
źródło
1
Poważnie po prostu kopiuję vmx i vmdk z Windowsa na Linuksa. Może jest inaczej w świecie virtualbox, ale wątpię! Co jest łatwiejsze Skopiujesz plik lub zadzierasz z włóczącymi się plikami i mnóstwo problemów, które mogą pójść nie tak?
hopeseekr
6
Mówiąc prościej, Vagrant może być postrzegany jako język definicji wirtualnej, który może opisywać cechy maszyny wirtualnej - niezależnie od tego, czy jest ona hostowana pod VirtualBox, VMware, Parallels, czy co masz. Zobacz, jak Vagrant nie jest „konkurencją” dla VirtualBox, ale działa z nim lub poza nim.
MarkHu
Zazwyczaj używa się pliku Vagrantfile do opisania, w jaki sposób należy skonfigurować maszynę wirtualną dla projektu - plik Vagrantfile byłby zaangażowany w kontrolę źródła (git itp.) W projekcie, w celu udostępniania na GitHub itp. Jest to o wiele mniejszy plik do pobrania niż cały VMDK.
Ben XO
0

Vagrant streszcza maszyny wirtualne, dzięki czemu można łatwo przełączać implementacje maszyn wirtualnych. Możesz przełączyć się z Virtual Box na AWS lub Digital Ocean. To jak używanie SQL zamiast języka zapytań specyficznych dla bazy danych.

Vagrant pozwala programistom szybko skonfigurować środowisko za pomocą tylko jednego polecenia i jest dokładnie takie samo jak wszystkich innych. Jest to ważne w dużych firmach, w których programiści często przychodzą i odchodzą. Może to skrócić czas konfiguracji z 3 dni do 1 godziny.

+ Co powiedział Adam.

(Nadal nie znalazłem zastosowania dla szefa kuchni lub marionetki ...)

Chloe
źródło