class RakeDocker::Container::Provisioner
Attributes
environment[R]
image[R]
name[R]
ports[R]
ready[R]
reporter[R]
Public Class Methods
new(name, image, opts = {})
click to toggle source
# File lib/rake_docker/container.rb, line 146 def initialize(name, image, opts = {}) @name = name @image = image @environment = opts[:environment] || {} @ports = opts[:ports] || [] @ready = opts[:ready?] @reporter = opts[:reporter] || NullReporter.new end
Public Instance Methods
execute()
click to toggle source
# File lib/rake_docker/container.rb, line 155 def execute reporter.checking_if_container_exists(name) container = find_container(name) if container reporter.container_exists(container) ensure_container_running(container) else reporter.container_does_not_exist(name) ensure_image_available(image) create_and_start_container(name, image, ports, environment) end reporter.done end
Private Instance Methods
container_running?(container)
click to toggle source
# File lib/rake_docker/container.rb, line 231 def container_running?(container) container_status(container) == 'running' end
container_status(container)
click to toggle source
# File lib/rake_docker/container.rb, line 235 def container_status(container) container.json['State']['Status'] end
create_and_start_container(name, image, ports, environment)
click to toggle source
# File lib/rake_docker/container.rb, line 199 def create_and_start_container(name, image, ports, environment) start_container(create_container(image, name, ports, environment)) end
create_container(image, name, ports, environment)
click to toggle source
# File lib/rake_docker/container.rb, line 203 def create_container(image, name, ports, environment) exposed_ports, port_bindings = process_ports(ports) reporter.creating_container(name, image) container = Docker::Container.create( name: name, Image: image, ExposedPorts: exposed_ports, HostConfig: { PortBindings: port_bindings }, Env: environment) container = enhance_with_name(container, name) reporter.container_created(container) container end
ensure_container_running(container)
click to toggle source
# File lib/rake_docker/container.rb, line 188 def ensure_container_running(container) reporter.checking_if_container_running(container) container = find_container(name) if !container_running?(container) reporter.container_not_running(container) start_container(container) else reporter.container_running(container) end end
ensure_image_available(image)
click to toggle source
# File lib/rake_docker/container.rb, line 171 def ensure_image_available(image) reporter.checking_if_image_available(image) matching_images = Docker::Image.all(filter: image) if matching_images.empty? reporter.image_not_available(image) pull_image(image) else reporter.image_available(image) end end
process_ports(ports)
click to toggle source
# File lib/rake_docker/container.rb, line 239 def process_ports(ports) port_config = ports.reduce({ exposed_ports: {}, port_bindings: {} }) do |accumulator, port| host_port, container_port = port.split(':') accumulator[:exposed_ports]["#{container_port}/tcp"] = {} accumulator[:port_bindings]["#{container_port}/tcp"] = [{:'HostPort' => host_port}] accumulator end [port_config[:exposed_ports], port_config[:port_bindings]] end
pull_image(image)
click to toggle source
# File lib/rake_docker/container.rb, line 182 def pull_image(image) reporter.pulling_image(image) Docker::Image.create(fromImage: image) reporter.image_pulled(image) end
start_container(container)
click to toggle source
# File lib/rake_docker/container.rb, line 219 def start_container(container) reporter.starting_container(container) container.start reporter.container_started(container) if ready && ready.respond_to?(:call) reporter.waiting_for_container_to_be_ready(container) ready.call(container) reporter.container_ready(container) end container end