我已经使用 VirtualBox 来创建开发环境很多年了。
我的许多同事都在谈论 Vagrant,许多人似乎对它感到非常兴奋,但我似乎无法掌握它的好处......在我看来,它是一系列需要学习的新命令,以便做我用 Virtualbox 做过的事情。
使用 VirtualBox,我可以完美地安装和配置环境,然后可以将其打包为 OVA 或其他文件,并与其他办公室用户共享。如果出现问题,您可以在 VirtualBox 中拍摄快照。
Puppet 和 chef 实际上并不是 Vagrant 的一部分,它们是自己的东西,对吗?
那么,Vagrant 相对于 VirtualBox 本身具体提供了哪些优势呢?
答案1
这是一个大问题,所以我将把它分为三个部分。
流浪汉
Vagrant 用于通过以下方式设置一个或多个虚拟机:
- 导入预制图像(称为“盒子”)
- 设置虚拟机特定设置(IP 地址、主机名、端口转发、内存等)
- 运行 Puppet 或 Chef 等配置软件
请注意,它不会安装软件或设置机器,只需加载虚拟机并设置 VirtualBox 设置即可。可以将其视为 VirtualBox 的脚本引擎。
以下是我所见过的使用 Vagrant 而不是 VirtualBox 的一些原因。
1. 轻松设置多虚拟机网络
我读过的大多数 Vagrant 高级用户内容都是关于同时设置多个虚拟机的。Vagrant 为您提供了一个配置文件来设置这些虚拟机,使您能够使用一个命令启动所有虚拟机。
假设您已将三台虚拟机配置为使用 192.168.1.* 子网上的静态 IP 相互联网。您发现自己所处的位置已使用该子网来分配 IP 地址,并且您的虚拟机现在发生冲突。使用 Vagrant,您只需编辑 Vagrantfile 并重新加载虚拟机,而使用 VirtualBox,您必须打开每台虚拟机的设置,如果不启动每台虚拟机并在内部进行更改。
2. 源代码控制
通过将设置放入文本文件中,可以将配置置于源代码控制之下。上周做了一些更改,不小心破坏了图像?只需恢复更改并重新加载虚拟机即可。您可以使用 VirtualBox 快照完成此操作,但它会占用比 Vagrantfile 多得多的空间。
3. 各种平台
以下网站有大量可用的盒子:http://vagrantbox.es。这使您能够尝试各种操作系统或发行版,应用相同的配置来设置类似的环境。这有助于测试或添加对新平台的支持,而仅使用 VirtualBox 会很耗时。
关于使用配置软件以及使用映像快照,有很多争论。有关更多讨论,我将向您推荐 Stephen Nelson-Smith 的优秀文章如何在一天内构建 100 台 Web 服务器。
答案2
除了 Adam 给出的出色答案之外,Vagrant 将所有内容都联系在一起。尽管 Chef 和 Puppet(以及 Salt 和 shell 脚本以及您想要使用的任何其他配置程序)是独立的东西,但 Vagrant 将它们联系在一起,并且仅使用 即可使其工作vagrant up
。
这一个命令将
- 如果只需要启动虚拟机,但它也会
- 如果尚未完成,则从指定的基础框创建框,但如果您的机器上甚至没有基础框,它将首先
- 从其 URL 获取它并将其下载到您的机器。
您不必考虑所有这些。假设您正在切换到另一个项目,该项目由同事发起。您只需从存储库中签出代码,然后运行vagrant up
,无需担心下载 ISO 或安装任何东西,也不必考虑您需要为该特定客户使用哪个发行版的哪个版本,或者您是否拥有一份已经包含您所需一切的 VM 副本。
您甚至不需要担心他们是否使用 Chef 或 Puppet 或只是 shell 脚本进行了设置。(好吧,所以您可能需要执行bundle install
或以其他方式确保您已安装所有内容,但这仍然不是什么大问题。)
通过将所有内容捆绑在一起,并为所有内容提供统一的界面,它可以使除最简单的用例之外的所有用例变得更容易。一开始,你可能会觉得你只是在重新学习一种新的方式来做你已经在做的事情,但一旦你深入了解了 Vagrant 的使用,你会发现你可以用更少的努力做更多的事情。这非常值得你投入最初的时间。
答案3
以下是 vagrant 简化的另外两个开发人员用例(相对于“普通”VirtualBox)。我没有在之前的答案中看到这些用例被特别提及。
Vagrant 有助于使开发和生产平台尽可能地接近彼此。在理想情况下,您将使用与配置 Vagrant VM 相同的脚本来配置生产环境,从而最大限度地减少部署时的意外。
集成测试和持续集成:Vagrant 易于从测试中进行控制,因此在进行测试运行时可以通过 Jenkins 等工具轻松控制整个多机堆栈。
是的,“普通”的 VirtualBox 也可以在这里使用 - 但是 vagrant 使用的约定使得设置这些场景变得更加简单。
答案4
Vagrant 抽象了虚拟机,因此您可以轻松切换虚拟机实现。您可以从 Virtual Box 切换到 AWS 或 Digital Ocean。这就像使用 SQL 而不是特定于数据库的查询语言。
Vagrant 允许开发人员仅使用一个命令快速设置他们的环境,并且与其他人的环境完全相同。这对于开发人员经常来来往往的大公司来说很重要。它可以将设置时间从 3 天缩短到 1 小时。
+ 亚当说的话。
(尽管我还没有找到 Chef 或 Puppet 的用途......)