Чому я повинен використовувати Vagrant замість просто VirtualBox?


230

Я багато років використовую VirtualBox для створення середовища розвитку.

Дуже багато моїх колег говорять про Вагранта, і багато людей здаються дуже схвильованими, але я просто не можу зрозуміти переваги цього. Мені здається, це серія нових команд, щоб навчитися, щоб зробити те саме речі, які я робив з Virtualbox.

За допомогою VirtualBox я прекрасно встановлюю та конфігурую оточуюче середовище, тоді я можу пакувати його як OVA або інше та ділитися ним з іншими користувачами офісу. Ви можете зробити знімок у VirtualBox, якщо щось піде не так.

Лялька та шеф-кухар насправді не є частиною Vagrant, це їхня справа, правда?

Так так, які переваги спеціально пропонує Vagrant над VirtualBox самостійно?


11
Два роки я зараз щодня використовую Vagrant для розвитку - це чудово! Моя команда використовує це, і це вирішує наші проблеми із середовищем розробників.
Джон Хант

1
тут наголошується: Якщо у вас ніколи не виникало проблем із налаштуванням PXE-серверів, знайте напам'ять VBoxManage, знайте, як налаштувати nfs за менше хвилини тощо, а також, як безпосередньо керувати ланцюжками побудови .. майже немає сенсу. Значення збільшується з кожною частиною головоломки, яку вам не вистачає. Широке використання не від лялькових інтеграцій, а тому, що люди можуть знімати в безпеці зображення прямо з Інтернету. незалежно від того, що вони вам скажуть.
Флоріан Хейгл

2
3,5 роки і зараз я щодня використовую докер для розробки. Це добре, але різний звір для бродяг ... В залежності від ваших вимог, я вважаю, що бродяг все ще є кращою платформою для розробки команд - з цим просто набагато простіше працювати.
Джон Хант

5
4 роки і я виявив, що докер жахливий. Хай живе Вагрант.
Джон Хант

3
ваші коментарі роблять це набагато веселішим
Флоріан Хейгл

Відповіді:


151

Це велике питання, тому я збираюся розбити його на три розділи.

Бродячий

Vagrant використовується для налаштування однієї або декількох віртуальних машин:

  • Імпорт заздалегідь зроблених зображень (званих "коробки")
  • Встановлення специфічних для VM параметрів (IP-адреса, імена хостів, переадресація портів, пам'ять тощо)
  • Запуск програмного забезпечення, такого як Лялька чи шеф-кухар

Зауважте, що він не встановлює програмне забезпечення та не налаштовує машину минулого завантаження VM та встановлення параметрів VirtualBox. Подумайте про це як за допомогою сценарію для VirtualBox.

Ось декілька причин, якими я бачив використання Vagrant над лише VirtualBox.

1. Налаштуйте мережі Multi-VM за допомогою Ease

Більшість вмісту користувачів Vagrant, які я читав, стосувалися налаштування декількох віртуальних машин одночасно. Vagrant надає вам один конфігураційний файл для їх налаштування, що дозволяє запускати їх усіма за допомогою однієї команди.

Скажіть, ви налаштували три VM для мережевого зв’язку, використовуючи статичні IP-адреси в підмережі 192.168.1. *. Ви опиняєтесь у тому місці, яке вже використовує цю підмережу для роздачі IP-адрес, і ваші VM зараз конфліктують. За допомогою Vagrant ви можете просто відредагувати Vagrantfile і перезавантажити VM, тоді як за допомогою VirtualBox вам доведеться відкрити налаштування для кожного віртуального комп'ютера, якщо не завантажувати кожен VM і змінювати їх всередині.

2. Контроль джерела

Помістивши налаштування в текстовий файл, він дозволяє конфігурацію поставити під контроль джерела. Минулого тижня внесли деякі зміни і випадково зламали зображення? Просто відновіть зміни та перезавантажте VM. Ви можете зробити це за допомогою знімків VirtualBox, але це займе набагато більше місця, ніж просто Vagrantfile.

3. Різні платформи

На таких сайтах, як http://vagrantbox.es , є велика кількість скриньок . Це дозволяє вам спробувати різні ОС або дистрибутиви, застосувавши одне і те ж забезпечення для створення подібних середовищ. Це може допомогти при тестуванні або додаванні підтримки нових платформ, і це забирає багато часу, використовуючи лише VirtualBox.

Існує маса аргументів щодо використання програмного забезпечення, а також використання знімків зображень. Для додаткової дискусії я зазначу вам чудову статтю Стівена Нельсона-Сміта " Як створити 100 веб-серверів за день" .


8
І все-таки я не розумію, чому я повинен використовувати бродягу в середовищі розробки! Тому що це дорого (якщо ви хочете використовувати VMWare!) Ми можемо підготувати віртуальну машину, як базові коробки, яку використовує vagrant, а потім отримати клон VMware для налаштування іншої віртуальної машини. Перш за все, ми можемо контролювати всі налаштування віртуальної машини за допомогою vmrunкоманди, яка пропонує VMware навіть зміни IP-адреси або запуск сценарію всередині гостьової машини!
Oğuz Çelikdemir

3
@ OğuzÇelikdemir Це справедливо. Компанія Vagrant просто просуває VMWare передній план щодо створення нової машини. За лаштунками його використовують vmrunдля управління. Я завжди використовував VirtualBox, і тому не маю досвіду роботи з VMWare бекендом.
Адам Лукенс

1
@AdamLukens, Дякую за детальні коментарі. Те, що ви згадали, звучить цікаво .. але мені цікаво, чи знаєте ви VboxManageкоманду? virtualbox.org/manual/ch08.html Практично все, що ви згадали, може бути створене як сценарій, передавши конкретний ip / параметр vboxmanage controlvmабо аналогічну команду в скрипті оболонки, а потім керуйте версією, що .. Так як vagrantпокращитися virtualbox?
alpha_989

@ alpha_989 Я згоден. Здається, немає єдиного сенсу використання Vagrant. Просто для зручності.
Ніклас Розенкранц

27

Окрім чудової відповіді, яку дав Адам, Вагрант пов’язує все разом. Хоча шеф-кухар та лялька (і сценарії з сіллю та оболонками та будь-який інший постачальник послуг, який ви хочете використовувати) - це окремі речі, Вагрант пов’язує це все разом і змушує його працювати лише з одним vagrant up.

Та одна команда буде

  1. просто запустіть VM, якщо це все, що потрібно, але це також буде
  2. створіть поле з вказаного базового вікна, якщо цього ще не зроблено, але якщо у вас ще немає базового вікна на вашій машині, він спочатку
  3. витягніть його з його URL-адреси та завантажте його на свою машину.

Вам не потрібно думати про все це. Скажімо, ви переходите на інший проект, який розпочав колега. Ви просто перевіряєте код у репо-репортажу та запускаєтесь vagrant up, не переживаючи про завантаження ISO-файлів чи інсталяцію, або цікавитесь, яку версію дистрибутива вам потрібно використовувати для конкретного клієнта, чи є у вас копія віртуального комп'ютера, у якого вже все тобі потрібно.

Вам навіть не потрібно турбуватися про те, чи налаштували вони речі за допомогою шеф-кухаря чи лялечки чи просто сценарії оболонки. (Гаразд, тому вам може знадобитися зробити bundle installабо іншим чином переконатися, що у вас все встановлено, але все-таки не велика справа.)

Зв’язуючи все разом і надаючи єдиний інтерфейс для всіх, це може значно полегшити всі, крім найпростіших випадків використання. Спочатку вам може здатися, що ви просто вивчаєте новий спосіб робити те, що вже робите, але як тільки ви заглибитесь у використання Vagrant, ви виявите, що ви можете зробити набагато більше, значно менше зусиль. Буде добре коштувати початкових вкладень часу.


8
Але мені набагато простіше і швидше надіслати розробнику попередньо встановлений VM образ, ніж їм встановити бродягу, навчитися ним користуватися та вирішити будь-яку з безлічі проблем, які виникають, особливо при підтримці вікна коробки. Я просто дійсно НЕ отримую цього. Здається, це не що інше, як фанбої.
hopeseekr

5
Встановити Vagrant в наші дні неймовірно просто. Кожен, хто не може його встановити, неможливо довірити написання коду. Мати Vagrantfile у своєму вихідному коді, який перевіряє розробник, насправді набагато простіше, ніж надсилати VM. Vagrantfile визначає налаштування, включаючи URL-адресу, з якої потрібно завантажити базовий VM (який він потім налаштовує). Якщо вам спочатку не потрібно вносити зміни в конфігурацію, тоді все налаштовано. Але працюючи над проектом, вам, ймовірно, доведеться внести зміни. Зробіть це у своєму Vagrantfile.
іконоборство

5
Оскільки ви зберігаєте Vagrantfile зі своїм кодом, усі розробники, які приєднуються до проекту, автоматично отримують внесені вами зміни у свій VM, оскільки ви вносите їх у Vagrantfile. Налаштування Vagrantfile не потребує труднощів. Ви можете використовувати резервування снарядів, якщо вважаєте, що Шеф-кухар та лялька виявляються непосильними (що вони часто є). Якщо ви можете ввести команди оболонки у віртуальному комп'ютері, то це невелике перешкода для встановлення команд надання оболонок у Vagrantfile. Це знадобиться невеликими зусиллями вперед і в майбутньому збереже багато головних болів.
іконоборство

4
і коли вам потрібно щось змінити на всіх 50 комп’ютерах?
іконоборство

4
Дискусії тут справді стосуються передчасної оптимізації. Не використовуйте бродячих, якщо вам це не потрібно. Використовуйте бродяжники, коли ви виявите, що створення VM стає нудним.
cammil

9

Важливою є можливість інтеграції шеф-кухаря чи маріонетки із забезпеченням ВМ. Більшість користувачів Vagrant скажуть вам, що вони виконують функцію "бродяга" та іноді "перезавантажують бродяг" набагато частіше, ніж "бродягу" або "знищення бродяги". Ці завдання вказують, що реальна робота полягає не в обертанні / зменшенні ВМ, а в «керуванні» ними після факту.

Поставити краще запитання (все-таки поставлене досвідченими користувачами шеф-кухарів), можливо, чому б використовувати Vagrant, а не ножем з відповідним плагіном (за мить дістанеться плагіну virtualbox)? Наприклад, передача значень аргументів, збережених у пакеті даних, у плагін ножа є (таким чином) більш розумним, гнучким та керованим, ніж жонглювання одним гігантським Vagrantfile. Я, як правило, визначаю свої "динамічні" ресурси, такі як # процесорів, об'єм пам'яті, яку ОС потрібно розгорнути, ім'я хоста, IP, маршрути тощо, у пакеті даних шеф-кухаря, так що мені не потрібно продовжувати змінювати рецепт; - ). Редагування пакета даних через веб-інтерфейс Chef - це дійсно просте завдання для введення даних, яке я можу дати найбільш молодшим операторам. За допомогою Vagrantfile, ваш вічно модифікуючий код і вірите чи ні - перерви в коді - що, в значній мірі, гарантує, що ви НЕ будете передавати прості зміни персоналу операцій,

Окрім того, що у ножа ще немає плагіна для virtualbox (хоча я маю на увазі його у не надто віддаленому майбутньому), у більшості продуктів для віртуалізації «підприємств», включаючи vmware, xenserver і майже про кожну головну «хмару», вже є плагіни. постачальник, а також. Це означає, що ніж набагато перевершує те, що пропонує Vagrant, якщо / коли ви готові вийти за рамки virtualbox. Наразі спільнота шеф-кухарів, схоже, рада, що користувачі віртуальної скриньки можуть кульгати разом з Vagrant, не інтегруючи virtualbox apis для плагін ножа. Існує плагін-ножівник, який дозволяє використовувати пакети даних для передачі аргументів. Але це все ще вимагає бродячого програмного забезпечення і це монолітний Vagrantfile для функціонування.

Отже, я вийду на кінцівку і скажу, що Вагрант, безумовно, НЕ "кращий", ніж шеф-кухар з ножем; але необхідно (поки що), якщо ви наполягаєте на virtualbox і, можливо, "простіше", ніж керування шеф-кухарем з пакетами даних, за умови, що у вас є досить просте середовище для управління.


8

Ось ще два випадки використання розробника, які бродяжка спрощує (над "звичайним" VirtualBox). Я не бачив таких випадків використання, про які конкретно говорилося в попередніх відповідях.

  1. Vagrant допомагає в тому, щоб підтримувати платформи розробки та виробництва максимально наближеними один до одного. В ідеальному світі ви б забезпечили виробниче середовище тим самим сценаріями, які використовуються для надання VAG-програми Vagrant, мінімізуючи сюрпризи під час розгортання.

  2. Інтеграційні тести та безперервна інтеграція: Vagrant легко контролювати за допомогою тестів, і тому цілі стеки багатьох машин можна легко контролювати за допомогою інструментів, таких як Дженкінс, під час тестових запусків.

Так, "звичайний" VirtualBox також може бути використаний тут, але умовні умови, які використовує бродяг, спрощують налаштування цих сценаріїв.


1
Я серйозно просто копіюю vmx та vmdk з Windows в Linux. Можливо, у світі virtualbox це інакше, але я сумніваюся в цьому! Що простіше? Копіювання файлу або возитися з бродячими файлами та безліччю проблем, які можуть піти не так?
hopeseekr

6
Якщо говорити про неї точніше, Вагранта можна розглядати як віртуальну мову визначення, яка може описати характеристики віртуальної машини - незалежно від того, чи вона розміщена під VirtualBox, VMware, Parallels або що у вас є. Подивіться, як Vagrant не є "конкуренцією" VirtualBox, а працює з ним або поза ним.
MarkHu

Зазвичай можна використовувати Vagrantfile, щоб описати, яким чином віртуальну машину потрібно створити для проекту - Vagrantfile буде зобов'язаний контролювати джерело (git тощо) з проектом, для спільного використання на GitHub і т. Д. Це набагато менше для завантаження ніж цілий VMDK.
Бен ХО

0

Vagrant конспектує віртуальні машини, тому це дозволяє легко перемикати реалізацію віртуальної машини. Ви можете переключитися з Virtual Box на AWS або Digital Ocean. Це як використовувати SQL замість мови запитів для конкретної бази даних.

Vagrant дозволяє розробникам швидко налаштовувати своє середовище лише однією командою, і це точно так само, як і всі інші. Це важливо у великих компаніях, де розробники часто йдуть та йдуть. Це може скоротити час встановлення з 3 днів до 1 години.

+ Що сказав Адам.

(Я все ще не знайшов використання для шеф-кухаря чи лялечки, хоча ...)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.