문제

I've been looking at Packer.io, and would love to use it to provision/prepare the vagrant (VirtualBox) boxes used by our developers.

I know I could build the boxes with VirtualBox using the VirtualBox Packer builder, but find the layer stacking of Docker to provide a much faster development process of the boxes.

How do I produce the image with a Dockerfile and then export it as a Vagrant box?

도움이 되었습니까?

해결책

Find the size of the docker image from docker images

REPOSITORY   TAG    IMAGE ID       CREATED             SIZE
mybuntu   1.01   7c142857o35   2 weeks ago         1.94 GB

Run a container based on the image docker run mybuntu:1.01

Create a QEMU image from the container, Also, use the size of the image in the first command (seek=IMAGE_SIZE). And, for the docker export command retrieve the appropriate container id from docker 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

Use qemu-utils to convert to vmdk

sudo apt-get install qemu-utils
qemu-img convert -f raw -O vmdk mybuntu.img mybuntu.vmdk

More info on formats that are available for conversion can be found here. Now you can import the vmdk file in virtualbox

다른 팁

Provided that your target is VirtualBox, it could be probably better if you use Vagrant for the whole process.

Vagrant ships with a docker provisioner that could automatically install docker on the vm and build a Dockerfile:

Vagrant.configure("2") do |config|
  config.vm.provision "docker" do |d|
    d.build_image "/vagrant/app"
  end
end 

Once your image is built, you can produce a vagrant box using the vagrant package command.

This is the route I'm going to try:

This will allow me to setup/provision the machine using Docker, and then run it in Virtualbox controlled via vagrant.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top