Как я могу преобразовать образ Docker в (бродячий) ящик VirtualBox?

Я смотрел на Packer.io и хотел бы использовать его для предоставления/подготовки ящиков vagrant (VirtualBox), используемых нашими разработчиками.

Я знаю, что мог бы создавать блоки с VirtualBox, используя компоновщик VirtualBox Packer, но нашел стек слоев Docker, чтобы обеспечить гораздо более быстрый процесс разработки блоков.

Как мне создать образ с Dockerfile, а затем экспортировать его как Vagrant box?


person Fredrik Wendt    schedule 02.05.2014    source источник
comment
Этот вопрос заслуживает чрезвычайно хорошего отношения голосов к лучшему ответу.   -  person jchook    schedule 21.09.2019


Ответы (3)


Найдите размер образа докера из 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 получить соответствующий идентификатор контейнера из 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

Используйте qemu-utils для преобразования в vmdk

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

Дополнительную информацию о форматах, доступных для преобразования, можно найти здесь. Теперь вы можете импортировать файл vmdk в виртуальный бокс.

person blueskin    schedule 16.03.2017
comment
Как бы вы сделали это под OSX? - person Javier Buzzi; 25.05.2017
comment
Это выглядит очень хорошо написанным сценарием... Я попробую и дам вам знать. - person Andrew Wolfe; 15.02.2018

При условии, что вашей целью является VirtualBox, вероятно, было бы лучше, если бы вы использовали Vagrant для всего процесса.

Vagrant поставляется с установщиком Docker, который может автоматически устанавливать Docker на виртуальную машину и создавать Dockerfile:

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

После создания образа вы можете создать бродячий блок с помощью команды vagrant package.

person Emyl    schedule 03.05.2014
comment
Да, я очень хорошо знаю об этом, и смысл этого вопроса заключался в том, чтобы НЕ использовать бродячий Builder Packer, а это именно то, что вы предлагаете. - person Fredrik Wendt; 03.05.2014