module Kapten::DockerApi

Public Class Methods

destroy(name) click to toggle source

Fully remove container

# File lib/kapten/docker.rb, line 129
def self.destroy(name)

  container = Kapten::DockerApi::get_container(name)

  if container

    container.stop
    container.delete(:force => true)
    return true

  end

  return false

end
get_container(name) click to toggle source

Get Docker container by Kapten name

# File lib/kapten/docker.rb, line 26
def self.get_container(name)

  begin

    container = Docker::Container.get('kapten_' + name)
    return container

  rescue

    return false

  end

end
get_image(image) click to toggle source

Get Docker image by name

# File lib/kapten/docker.rb, line 43
def self.get_image(image)

  begin

    image = Docker::Image.get( image )
    return image

  rescue

    return false

  end

end
has_docker?() click to toggle source

Check if Docker is installed

# File lib/kapten/docker.rb, line 7
def self.has_docker?

  begin

    version = Docker.version
    return true if version

  rescue

    return false

  end

  return false

end
start(name, image) click to toggle source

Start Docker container, attaches STDIN and STDOUT

# File lib/kapten/docker.rb, line 60
def self.start(name, image)

  container = Kapten::DockerApi::get_container(name)

  if not container

    # Pull image if not installed
    docker_image = Kapten::DockerApi::get_image( image )

    unless docker_image

      puts "First time running, installing environment (this might take a few minutes)...".green
      docker_image = Docker::Image.create( 'fromImage' => image )

    end


    puts "Creating environment...".green

    container = Docker::Container.create(
      'Image' => image,
      'name' => 'kapten_' + name,
      'Hostname' => name,
      'Cmd' => ['/bin/bash'],
      "OpenStdin" => true,
      "StdinOnce" => true,
      "Tty"       => true,
      "WorkingDir" => "/usr/src/" + name,
      "Hostconfig" => {
        "Binds" => [Dir.pwd + ":/usr/src/" + name]
      }
    )

  end

  container.start
  puts "---------------------------------".green
  puts 'Kapten: You\'re now inside the development environment, go wild! (use "exit" to get out of here)'.green


  # Connect to container shell with both STDIN and STDOUT
  require "io/console"
  STDIN.raw do |stdin|
    container.exec(["bash"], stdin: stdin, tty: true) do |chunk|
      print chunk
    end
  end

end
stop(name) click to toggle source

Stop running container

# File lib/kapten/docker.rb, line 112
def self.stop(name)

  container = Kapten::DockerApi::get_container(name)

  if container

    container.stop
    return true

  end

  return false

end