从 Vagrant 1.5 版本起,box 开始支持版本。这运行创建 box 的人提交更新,使用 box 的人检查更新、更新 box 并查看变更记录。
对于 Vagrant 新手,box 版本并不重要,建议先去学习其他知识点。但是如果你在团队中使用 Vagrant 并且计划创建自己的 box,版本非常重要。幸运的是,Vagrant 内置版本控制功能易于使用,并很好地适应 Vagrant 工作流程。
本章讲解如何使用带版本的 box。如果想了解如何创建带版本的 box,请参考 创建基础 box。
1. 查看版本并更新
vagrant box list
只显示 box 的安装版本。如果查看 box 的可用版本,需要在 HashiCorp’s Vagrant Cloud 上查找 box。可用直接通过 URL https://vagrantcloud.com/$USER/$BOX
查找 box。例如,对于 hashicorp/precise64
这个 box,可用在 https://vagrantcloud.com/hashicorp/precise64
获取信息。
可用通过 vagrant box outdated
命令检查 box 是否已经过时。这可以检查当前 Vagrant 环境中的 box 是否过时以及系统上安装的任何其他 box。
可用通过 vagrant box update
命令更新 box。这会下载并安装新 box。这不会更新运行中的 Vagrant 环境。如果 Vagrant 环境已经在运行,必须销毁并重新创建它才能获取 box 中的更新,update 命令只是在本地下载这些更新。
2. 版本约束
可以通过在 Vagrantfile 中指定 config.vm.box_version
选项,限制 Vagrant 环境使用特定的一个或多个版本的 box。
如果未指定此选项,则相当于指定“>=0”的约束,始终使用最新版本。
box 版本配置可以是特定版本或几个版本。约束可以是以下任意组合:=X
,>X
,<X
,>=X
,<=X
,~> X
。可以通过用逗号分隔多个约束来组合多个约束。所有的约束条件应该是自我解释的,除了 ~>
,称为“悲观约束”。例如:~> 1.0
相当于 > = 1.0
,< 2.0
。~> 1.1.5
相当于 > = 1.1.5,<1.2.0
。
可以选择合适的版本处理方式。但是,公共目录中的许多 box 都遵循 语义版本控制。基本上,只有第一个数字(“主要版本”)打破向后兼容性。就 Vagrant box 而言,这意味着任何运行在 box “1.1.5”版本中的软件都应该在“1.2”和“1.4.5”中工作,但是“2.0”可能会引起重大变化。按照这个约定,最好的约束是 ~> 1.0
,因为无论该版本在哪个范围内,都知道它是安全的。
注意,虽然 语义版本控制 规范允许超过三个点,并且支持 pre-release 及 beta 版本,但 Vagrant 框必须是 X.Y.Z
格式,其中 X,Y 和 Z 都是正整数。
3. 自动更新检查
使用 Vagrantfile,还可以配置 Vagrant 在任何 vagrant up
期间自动检查更新。这是默认启用的,但可以在 Vagrantfile 中通过 config.vm.box_check_update=false
轻松禁用。
启用此功能后,Vagrant 将在每次 vagrant 启动时检查更新情况,不在从头开始创建机器是检查,还在恢复运行时以及重启时检查更新。
如果发现更新,Vagrant 会向用户发出警告,让他们知道有更新可用。用户可以选择忽略该警告,或者可以通过运行 vagrant box update
来更新该 box。
Vagrant 不能也不会自动下载更新的机器并更新机器,因为机器可能相对较大,更新机器需要销毁机器并重新创建机器,这会导致重要数据丢失。因此,此过程是手动的,用户必须手动输入命令才能执行此操作。
4. 修剪旧版本
Vagrant 不会自动修剪旧版本,因为无法确认其是否可能被其他 Vagrant 环境使用。因为 box 可能很大,所以可能需要一段时间后通过使用 vagrant box remove
主动修剪它们。可以通过 vagrant box list
查看所有安装的 box。
另一种选择是使用 vagrant box prune
命令删除所有已经过期并且当前未使用的已安装 box。