我一直在研究Packer.io,并希望将其用于为我们的开发人员准备Vagrant(VirtualBox)虚拟机。
我知道可以使用VirtualBox Packer builder构建虚拟机,但发现Docker的层叠方式能够提供更快的虚拟机开发流程。
我该如何使用Dockerfile生成镜像并将其导出为Vagrant虚拟机?
我一直在研究Packer.io,并希望将其用于为我们的开发人员准备Vagrant(VirtualBox)虚拟机。
我知道可以使用VirtualBox Packer builder构建虚拟机,但发现Docker的层叠方式能够提供更快的虚拟机开发流程。
我该如何使用Dockerfile生成镜像并将其导出为Vagrant虚拟机?
从 docker images
命令中查找 Docker 镜像的大小。
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
命令,从 docker ps -a
中检索适当的容器ID。
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文件。
Vagrant.configure("2") do |config|
config.vm.provision "docker" do |d|
d.build_image "/vagrant/app"
end
end
构建好镜像后,您可以使用vagrant package
命令生成vagrant box。
这是我要尝试的路线:
这将使我能够使用Docker设置/提供机器,然后在Virtualbox中运行它,并通过vagrant进行控制。