Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I convert a Docker image into a (vagrant) VirtualBox box?

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?

like image 851
Fredrik Wendt Avatar asked May 02 '14 20:05

Fredrik Wendt


People also ask

Can docker run in vagrant?

The Vagrant Docker provisioner can automatically install Docker, pull Docker containers, and configure certain containers to run on boot. The docker provisioner is ideal for organizations that are using Docker as a means to distribute things like their application or services.

Can docker run in VirtualBox?

Docker machines runs as a VirtualBox virtual machine as you're using the VirtualBox Docker Machine driver. So, it uses up your system memory (RAM). You may not want to run all the Docker machines at the same time. Instead, run only the machines you need.

Do you need vagrant with docker?

I'm the author of Docker. The short answer is that if you want to manage machines, you should use Vagrant. And if you want to build and run applications environments, you should use Docker. Vagrant is a tool for managing virtual machines.


2 Answers

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

like image 118
Chenna V Avatar answered Sep 22 '22 15:09

Chenna V


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.

like image 33
Emyl Avatar answered Sep 24 '22 15:09

Emyl