vagrant remove、halt和destroy有什么区别?

10

我在vagrant方面是一个初学者。在浏览与其相关的在线内容和文档时,我发现了三个vagrant命令,即 'destroy'、'remove' 和 'halt'。有人可以解释一下它们到底会做些什么吗?

我知道: DESTROY:此命令停止 Vagrant 管理的运行中的虚拟机,并销毁在创建虚拟机过程中创建的所有资源。运行此命令后,您的计算机应处于干净状态,就像您从未创建过客户机一样。

HALT:此命令关闭 Vagrant 正在管理的运行中的虚拟机。

REMOVE:此命令从 Vagrant 中删除与给定名称匹配的盒子。那么这是否会从硬盘中删除该盒子?

我无法想象这些命令的区别。 我的感觉是halt就像关闭VM。资源仍然分配给它。 destroy就像不存在VM的状态。 remove的意思是,甚至删除盒子。所以你必须重新下载。这正确吗?

2个回答

16

(Kevin回答得很对,+1!我为vagrant初学者提供一些更多的信息)

首先,你需要了解vagrant是如何工作的。

当你创建一个vagrant环境时,你会创建一个vagrant文件(你可以使用命令vagrant init bento/ubuntu-16.04)-- Vagrantfile看起来像这样(最小化)

Vagrant.configure("2") do |config|
    config.vm.box = "bento/ubuntu-16.04"
end
当您启动vagrant(vagrant up)来运行虚拟机时,它会执行以下操作:
  1. 从互联网上下载盒子bento/ubuntu-16.04(实际上这已经是一个虚拟机,将作为后续虚拟机的基础映像),一旦盒子下载完成,它将保留在$HOME/.vagrant.d/boxes文件夹中,并可用于任何其他Vagrantfile
  2. vagrant将克隆该盒子并在VirtualBox中创建一个虚拟机。 您可以打开Virtualbox查看可用虚拟机列表。虚拟机文件将存储在VirtualBox文件夹中。

您可以下载任意数量的盒子并将其存储在.vagrant.d文件夹中,并且您可以查看正在运行的可用盒子列表。

返回结果:当您启动vagrant(vagrant up)来运行虚拟机时,它会执行以上操作。
$ vagrant box list

您可以通过运行以下命令查看vagrant当前管理的虚拟机

$ vagrant global-status

现在来回答你的问题,这个命令会对不同层面产生影响:

  • vagrant halt 你理解得没错——如果想了解更多,请查看我之前的回答:在Vagrant中,halt和suspend哪个更好?

  • vagrant destroy 这个命令会销毁所有VM资源(但不会影响任何vagrant资源),因此所有VirtualBox VM文件都将被销毁,但框架本身不会受到影响。 你可以在运行vagrant destroy后运行vagrant box list以检查所有框架是否仍然存在。

  • vagrant remove 这个命令会删除(销毁)vagrant资源,因此如果您想稍后针对基础框创建新的VM,则需要重新从互联网下载。 请注意,在创建了VM之后,您可以删除框,vagrant仍将正常工作,因此vagrant remove不会影响VirtualBox资源,所有VM都将保持原样。


关于框使用的说明:

  • 您可以拥有相同框的多个版本

$ vagrant box list
bento/ubuntu-16.04                      (vmware_desktop, 2.3.0)
bento/ubuntu-16.04                      (vmware_desktop, 2.3.7)
  • 您可以为不同的提供商使用相同版本的盒子

  • $ vagrant box list
    bento/ubuntu-16.04                      (virtualbox, 201708.22.0)
    bento/ubuntu-16.04                      (vmware_desktop, 2.3.0)
    bento/ubuntu-16.04                      (vmware_desktop, 2.3.7)
    

    4

    欢迎来到SO!这是一个很好的问题。为了澄清,vagrant box remove YOUR_BOX_NAME 是用于完全删除一个盒子(box),例如 hashicorp/precise64,您需要重新下载才能使用它。而 vagrant destroy 只是销毁虚拟机,因此它将不会显示在您的管理器中,例如如果使用 Oracle VM Manager。希望这提供了澄清。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接