Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a Vagrant box to a Docker image

Tags:

I saw that it's possible to convert a Docker image into a Vagrant box.

Is there a way to convert a Vagrant box into a Docker image?

like image 243
Roman Iuvshin Avatar asked Jul 09 '15 14:07

Roman Iuvshin


People also ask

Can Docker replace Vagrant?

One big difference between Docker and Vagrant is that Docker containers run on Linux, but Vagrant files can contain any operating system. That said, Docker does work with non-Linux operating systems. It just needs to run within a Linux virtual machine.

Can you use Vagrant with Docker?

Vagrant comes with support out of the box for using Docker as a provider. This allows for your development environments to be backed by Docker containers rather than virtual machines. Additionally, it provides for a good workflow for developing Dockerfiles.


1 Answers

I replayed this with EC2 boxes and Virtualbox boxes in my Github project blacklabelops/centos. I have prepared a Vagrantfile with the necessary installation and you can try it yourself with your Vagrant boxes.

EC2 boxes:

  • Create and provision an AMI image with https://github.com/katzj/ami-creator - Skripts in my repository.

  • Afterwards use Guestfish in order to extract the image into a tarball. - Skripts in my repository.

  • Import the tarball inside Docker. - Example in my repository.

And now with Vagrant Virtualbox, commands can be replayed with my provided Vagrantfile. Just clone the repository, spin it up and type:

$ qemu-img convert -f vmdk -O raw MyTry-disk1.vmdk mytry.img 

The Vagrant box's VMDK can be found in the Virtualbox folder, usually ~/VirtualBox\ VMs/.

After the raw has been created you can apply Guestfish.

$ guestfish -a mytry.img --ro $ ><fs> run 

Note: tty

$ ><fs> list-filesystems  /dev/sda1: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap $ ><fs> mount /dev/VolGroup/lv_root / $ ><fs> tar-out / - | xz --best >>  mytry.xz $ ><fs> exit 

Note: exiting tty

Importing into docker:

$ cat mytry.xz | docker import - mytryimage 

Look inside the container

$ docker run -it mytryimage bash 
like image 103
blacklabelops Avatar answered Oct 02 '22 22:10

blacklabelops