class Conjure::Docker::Template

Public Class Methods

new(base_image_name) click to toggle source
# File lib/conjure/docker/template.rb, line 7
def initialize(base_image_name)
  @commands = ["FROM #{base_image_name}"]
  @file_data = {}
end

Public Instance Methods

add_file(filename, remote_name) click to toggle source
# File lib/conjure/docker/template.rb, line 12
def add_file(filename, remote_name)
  add_file_data File.read(filename), remote_name
end
add_file_data(data, remote_name) click to toggle source
# File lib/conjure/docker/template.rb, line 16
def add_file_data(data, remote_name)
  local_name = "file#{@file_data.length+1}"
  @file_data[local_name] = data
  @commands << "ADD #{local_name} #{remote_name}"
end
environment(hash) click to toggle source
# File lib/conjure/docker/template.rb, line 34
def environment(hash)
  hash.each { |key, value| @commands << "ENV #{key} #{value}" }
end
run(command) click to toggle source
# File lib/conjure/docker/template.rb, line 22
def run(command)
  @commands << "RUN #{command}"
end
source() click to toggle source
# File lib/conjure/docker/template.rb, line 30
def source
  @commands.join "\n"
end
start(container_host, command, options = {}) click to toggle source
# File lib/conjure/docker/template.rb, line 38
def start(container_host, command, options = {})
  if container_names(options).all? { |name| container_host.running? name }
    puts "Detected all #{options[:name]} containers running."
  else
    puts "Building #{options[:name]} base image..."
    image_name = container_host.build(image_source_files)
    options = options.merge(volume_options(container_host, image_name, options)) if options[:volumes]
    container_host.start(image_name, command, options)
  end
end
volume(name) click to toggle source
# File lib/conjure/docker/template.rb, line 26
def volume(name)
  @commands << "VOLUME #{name}"
end

Private Instance Methods

container_names(options) click to toggle source
# File lib/conjure/docker/template.rb, line 51
def container_names(options)
  [options[:name]] + options[:volumes].to_h.keys
end
image_source_files() click to toggle source
# File lib/conjure/docker/template.rb, line 66
def image_source_files
  @file_data.merge "Dockerfile" => @commands.join("\n")
end
volume_options(container_host, image_name, options) click to toggle source
# File lib/conjure/docker/template.rb, line 55
def volume_options(container_host, image_name, options)
  {
    volume_containers: options[:volumes].map do |name, path|
      volume_template = Docker::Template.new(image_name)
      volume_template.volume path
      volume_template.start(container_host, "/bin/true", name: name)
      name
    end
  }
end