Как я могу предоставить Dockerfile от Vagrant

Как я могу запустить настройку Docker через внешний файл Docker? Мой Vagrantfile выглядит так на данный момент

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.define :server_infrastructure do |t|
  end

  config.vm.provision "docker" do |d|
    d.pull_images "ubuntu"
    #how does the below work?
    #d.build "new-container-name" "local-docker-file-name"
  end
end

Ваша помощь с благодарностью

Ответы

Ответ 1

В v1.6.0 добавлена ​​опция для создателя изображений Docker для создания изображений. Загрузите последнюю версию с сайта бродяг.

Как только вы это сделаете, поместите файл Docker рядом с вашим Vagrantfile. Добавьте это в свой Vagrantfile:

config.vm.provision "docker" do |d|
  d.build_image "/vagrant", args: "-t my-name/my-new-image"
  d.run "my-name/my-new-image"
end

Теперь ваше изображение Docker будет построено и запущено с vagrant up.

Ответ 2

одно обходное решение - через предоставление оболочки:

config.vm.provision "shell", inline: "docker build -t username/image /vagrant; docker run -d username/image"

Ответ 3

Чтобы docker мог создать образ из файла docker, соответствующий файл dockerfile должен быть представлен на гостевой машине и способ обеспечить использование функции общих папок для бродяг.

По умолчанию vagrant монтирует корневую папку проекта в новый vm под именем/бродягой. Но в вашем случае я предлагаю вам поделиться другой папкой и поставить там свои док файлы. Также, поделившись другой папкой, вы можете убедиться, что ваши файлы докеров видны только для чтения гостевой машиной.

Теперь предположим, что вы создаете новую папку в корневой директории проектов с именем "докер" и помещаете в нее свои док файлы. Теперь, если вы установите эту папку на гостевую машину и запустите докер, чтобы использовать этот файл, вы все настроены. если вы добавите эти строки в ваш бродячий файл, он будет работать, как ожидалось.    config.vm.synced_folder "docker/", "/docker_builds", create: true, mount_options: ["ro"] config.vm.provision "docker" do |d| d.build_image "/docker_builds", args: "-t my-name/my-new-image" d.run "my-name/my-new-image" end