Почему я должен использовать Vagrant вместо VirtualBox?


230

Я много лет использую VirtualBox для создания среды разработки.

Многие мои коллеги говорят о Vagrant, и многие люди, кажется, очень взволнованы этим, но я просто не могу понять преимущества этого ... мне кажется, что это серия новых команд, которые нужно изучить, чтобы сделать то же самое вещи, которые я сделал с Virtualbox.

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

Кукольный и шеф-повар на самом деле не являются частью Vagrant, они их собственные вещи, верно?

Так что да, какие преимущества конкретно предлагает Vagrant по сравнению с VirtualBox?


11
Уже два года я использую Vagrant каждый день для разработки - это здорово! Моя команда использует это, и это решило наши проблемы среды разработки.
Джон Хант

1
Само собой разумеющееся: если у вас никогда не возникало проблем с настройкой PXE-серверов, знайте VBoxManage наизусть, умейте настраивать nfs менее чем за минуту и ​​т. д., а также любите непосредственно управлять цепочками сборки ... в этом нет никакого смысла. Значение возрастает с каждой частью головоломки, которую вы пропустили. Широко распространенное использование не от марионеточной интеграции, а потому, что люди могли взломать зараженные изображения прямо из Интернета. независимо от того, что они говорят вам.
Флориан Хейгл

2
3,5 года, и теперь я использую докер каждый день для разработки. Это хорошо, но от Vagrant по-разному ... В зависимости от ваших требований, я считаю, что Vagrant по-прежнему является лучшей платформой для разработки команд - с ней намного проще работать.
Джон Хант

5
Прошло 4 года, и я обнаружил, что докер ужасен. Да здравствует Бродяга.
Джон Хант

3
ваши комментарии делают это намного веселее
Флориан Хейгл

Ответы:


151

Это большой вопрос, поэтому я собираюсь разбить его на три части.

бродяга

Vagrant используется для настройки одной или нескольких виртуальных машин:

  • Импорт готовых изображений (называемых «коробками»)
  • Настройка специфичных для виртуальной машины настроек (IP-адрес, имена хостов, переадресация портов, память и т. Д.)
  • Запуск программного обеспечения, такого как Puppet или Chef

Обратите внимание, что он не устанавливает программное обеспечение и не настраивает компьютер после загрузки виртуальной машины и установки параметров VirtualBox. Думайте об этом как о скриптовом движке для VirtualBox.

Вот несколько причин, по которым я видел использование Vagrant вместо VirtualBox.

1. Настройте сети с несколькими виртуальными машинами с легкостью

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

Допустим, вы настроили три виртуальные машины для взаимодействия друг с другом, используя статические IP-адреса в подсети 192.168.1. *. Вы попадаете в местоположение, которое уже использует эту подсеть для раздачи IP-адресов, и теперь ваши виртуальные машины конфликтуют. С Vagrant вы можете просто отредактировать Vagrantfile и перезагрузить виртуальные машины, тогда как с VirtualBox вам придется открывать настройки для каждой виртуальной машины, если не загружать каждую виртуальную машину, и изменять их внутри.

2. Контроль источника

Поместив настройки в текстовый файл, он позволяет перевести конфигурацию под контроль исходного кода. Сделали некоторые изменения на прошлой неделе и случайно сломали изображение? Просто отмените изменения и перезагрузите виртуальную машину. Вы можете сделать это с помощью снимков VirtualBox, но это займет гораздо больше места, чем просто Vagrantfile.

3. Различные платформы

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

Существует множество аргументов в пользу использования программного обеспечения, а также использования снимков изображений. Для дополнительного обсуждения я укажу вам отличную статью Стивена Нельсона-Смита « Как построить 100 веб-серверов за день» .


8
Тем не менее, я не понимаю, почему я должен использовать vagrant в среде разработки! Потому что это дорого (если вы хотите использовать VMWare!). Мы можем подготовить виртуальную машину, такую ​​как базовые блоки, которую использует vagrant, а затем получить клонирование с помощью VMware для настройки другой виртуальной машины. Прежде всего, мы можем контролировать все настройки виртуальной машины с помощью vmrunкоманды, предлагаемой VMware, даже изменения IP-адреса или запуска сценария на гостевой машине!
Огуз Челикдемир

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

В дополнение к превосходному ответу Адама Вагрант связывает все вместе. Хотя Chef и Puppet (а также скрипты Salt и shell и любой другой поставщик, который вы хотите использовать) - это разные вещи, Vagrant связывает все это вместе и заставляет работать только с a vagrant up.

Эта одна команда будет

  1. просто запустите ВМ, если это все, что нужно, но это также
  2. создайте коробку из указанного базового блока, если это еще не сделано, но если на вашем компьютере даже нет базового блока, он сначала
  3. извлеките его из URL и загрузите на свой компьютер.

Вам не нужно думать обо всем этом. Допустим, вы переключаетесь на другой проект, запущенный коллегой. Вы просто извлекаете код из своего репозитория и запускаете vagrant up, не беспокоясь о загрузке ISO-файлов или установке чего-либо, или задаваясь вопросом, какую версию какого дистрибутива вам нужно использовать для этого конкретного клиента, или есть ли у вас копия виртуальной машины, в которой уже есть все тебе нужно.

Вам даже не нужно беспокоиться о том, настроили ли они что-либо с помощью Chef или Puppet или просто сценариев оболочки. (Ладно, так что вам, возможно, придется сделать bundle installили иным образом убедиться, что у вас все установлено, но все равно не имеет большого значения.)

Связав все вместе и предоставив единый интерфейс для всего этого, можно значительно упростить все, кроме простейших вариантов использования. Сначала вам может показаться, что вы просто начинаете новый способ делать то, что вы уже делаете, но как только вы углубитесь в использование Vagrant, вы обнаружите, что можете сделать гораздо больше с гораздо меньшими усилиями. Это будет хорошо стоить начальные инвестиции времени.


8
Но мне гораздо проще и быстрее отправить разработчику предустановленный образ виртуальной машины, чем ему установить vagrant, научиться его использовать и решать любые возникающие проблемы, особенно при поддержке оконные коробки. Я просто действительно не понимаю, либо. Кажется, это не что иное, как фанаты.
hopeseekr

5
В наши дни установка Vagrant невероятно проста. Любой, кто не может установить его, не может быть доверенным для написания кода. Наличие Vagrantfile в исходном коде, которое разработчик проверяет, на самом деле намного проще, чем отправка виртуальной машины. Vagrantfile определяет настройку, включая URL-адрес, с которого нужно загрузить базовую виртуальную машину (которую он затем настраивает). Если вам изначально не нужно вносить изменения в конфигурацию, то все готово. Но когда вы работаете над своим проектом, вам, вероятно, придется вносить изменения. Сделайте это в своем Vagrantfile.
иконоборчество

5
Поскольку вы сохраняете Vagrantfile с вашим кодом, все разработчики, присоединяющиеся к проекту, автоматически получат изменения, которые вы вносите в свою виртуальную машину, поскольку вы делаете их в Vagrantfile. Настройка вашего Vagrantfile не должна быть сложной. Вы можете использовать инициализацию оболочки, если вы обнаружите, что Chef и Puppet излишне убиты (как это часто бывает). Если вы можете вводить команды оболочки в виртуальной машине, то создание команд обеспечения оболочки в Vagrantfile является небольшим препятствием. Это потребует небольших предварительных усилий и избавит вас от многих головных болей в долгосрочной перспективе.
иконоборчество

4
а когда нужно что-то менять на всех 50 компьютерах?
иконоборчество

4
Обсуждения здесь действительно о преждевременной оптимизации. Не используйте Vagrant, если вам это не нужно. Использование vagrant, когда вы обнаружите, что создание виртуальных машин становится утомительным.
Cammil

9

Способность интегрировать шеф-повара или марионетку с предоставлением ВМ является ключевым фактором. Большинство пользователей Vagrant скажут вам, что они запускают «vagrant provision» и иногда «vagrant reload» гораздо чаще, чем «vagrant up» или «vagrant destroy». Эти задачи показывают, что настоящая работа заключается не в том, чтобы вращать виртуальные машины вверх / вниз, а в том, чтобы «управлять» ими после факта.

Чтобы поставить лучший вопрос (заданный опытными пользователями Chef, во всяком случае), может быть, почему использовать Vagrant, а не нож с соответствующим плагином (скоро попадет в плагин virtualbox)? Например, передача значений аргументов, хранящихся в пакете данных, в плагин ножа (способ) более интеллектуальна, гибка и управляема, чем манипулирование одним гигантским Vagrantfile. Я обычно определяю свои «динамические» ресурсы, такие как количество процессоров, объем памяти, какую ОС развернуть, имя хоста, IP, маршруты и т. Д. В базах данных chef, так что мне не нужно постоянно менять свой рецепт; ). Редактирование пакета данных через веб-интерфейс Chef - действительно простая задача ввода данных, которую я могу дать большинству младших операторов. С Vagrantfile, вашим навсегда изменяющим кодом и, хотите верьте, хотите нет - разрывы кода - что в значительной степени гарантирует, что вы НЕ будете передавать простые изменения персоналу Operations,

Помимо факта, что у ножа еще нет плагина для virtualbox (хотя я предполагаю, что он есть в не слишком отдаленном будущем), уже есть плагины для большинства «корпоративных» продуктов виртуализации, включая vmware, xenserver и почти все основные «облака». провайдер, а также. Это означает, что нож намного превосходит то, что предлагает Vagrant, если / когда вы готовы выйти за пределы виртуальной коробки. На данный момент сообщество Chef, похоже, с радостью позволяет пользователям виртуальных ящиков хромать вместе с Vagrant, не интегрируя виртуальные apis для плагина ножа. Существует плагин «нож-бродяга», который позволяет использовать пакеты данных для передачи аргументов. Но это все еще требует бродячего программного обеспечения, и это - монолитный Vagrantfile, чтобы функционировать.

Итак, я пойду на конечности и скажу, что Вагрант определенно НЕ «лучше», чем повар с ножом; но необходимо (пока), если вы настаиваете на virtualbox и, возможно, «проще», чем управление шеф-поваром с помощью пакетов данных, при условии, что у вас достаточно простая среда для управления.


8

Вот еще два варианта использования для разработчиков, которые упрощает vagrant (по сравнению с «обычным» VirtualBox). Я не видел этих вариантов использования, вызванных специально в предыдущих ответах.

  1. Vagrant помогает поддерживать платформы разработки и производства как можно ближе друг к другу. В идеальном мире вы бы обеспечили производственную среду теми же сценариями, которые используются для предоставления виртуальной машины Vagrant, что сводит к минимуму неожиданности во время развертывания.

  2. Интеграционные тесты и непрерывная интеграция: Vagrant легко контролируется с помощью тестов, и, следовательно, целые стеки из нескольких машин можно легко контролировать с помощью таких инструментов, как Jenkins, при выполнении тестовых прогонов.

Да, здесь можно использовать «простой» VirtualBox - но соглашения, используемые vagrant, упрощают настройку этих сценариев.


1
Я серьезно просто копирую vmx и vmdk из Windows в Linux. Может быть, в мире виртуальных коробок все по-другому, но я в этом сомневаюсь! Что проще? Копировать файл или возиться с vagrantfiles и множеством проблем, которые могут пойти не так?
hopeseekr

6
Чтобы лучше понять, Vagrant можно рассматривать как виртуальный язык определения, который может описывать характеристики виртуальной машины - независимо от того, размещена ли она в VirtualBox, VMware, Parallels или что-то еще. Посмотрите, как Vagrant не является «конкурентом» VirtualBox, но работает с ним или за его пределами.
MarkHu

Как правило, можно использовать Vagrantfile, чтобы описать, как виртуальная машина должна быть настроена для проекта - Vagrantfile будет использовать для управления исходным кодом (git и т. Д.) Проект, для совместного использования на GitHub и т. Д. Это гораздо меньше, чтобы загрузить чем целый VMDK.
Бен XO

0

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

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

+ Что сказал Адам.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.