Vagrant 使用基础镜像来快速克隆虚拟机,而不是从头开始构建虚拟机。这些基础镜像在 Vagrant 中被称为“box”,并且指定用于 Vagrant 环境的 box 始终是创建新 Vagrantfile 后的第一步。
1. 安装 box
通过 vagrant box add
命令可以将 box 加入到 Vagrant。这会将 box 存储在一个特定的名称下,以便多个 Vagrant 环境可以重复利用。如果你还没有添加一个 box,可以这样做:
$ vagrant box add hashicorp/precise64
这将从 HashiCorp 的 Vagrant Cloud box 目录 下载名为“hashicorp/precise64”的 box。虽然从 HashiCorp 的 Vagrant Cloud下载 box 是最便利的方式,你也可以从本地文件或指定的 URL 等添加 box。
对于当前用户,box 全局存储。每个项目都使用一个 box 作为初始镜像来克隆,并且从不修改基本镜像。这意味着如果你有两个项目都使用我们刚刚添加的 hashicorp/precise64 这个 box,则在一台 guest 机器中添加文件将不会对另一台机器产生影响。
在上面的命令中,你会注意到这些 box 是有命名空间的。box 分为两部分 - 用户名和 box 名 - 用斜线分隔。在上面的例子中,用户名是“hashicorp”,并且 box 是“precise64”。也可以通过 URL 或本地文件路径来指定 box,但入门指南中不会涉及这些内容。
命名空间不保证规范 box!一个常见的误解是像“ubuntu”这样的命名空间代表了 Ubuntu 这个 box 的规范空间。这是不真实的。Vagrant Cloud上的命名空间的行为与 GitHub 上的命名空间非常相似。正如 GitHub 的支持团队无法协助解决某人存储库中的问题一样,HashiCorp 的支持团队无法管理第三方发布的 box。
2. 使用 box
现在 box 已经添加到了 Vagrant,需要配置项目使用这个 box 作为基准镜像。打开空白的 Vagrantfile 文件添加下面的内容:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
end
这个例子中的“hashicorp/precise64”必须要跟你在上面添加的 box 名字匹配。通过这个配置,Vagrant 知道需要使用哪个 box。如果之前没有添加 box,Vagrant 会在运行时自动下载并添加 box。
可以通过 config.vm.box_version
来指定一个 box 的确切版本:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.box_version = "1.1.0"
end
也可以直接使用 config.vm.box_url
指定一个 box 的 URL:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
end
在下一节中,我们将启动 Vagrant 环境并与其进行一点互动。
3. 查找更多的 box
对于本入门指南的其余部分,我们将仅使用之前添加的“hashicorp/precise64” box。但是在完成入门指南后,第一个问题可能就是“我在哪里可以找到更多的 box?”
HashiCorp 的 Vagrant Cloud box 目录 是寻找更多 box 的最佳地点。HashiCorp 的 Vagrant Cloud 有一个可以通过各种平台和技术免费使用的公共目录。HashiCorp 的 Vagrant Cloud 也有很好的搜索功能,可以让你找到你关心的 box。
除了寻找免费的 box,HashiCorp 的 Vagrant Cloud 允许你托管自己的 box,如果打算为自己的组织创建 box 的话还可以创建私有 box。