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