什么是 Vagrant?

17 Mar 2025 | 5 分钟阅读

Vagrant 是一个工具,用于在单一工作流中构建和管理虚拟机环境。Vagrant 提供了一个简单易用的命令行客户端来管理这些环境,注重自动化,并提供一个解释器来处理描述每个环境外观的文本定义,称为 Vagrantfiles。Vagrant 减少了开发环境的设置时间,并提高了生产环境的兼容性。

Vagrant 是用 Ruby 编写的开源软件,这意味着任何人都可以共享、下载和修改它。

虽然许多虚拟机管理程序都提供了命令行界面,但可以通过 shell 脚本或直接使用这些程序来配置虚拟机。Vagrant 通过添加一个层来提供简单性、跨多个系统的互操作性以及一种更一致的方法,可以与运行在任何其他系统之上的任何虚拟机环境一起使用。

通过提供一个标准的文本格式来处理虚拟机,我们可以用代码定义我们的环境,使其易于共享、修改、管理和通过版本控制进行备份。与其共享一个可能重达数 GB 的整个虚拟机镜像,不如共享一个仅重几 KB 的简单文本文件来更改配置。

历史

  • Vagrant 由 Mitchell Hashimoto 于 2010 年 1 月作为个人副项目启动。
  • Vagrant 的第一个版本于 2010 年 3 月发布。
  • 2010 年 10 月,Engine Yard 宣布他们将赞助 Vagrant 项目。
  • 两年后,第一个原始且稳定的版本 Vagrant 1.0 于 2012 年 3 月发布。
  • 2012 年 11 月,Mitchell 成立了一个名为 HashiCorp 的组织,以支持 Vagrant 的全职开发。
  • Vagrant 仍然是免费使用的软件。现在 HashiCorp 致力于创建商业版本,并为 Vagrant 提供专业的支持和培训。
  • Vagrant 最初与 VirtualBox 绑定,但 1.1 版本增加了对 KVM 和 VMware 等其他虚拟化软件以及 Amazon EC2 等服务器环境的支持。
  • Vagrant 用 Ruby 编写,但也可以用于 C#、Java、PHP、JavaScript 和 Python 等其他编程语言的项目。
  • 自 1.6 版本以来,Vagrant 原生支持 Docker 容器,在某些情况下可以替代完全虚拟化的操作系统。

为什么选择 Vagrant?

Vagrant 易于配置、可重现且便携的工作环境,基于行业标准技术构建,并通过单一一致的工作流进行控制,以最大限度地提高生产力和灵活性。

机器在 AWS、VMware、VirtualBox 或任何其他提供商之上进行配置。Chef、shell 脚本或 Puppet 等行业标准的配置工具可以自动安装和配置虚拟机上的软件。

Vagrant 提供了一个简单且有用的功能,适合处理不同项目的人。

Vagrant 可以轻松为开发人员创建一个本地环境,该环境复制了代码最终将部署的环境。但它必须拥有相同的库、进程、依赖项、操作系统和版本等。

Vagrant 架构

Vagrant 使用 ProvidersProvisioners 作为构建块来管理开发环境。

Provisioners 是允许用户自定义虚拟机环境配置的工具。Chef 和 Puppet 都是 Vagrant 生态系统中应用最广泛的 Provisioners。

Providers 是 Vagrant 用于设置和创建虚拟环境的服务。Docker、Hyper-V 和 VirtualBox 虚拟化支持 Vagrant,而 AWS 和 VMware 通过插件支持。最终用户将执行一个名为 #vagrant up 的命令。

What is Vagrant

Vagrant 作为包装器置于虚拟化软件之上,并帮助开发人员轻松地与 Providers 交互。它使用 ChefPuppet 自动化虚拟机环境,用户无需直接使用任何其他虚拟化软件。

机器和软件要求都写在一个名为 Vagrantfile 的文件中,该文件用于执行创建开发就绪 box 所需的步骤。

除了 Vagrantfile 中提到的内容之外,它还包含虚拟机配置、网络设置等详细信息。此外,它还包括多 VM 配置,即我们需要运行不同服务的多个独立虚拟机。

Vagrant 将负责读取当前目录中的 Vagrantfile,然后执行虚拟化操作,并运行配置脚本,使开发环境准备就绪。

box 是 Vagrant 环境的一种格式和扩展(.box),可以复制到另一台机器上以复制相同的环境。

由于所有东西都位于虚拟机中,完成任务后,我们可以执行 #vagrant destroy,这将终止整个环境。这将使基本机器免受我们使用 #vagrant up 创建的环境的影响。

开发人员现在可以检出存储库,然后执行 #vagrant up,而不是直接使用 VirtualBox 或任何其他虚拟化平台来创建机器,然后在其上配置所需的软件。

Vagrant 工作流

无论您是开发人员、运维人员还是设计师,Vagrant 都提供相同、简单的开发工作流。它利用声明式配置文件来描述您的所有软件需求、软件包、操作系统配置、用户等。

1. 对于开发人员: Vagrant 将依赖项及其配置隔离在一个可丢弃的、一致的环境中,而不会牺牲我们习惯使用的任何工具(编辑器、浏览器、调试器等)。

一旦开发人员创建了一个 Vagrantfile,他们只需要执行 Vagrant up,所有东西都会被安装并配置好。其他团队成员可以根据相同的配置创建他们的开发环境,因此,无论开发人员是在 Linux、Mac OS X 还是 Windows 上工作,所有团队成员都在相同的环境中运行代码,使用相同方式配置的相同依赖项。

2. 对于运维人员: Vagrant 为运维工程师DevOps 工程师提供了一个可丢弃的环境和一致的工作流,用于开发和测试基础设施管理脚本。

运维工程师可以快速测试 shell 脚本、Chef cookbook、Puppet 模块等,使用 VirtualBox 或 VMware 等本地虚拟化。工程师还可以使用相同的工作流和配置在 AWS 或 RackSpace 等远程云上测试这些脚本。

Vagrant 有助于摆脱用于回收 EC2 实例的自定义脚本,停止在各种机器之间来回切换 SSH。

3. 对于设计师: Vagrant 将自动设置该 Web 应用程序所需的所有内容,让设计师可以专注于最擅长的事情——设计。一旦开发人员配置好 Vagrant,设计师就不再需要担心让该应用程序运行起来。


下一个主题什么是 VDI