class Quay::Container

Public Class Methods

ensure_image(image) click to toggle source
# File lib/quay/container.rb, line 3
def self.ensure_image(image)
  Docker::Image.get(image)
rescue Docker::Error::NotFoundError
  Docker::Image.create('fromImage' => image)
end
start(name, container_config) click to toggle source
# File lib/quay/container.rb, line 9
def self.start(name, container_config)
  state = Quay::State.new
  env_lookup = Quay::EnvLookup.new(state)

  env = container_config.fetch(:env, {}).map do |k,v|
    if v =~ /^\$/
      value = env_lookup.get(v)
      "#{k}=#{value}"
    else
      "#{k}=#{v}"
    end
  end

  volumes = container_config.fetch(:volumes, []).map do |host, container, mode|
    [container, {}]
  end

  binds = container_config.fetch(:volumes, []).map do |*args|
    args.join(":")
  end

  opts = {
    'Image' => container_config[:image],
    'Cmd' => container_config[:cmd],
    'WorkingDir' => container_config[:working_dir],
    'Volumes' => Hash[volumes],
    'Env' => env,
  }
  ensure_image(container_config[:image])
  container = Docker::Container.create(opts)
  container.start('Binds' => binds)

  state.save_container(name, container.id)

  container
end
stop(name, dependency) click to toggle source
# File lib/quay/container.rb, line 46
def self.stop(name, dependency)
  state = Quay::State.new
  id = state.containers[name]

  return if id.nil?

  container = Docker::Container.get(id)
  container.stop

  state.remove_container(name)

  container
end