如何从 Vagrant 提供 Dockerfile

问题描述 投票:0回答:3

如何通过外部

Dockerfile
开始配置 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

非常感谢您的帮助

vagrant docker
3个回答
30
投票

v1.6.0 中添加了 Docker 配置程序构建映像的选项。从 Vagrant 网站下载最新版本。

完成此操作后,请在

Dockerfile
旁边放置
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
构建并运行。


3
投票

一种解决方法是通过 shell 配置:

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

1
投票

为了让 docker 从

dockerfile
构建镜像,所涉及的
dockerfile
必须出现在来宾计算机中,确保这一点的方法是使用 vagrant 的共享文件夹功能。

默认情况下,vagrant 将项目根文件夹挂载到名称为

/vagrant
的新虚拟机中。但就你而言,我建议你共享一个不同的文件夹并将你的 dockerfiles 放在那里。此外,通过共享不同的文件夹,您可以确保您的 dockerfile 在来宾计算机上是只读的。

现在假设您在项目根目录中创建一个名为“docker”的新文件夹,并将 dockerfiles 放入其中。现在,如果您将此文件夹安装到您的来宾计算机并指向 docker 使用该文件,那么您就已准备就绪。如果您将这些行添加到您的 vagrant 文件中,它将按预期工作。

    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`
© www.soinside.com 2019 - 2024. All rights reserved.