如何使用Packer从Vagrant box创建虚拟机映像?

6
我知道可以使用Packer以脚本方式创建自己的虚拟机镜像。如果我使用VirtualBox builder,我可以选择两种类型之一:从头开始构建或在现有虚拟机上进行构建。
基本上,我想实现的是在现有的Vagrant box(Ubuntu 15.04 with Docker by Boxcutter)上进行构建。
使用Packer是否可能实现这一点?如果可以,如何实现?我在文档中没有找到任何相关信息。示例始终仅涉及OVF / OVA文件。有什么提示吗?
1个回答

7
这并不是Packer原生支持的工作流程,但您可以编写一个小的Shell脚本来下载Vagrant box,导出OVF,然后启动Packer的virtualbox-ovf构建器。
Shell脚本(请注意,此处硬编码为1.1.0版本的Box)
#!/bin/sh

vagrant init boxcutter/ubuntu1504-docker
vagrant up --provider virtualbox --no-provision
vagrant halt

rm -rf output-virtualbox-ovf
packer build packer.json

packer.json

{
  "variables": {
    "home": "{{env `HOME`}}"
  },
  "builders": [{
    "type": "virtualbox-ovf",
    "source_path": "{{user `home`}}/.vagrant.d/boxes/boxcutter-VAGRANTSLASH-ubuntu1504-docker/1.1.0/virtualbox/box.ovf",
    "ssh_username": "vagrant",
    "ssh_password": "vagrant",
    "ssh_wait_timeout": "30s",
    "shutdown_command": "echo 'packer' | sudo -S shutdown -P now"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": ["echo 'my additional provisioning steps'"]
  }],
  "post-processors": [{
    "type": "vagrant",
    "keep_input_artifact": true,
    "output": "box/modified-boxcutter-VAGRANTSLASH-ubuntu1504-docker.box"
  }]
}

这将创建一个新的 Vagrant box,打包在 box/modified-boxcutter-VAGRANTSLASH-ubuntu1504-docker.box 中。

3
执行命令 vagrant box add boxcutter/ubuntu1504-docker --provider virtualbox 即可下载并解压 Vagrant.box,无需启动任何虚拟机。 - Stefan Scherer
另外值得一提的是,上述的启动/停止工作流程也会忽略通过启动实例创建的任何状态(例如ssh主机密钥、日志文件等)。 - EmmEff

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