vagrant box repackage(docs)和vagrant package(docs)之间有什么区别?
我意识到vagrant package这只适用于VirtualBox提供程序,但是如果只使用VirtualBox - 有什么区别?也许vagrant package创造了一个特定的原因?
Fré*_*nri 13
流浪包
如果你有一个正在运行的VirtualBox VM,你首先创建没有流浪者,使用VirtualBox做你的事情,现在你想使用Vagrant来管理这个VM.当vagrant需要启动VM时,您将运行vagrant package基于现有VirtualBox VM创建一个vagrant框
流浪汉重新包装
当您的系统上安装了现有的vagrant box时,您将使用此选项.所以你在给定的盒子里使用vagrant,你将再次对VM进行更改,并且你想将这些更改(安装的软件......)保存为一个新的盒子,你将vagrant repackage在这个盒子上运行,它将创建一个更新的版本这个框可以用作新VM的起始框.
我将用 macOS 上 VirtualBox 提供程序的具体示例来回答,但这可以推广到任何主机上的任何提供程序。虽然没有被 op 询问,但我也会解释,--base NAME因为我认为这有助于澄清差异。我也会用--output OUTPUT_NAME来区分包装好的盒子。
~/code/vagrant/vm1 > vagrant package --output vm1-package.box
./.vagrant/...目录中找到的当前正在运行的 VMtar)所有内容./vm1-package.box==> vm1: Attempting graceful shutdown of VM...
==> vm1: Clearing any previously set forwarded ports...
==> vm1: Exporting VM...
==> vm1: Compressing package to: /Users/user/code/vagrant/vm1/vm1-package.box
Run Code Online (Sandbox Code Playgroud)
验证:
~/code/vagrant/vm1 > tar -C /tmp/vm1 -xvf ./vm1-package.box
x ./vagrant_private_key
x ./metadata.json
x ./box.ovf
x ./Vagrantfile
x ./box-disk001.vmdk
Run Code Online (Sandbox Code Playgroud)
由于这打包了Vagrant管理的当前正在运行的 VM ,因此上面的列表包含vagrant_private_key文件(由打包的 加载Vagrantfile)。
现在,我们可以将此框添加到 Vagrant 的内部存储中~/.vagrant.d:
~/code/vagrant/vm1 > vagrant box 添加 vm1-package.box --name vm1
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'vm1' (v0) for provider:
box: Unpacking necessary files from: file:///Users/user/code/vagrant/vm1/vm1-package.box
==> box: Successfully added box 'vm1' (v0) for 'virtualbox'!
Run Code Online (Sandbox Code Playgroud)
您还可以通过以下方式验证:
~/code/vagrant/vm1 > ls -lF ~/.vagrant.d/boxes/vm1/0/virtualbox/
total 1152400
-rw-r--r-- 1 user staff 630 13 Dec 16:26 Vagrantfile
-rw-r--r-- 1 user staff 575710720 13 Dec 16:26 box-disk001.vmdk
-rwx------ 1 user staff 6838 13 Dec 16:26 box.ovf*
-rw-r--r-- 1 user staff 25 13 Dec 16:26 metadata.json
-rw------- 1 user staff 1675 13 Dec 16:26 vagrant_private_key
Run Code Online (Sandbox Code Playgroud)
~/code/vagrant/vm1 >流浪箱列表
hashicorp/bionic64 (virtualbox, 1.0.282)
vm1 (virtualbox, 0)
Run Code Online (Sandbox Code Playgroud)
~/code/vagrant/vm1 > vagrant package --base vm1 --output vm1-base-package.box
./.vagrant/...目录中找到的当前正在运行的 VMtar)所有内容./vm1-base-package.box==> vm1: Exporting VM...
==> vm1: Compressing package to: /Users/user/code/vagrant/vm1/vm1-base-package.box
Run Code Online (Sandbox Code Playgroud)
验证:
~/code/vagrant/vm1 > tar -C /tmp/vm1-base -xvf ./vm1-base-package.box
x ./metadata.json
x ./box.ovf
x ./Vagrantfile
x ./box-disk001.vmdk
Run Code Online (Sandbox Code Playgroud)
由于这打包了Virtualbox管理的当前运行的 VM ,因此上面的列表不包含该vagrant_private_key文件。
现在,我们可以将此框添加到 Vagrant 的内部存储中~/.vagrant.d:
~/code/vagrant/vm1 > vagrant box 添加 vm1-base-package.box --name vm1-base
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'vm1-base' (v0) for provider:
box: Unpacking necessary files from: file:///Users/user/code/vagrant/vm1/vm1-base-package.box
==> box: Successfully added box 'vm1-base' (v0) for 'virtualbox'!
Run Code Online (Sandbox Code Playgroud)
~/code/vagrant/vm1 >流浪箱列表
hashicorp/bionic64 (virtualbox, 1.0.282)
vm1 (virtualbox, 0)
vm1-base (virtualbox, 0)
Run Code Online (Sandbox Code Playgroud)
~/code/vagrant/vm1 > ls -lF *.box
-rw-r--r-- 1 user staff 561848649 13 Dec 16:50 vm1-base-package.box
-rw-r--r-- 1 user staff 561767838 13 Dec 16:19 vm1-package.box
Run Code Online (Sandbox Code Playgroud)
如果从当前目录中删除 box 文件...
~/code/vagrant/vm1 > rm *.box
......你现在可以vagrant repackage用来让他们回来:
~/code/vagrant/vm1 > vagrant box 重新打包 vm1 virtualbox 0
这会从 Vagrant 的内部存储中获取文件,~/.vagrant.d/...并将它们重新打包到当前目录中名为 package.box 的框中。在这种情况下,您无法使用该命令命名文件,因此您可能需要重命名它:
~/code/vagrant/vm1 > mv package.box vm1-package.box
和基本框:
~/code/vagrant/vm1 > vagrant box 重新打包 vm1-base virtualbox 0 ~/code/vagrant/vm1 > mv package.box vm1-base.box ~/code/vagrant/vm1 > ls -lF *.box
-rw-r--r-- 1 user staff 561848571 13 Dec 17:28 vm1-base.box
-rw-r--r-- 1 user staff 561767855 13 Dec 17:24 vm1-package.box
Run Code Online (Sandbox Code Playgroud)
该手册对vagrant package带有和不带有 --base 选项的命令的语法不是很清楚。我认为澄清应该是:
vagrant package [options] [vm_name|vm_id]
Run Code Online (Sandbox Code Playgroud)
需要指定如果没有指定[vm_name|vm_id],则打包当前运行的VM,否则打包[vm_name|vm_id]指定的VM。
它还应该指定,如果您使用 --base 选项,命令应该是:
vagrant package --base MANDATORY_NAME [vm_name|id]
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,[vm_name|id] 被完全忽略,因为 VM 已经由 MANDATORY_NAME 指定
我通过发出以下命令验证了这一点: vagrant package --base vm1 --output vm1-base-package.box non-existent-vm-name 并且它仍然生成 vm1-base-package.box 没有任何错误。
| 归档时间: |
|
| 查看次数: |
4293 次 |
| 最近记录: |