provisioners/docker: build images using new DSL
This commit is contained in:
parent
31b239fba2
commit
2ca498a5dd
|
@ -7,6 +7,15 @@ module VagrantPlugins
|
||||||
@machine = machine
|
@machine = machine
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_images(images)
|
||||||
|
@machine.communicate.tap do |comm|
|
||||||
|
images.each do |path, opts|
|
||||||
|
@machine.ui.info(I18n.t("vagrant.docker_building_single", path: path))
|
||||||
|
comm.sudo("docker build #{image[:args]} #{path}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def pull_images(*images)
|
def pull_images(*images)
|
||||||
@machine.communicate.tap do |comm|
|
@machine.communicate.tap do |comm|
|
||||||
images.each do |image|
|
images.each do |image|
|
||||||
|
@ -16,16 +25,6 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_images(images)
|
|
||||||
@machine.communicate.tap do |comm|
|
|
||||||
images.each do |image|
|
|
||||||
path = image[:path]
|
|
||||||
@machine.ui.info(I18n.t("vagrant.docker_building_single", path: path))
|
|
||||||
comm.sudo("docker build #{image[:args]} #{path}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def start_service
|
def start_service
|
||||||
if !daemon_running? && @machine.guest.capability?(:docker_start_service)
|
if !daemon_running? && @machine.guest.capability?(:docker_start_service)
|
||||||
@machine.guest.capability(:docker_start_service)
|
@machine.guest.capability(:docker_start_service)
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'set'
|
||||||
module VagrantPlugins
|
module VagrantPlugins
|
||||||
module Docker
|
module Docker
|
||||||
class Config < Vagrant.plugin("2", :config)
|
class Config < Vagrant.plugin("2", :config)
|
||||||
attr_reader :images, :containers, :build_options
|
attr_reader :build_images, :images, :containers, :build_options
|
||||||
attr_accessor :version
|
attr_accessor :version
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
@ -13,6 +13,14 @@ module VagrantPlugins
|
||||||
@build_images = []
|
@build_images = []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Defines an image to build using `docker build` within the machine.
|
||||||
|
#
|
||||||
|
# @param [String] path Path to the Dockerfile to pass to
|
||||||
|
# `docker build`.
|
||||||
|
def build_image(path, **opts)
|
||||||
|
@build_images << [path, opts]
|
||||||
|
end
|
||||||
|
|
||||||
def images=(images)
|
def images=(images)
|
||||||
@images = Set.new(images)
|
@images = Set.new(images)
|
||||||
end
|
end
|
||||||
|
@ -21,12 +29,6 @@ module VagrantPlugins
|
||||||
@images += images.map(&:to_s)
|
@images += images.map(&:to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_images(*images)
|
|
||||||
@build_images = images.map do |image|
|
|
||||||
image.values_at(:path, :args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def run(name, **options)
|
def run(name, **options)
|
||||||
params = options.dup
|
params = options.dup
|
||||||
params[:image] ||= name
|
params[:image] ||= name
|
||||||
|
|
|
@ -7,8 +7,6 @@ module VagrantPlugins
|
||||||
error_namespace("vagrant.provisioners.docker")
|
error_namespace("vagrant.provisioners.docker")
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: Improve handling of vagrant-lxc specifics (like checking for apparmor
|
|
||||||
# profile stuff + autocorrection)
|
|
||||||
class Provisioner < Vagrant.plugin("2", :provisioner)
|
class Provisioner < Vagrant.plugin("2", :provisioner)
|
||||||
def initialize(machine, config, installer = nil, client = nil)
|
def initialize(machine, config, installer = nil, client = nil)
|
||||||
super(machine, config)
|
super(machine, config)
|
||||||
|
|
|
@ -5,6 +5,17 @@ require Vagrant.source_root.join("plugins/provisioners/docker/config")
|
||||||
describe VagrantPlugins::Docker::Config do
|
describe VagrantPlugins::Docker::Config do
|
||||||
subject { described_class.new }
|
subject { described_class.new }
|
||||||
|
|
||||||
|
describe "#build_image" do
|
||||||
|
it "stores them" do
|
||||||
|
subject.build_image("foo")
|
||||||
|
subject.build_image("bar", foo: :bar)
|
||||||
|
subject.finalize!
|
||||||
|
expect(subject.build_images.length).to eql(2)
|
||||||
|
expect(subject.build_images[0]).to eql(["foo", {}])
|
||||||
|
expect(subject.build_images[1]).to eql(["bar", { foo: :bar }])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#images" do
|
describe "#images" do
|
||||||
it "stores them in a set" do
|
it "stores them in a set" do
|
||||||
subject.images = ["1", "1", "2"]
|
subject.images = ["1", "1", "2"]
|
||||||
|
|
|
@ -36,6 +36,40 @@ for you (if it isn't already installed).
|
||||||
* `version` (string) - The version of Docker to install. This defaults to
|
* `version` (string) - The version of Docker to install. This defaults to
|
||||||
"latest" and will install the latest version of Docker.
|
"latest" and will install the latest version of Docker.
|
||||||
|
|
||||||
|
In addition to the options that can be set, various functions are available
|
||||||
|
and can be called to configure other aspects of the Docker provisioner. Most
|
||||||
|
of these functions have examples in more detailed sections below.
|
||||||
|
|
||||||
|
* `build_image` - Build an image from a Dockerfile.
|
||||||
|
|
||||||
|
* `pull_images` - Pull the given images. This does not start these images.
|
||||||
|
|
||||||
|
* `run` - Run a container and configure it to start on boot.
|
||||||
|
|
||||||
|
## Building Images
|
||||||
|
|
||||||
|
The provisioner can automatically build images. Images are built prior to
|
||||||
|
any configured containers to run, so you can build an image before running it.
|
||||||
|
Building an image is easy:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
config.vm.provision "docker" do |d|
|
||||||
|
d.build_image "/vagrant/app"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
The argument to build an image is the path to give to `docker build`. This
|
||||||
|
must be a path that exists within the guest machine. If you need to get data
|
||||||
|
to the guest machine, use a synced folder.
|
||||||
|
|
||||||
|
The `build_image` function accepts options as a second parameter. Here
|
||||||
|
are the available options:
|
||||||
|
|
||||||
|
* `args` (string) - Additional arguments to pass to `docker build`. Use this
|
||||||
|
to pass in things like `-t "foo"` to tag the image.
|
||||||
|
|
||||||
## Pulling Images
|
## Pulling Images
|
||||||
|
|
||||||
The docker provisioner can automatically pull images from the
|
The docker provisioner can automatically pull images from the
|
||||||
|
|
Loading…
Reference in New Issue