我多年来一直使用VirtualBox来创建开发环境。

我的许多同事都在谈论Vagrant,许多人对此感到非常兴奋,但是我似乎无法理解它的好处..在我看来,这是一系列新命令,需要学习才能执行与Virtualbox相同的操作。

使用VirtualBox,我可以完美地安装和配置环境,然后可以将其打包为OVA或其他形式,并与其他办公室用户共享。如果发生问题,您可以在VirtualBox中创建快照。

木偶和厨师不是Vagrant的一部分,他们是对的吗?

所以是的,相对于VirtualBox,Vagrant本身提供了哪些好处?

评论

两年了,我现在每天都在使用Vagrant进行开发-太好了!我的团队使用它并解决了我们的开发环境问题。

在这里认为:如果您在设置PXE服务器方面从未遇到任何麻烦,请完全了解VBoxManage,知道如何在不到一分钟的时间内设置nfs等,并且还喜欢直接管理构建链。价值与您所缺少的难题的每个部分都息息相关。广泛的使用不是来自p的集成,而是因为人们可以立即在互联网上对被感染的图像进行安全漏洞检测。不管他们告诉你什么。

3.5年过去了,我现在每天都使用docker进行开发。很好,但是与无业游民不同……根据您的要求,我认为无业游民仍然是团队更好的开发平台-使用起来更容易。

4年过去了,我发现docker很糟糕。流浪汉万岁。

您的评论让它变得更加有趣

#1 楼

这是一个大问题,因此我将其分为三个部分。

Vagrant

Vagrant用于通过以下方式设置一个或多个虚拟机:


导入预制映像(称为“框”)运行Puppet或Chef

之类的资源调配软件。请注意,它不会在加载VM和设置VirtualBox设置后安装软件或设置计算机。可以将其视为VirtualBox的脚本引擎。

有一些原因让我看到仅在VirtualBox上使用Vagrant。

1。轻松设置多VM网络

我阅读的大多数Vagrant Power-User内容都是关于同时设置多个VM。 Vagrant提供了一个配置文件来进行设置,使您可以使用一个命令启动所有配置文件。

假设您已配置三个虚拟机,以使用192.168.1。*子网上的静态IP相互联网。您发现自己已经在使用该子网分发IP地址的位置,并且您的VM现在发生冲突。使用Vagrant,您可以简单地编辑Vagrantfile并重新加载VM,而如果使用VirtualBox,则必须打开每个VM的设置(如果不启动每个VM并在内部进行更改)。

2。源代码控制

通过将设置放在文本文件中,可以使配置受源代码控制。上周进行了一些更改并意外破坏了图像?只需还原更改并重新加载VM。您可以使用VirtualBox快照来完成此操作,但是它将占用比Vagrantfile更多的空间。

3。各种平台

在http://vagrantbox.es等网站上有大量可用的盒子。这使您可以尝试各种操作系统或发行版,并应用相同的设置来设置相似的环境。这可以帮助测试或添加对新平台的支持,并且仅使用VirtualBox将非常耗时。

使用预配软件以及使用映像快照存在很多争议。对于其他讨论,我将为您指出Stephen Nelson-Smith的精彩文章“如何在一天内构建100个Web服务器”。

评论


但是,我仍然不明白为什么要在开发环境中使用流浪汉!因为,这很昂贵(如果您想使用VMWare!),我们可以准备一个虚拟机,如流浪者使用的基本框,然后由VMware克隆以设置另一个虚拟机。首先,我们可以通过VMware提供的vmrun命令控制所有虚拟机设置,甚至可以更改IP地址或在来宾计算机中运行脚本!

–OğuzÇelikdemir
14年7月14日在8:33

@OğuzÇelikdemir这是一个公平的观点。 Vagrant只是将VMWare的前端放到了新机器上。在后台,它使用vmrun对其进行控制。我一直使用VirtualBox,因此对VMWare后端没有任何经验。

–亚当·卢肯斯(Adam Lukens)
2014年7月17日在19:34



@AdamLukens,感谢您的详细评论。您提到的内容听起来很有趣。.但是我不知道您是否知道VboxManage命令? virtualbox.org/manual/ch08.html通过将特定的ip /参数传递给vboxmanage controlvm或shell脚本中的类似命令,然后对其进行版本控制,您可以将您提到的几乎所有内容都创建为脚本。因此,vagrant如何改进通过virtualbox?

–alpha_989
18 Mar 6 '18 at 15:33

@ alpha_989我同意。使用Vagrant似乎没有独特之处。只是为了方便。

–尼古拉斯·R。
18年4月23日在8:47

@ alpha_989我知道Vagrant优于VirtualBox cli的主要优点是Vagrant还可以使用VirtualBox以外的“提供者”(以防万一需要更改)。

– MakisH
20-10-9在14:42

#2 楼

除了亚当给出的出色答案外,瓦格兰特还将所有事物联系在一起。尽管Chef和Puppet(以及Salt和Shell脚本以及您想要使用的任何其他预配器)是分开的东西,但Vagrant会将它们捆绑在一起并使其仅与vagrant up一起使用。

如果需要的话,一个命令将

启动虚拟机,但是它也会
从您指定的位置创建框基本框(如果尚未完成),但是如果您的计算机上没有该基本框,则首先要从其URL中获取该基本框并将其下载到您的计算机上。

您不必考虑所有这些。假设您要切换到另一个项目,这个项目是由同事启动的。您只需从存储库中签出代码,然后运行vagrant up,就不必担心下载ISO或安装任何内容,也不用担心要为该特定客户端使用哪个发行版的版本,也不必担心是否已经拥有一个虚拟机的副本。您所需的一切。

您甚至不必担心他们是使用Chef还是Puppet或仅是Shell脚本来进行设置。 (好吧,所以您可能需要做一个bundle install或以其他方式确保已安装所有东西,但还是没什么大不了的。)

通过将所有东西绑在一起,并为其提供统一的接口总而言之,它可以使除最简单的用例之外的所有用例都容易得多。刚开始时,您可能会觉得自己只是在重新学习一种新的方式来做自己已经在做的事情,但是一旦您更深入地使用Vagrant,您会发现您可以用更少的精力做更多的事情。值得进行初期投资。

评论


但是,给开发人员发送预设的VM映像比让他们安装无用的软件,学习如何使用它以及处理出现的各种问题(特别是在支持时)要容易和快捷得多窗户盒。我也真的不明白。似乎只不过是粉丝。

–hopeseekr
2014年11月26日在1:40

这些天,安装Vagrant非常简单。任何无法安装它的人都不可能被信任来编写代码。开发人员签出的源代码中包含Vagrantfile实际上比发送VM容易得多。 Vagrantfile定义设置,包括从中下载基本VM的URL(然后由它配置)。如果您最初不需要进行配置更改,那么一切都准备就绪。但是当您处理项目时,可能需要进行更改。在您的Vagrantfile中执行此操作。

–iconoclast
2014年11月26日下午3:33

由于您将Vagrantfile与代码一起保存,因此所有加入该项目的开发人员都将自动获得您对VM所做的更改,因为您是在Vagrantfile中进行更改的。配置您的Vagrantfile并不困难。如果您发现Chef和Puppet过大(通常是过大的),则可以使用shell设置。如果您可以在VM中输入shell命令,那么在Vagrantfile中设置shell设置命令是一个很小的障碍。从长远来看,这将需要少量的前期工作,并可以节省许多麻烦。

–iconoclast
2014年11月26日下午3:33

当您需要在所有50台计算机上进行更改时?

–iconoclast
2015年11月2日于17:02

这里的讨论实际上是关于过早的优化。如果您不需要,请不要使用无业游民。当发现创建VM变得乏味时,请使用流浪汉。

– cammil
16年5月27日在8:57

#3 楼

能否将Chef或puppet与VM设置集成在一起是关键。大多数“无业游民”用户会告诉您,他们比“无业游民”或“无偿毁灭”更频繁地执行“无业游民供应”,并且有时“无业游民重新装填”的频率更高。这些任务表明,真正的工作不是分解VM,而是事后对其进行“管理”。

提出一个更好的问题(无论如何,由熟练的Chef用户提出)可能是为什么要使用Vagrant而不是使用适当的插件(稍后将进入virtualbox插件)?例如,将数据包中存储的参数值传递给刀插件比(处理)一个巨大的Vagrantfile更加智能,灵活和可管理。我通常在厨师数据包中定义我的“动态”资源,例如CPU数量,内存量,要部署的OS,主机名,IP,路由等,这样我就不必不断更改配方;- )。通过Chef Web界面编辑数据袋是一项非常简单的数据输入任务,我可以交给大多数初级操作员。使用Vagrantfile,您可以永久修改代码,无论您相信与否,都会发现代码中断-这几乎可以保证您永远不会将简单的更改交给操作人员。

除了刀不尽管有一个用于virtualbox的插件(尽管我在不久的将来就设想了一个插件),但已经有大多数“企业”虚拟化产品的插件,包括vmware,xenserver以及几乎每个主要的“云”提供商。这意味着如果/当您准备超越VirtualBox时,刀将远远优于Vagrant提供的工具。就目前而言,Chef社区似乎很乐意通过不为刀子插件集成virtualbox api来让virtualbox用户和Vagrant一​​起li脚。有一个刀无用的插件,它确实允许使用数据包来传递参数。但是,它仍然需要流浪者软件,并且它是单片的Vagrantfile才能起作用。

所以,我会弯腰说瓦格兰特绝对不比用刀厨师好。但有必要(暂时),如果您坚持使用VirtualBox,并且可能比管理带有数据袋的厨师更“容易”,前提是您要管理的环境非常简单。

#4 楼

这是流浪汉简化的另外两个开发人员用例(在“普通” VirtualBox上)。在以前的答案中,我没有看到这些用例特别明确。


Vagrant有助于保持开发平台和生产平台之间的距离。在理想的情况下,您将使用用于供应Vagrant VM的THE SAME脚本来供应生产环境,从而最大程度地减少部署时的意外情况。
集成测试和连续集成:Vagrant易于通过测试进行控制,因此在进行测试运行时,可以轻松地通过诸如Jenkins之类的工具来控制整个多机堆栈。

,“普通” VirtualBox也可以在这里使用-但是vagrant使用的约定使设置这些方案更加简单。

评论


我认真地只是将vmx和vmdk从Windows复制到Linux。也许在virtualbox世界中有所不同,但我对此表示怀疑!有什么更容易的?复制文件或使vagrantfile混乱,以及无数可能出错的问题?

–hopeseekr
2014年11月26日在1:42

更确切地说,Vagrant可以被认为是一种虚拟定义语言,可以描述虚拟机的特性,而不管它是托管在VirtualBox,VMware,Parallels还是您拥有的虚拟机中。了解Vagrant如何不是“竞争” VirtualBox,而是与之协同工作,甚至超越它。

– MarkHu
2015年2月14日下午4:36

人们通常会使用Vagrantfile来描述如何为项目设置虚拟机-Vagrantfile将被提交给项目的源代码控制(git等),以便在GitHub等上共享。下载起来要小得多而不是整个VMDK。

– Ben XO
18年8月1日在10:05

#5 楼

Vagrant抽象了虚拟机,因此您可以轻松切换虚拟机实现。您可以从Virtual Box切换到AWS或Digital Ocean。这就像使用SQL而不是特定于数据库的查询语言一样。

Vagrant允许开发人员仅使用一个命令即可快速设置其环境,并且与其他命令完全相同。这对于开发人员经常来来往往的大公司很重要。它可以将设置时间从3天减少到1小时。

+亚当说的话。

(我仍然没有发现Chef或Puppet的用处。 。)