我一直在研究 Packer.io,并且很想用它来配置/准备我们的开发人员使用的 vagrant (VirtualBox) 盒子。
我知道我可以使用 VirtualBox Packer 构建器使用 VirtualBox 构建盒子,但是找到 Docker 的层堆叠以提供更快的盒子开发过程。
如何使用 Dockerfile 生成图像,然后将其导出为 Vagrant 框?
我一直在研究 Packer.io,并且很想用它来配置/准备我们的开发人员使用的 vagrant (VirtualBox) 盒子。
我知道我可以使用 VirtualBox Packer 构建器使用 VirtualBox 构建盒子,但是找到 Docker 的层堆叠以提供更快的盒子开发过程。
如何使用 Dockerfile 生成图像,然后将其导出为 Vagrant 框?
从中查找 docker 图像的大小docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mybuntu 1.01 7c142857o35 2 weeks ago 1.94 GB
根据镜像运行容器docker run mybuntu:1.01
从容器创建一个 QEMU 映像,另外,在第一个命令 ( seek=IMAGE_SIZE
) 中使用映像的大小。并且,对于docker export
命令,从中检索适当的容器 iddocker ps -a
dd if=/dev/zero of=mybuntu.img bs=1 count=0 seek=2G
mkfs.ext2 -F mybuntu.img
sudo mount -o loop mybuntu.img /mnt
docker export <CONTAINER-ID> | sudo tar x -C /mnt
sudo umount /mnt
用于qemu-utils
转换为 vmdk
sudo apt-get install qemu-utils
qemu-img convert -f raw -O vmdk mybuntu.img mybuntu.vmdk
有关可用于转换的格式的更多信息,请参见此处。现在您可以在 virtualbox 中导入 vmdk 文件
如果您的目标是 VirtualBox,那么在整个过程中使用 Vagrant 可能会更好。
Vagrant 附带一个docker 配置器,它可以自动在 vm 上安装 docker 并构建Dockerfile
:
Vagrant.configure("2") do |config|
config.vm.provision "docker" do |d|
d.build_image "/vagrant/app"
end
end
构建图像后,您可以使用该vagrant package
命令生成一个 vagrant box。
这是我要尝试的路线:
这将允许我使用 Docker 设置/配置机器,然后在通过 vagrant 控制的 Virtualbox 中运行它。