如何通过外部
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
非常感谢您的帮助
在 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
构建并运行。
一种解决方法是通过 shell 配置:
config.vm.provision "shell", inline: "docker build -t username/image /vagrant; docker run -d username/image"
为了让 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`