Module: Kapten::DockerApi

Defined in:
lib/kapten/docker.rb

Class Method Summary collapse

Class Method Details

.destroy(name) ⇒ Object

Fully remove container



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 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) ⇒ Object

Get Docker container by Kapten name



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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) ⇒ Object

Get Docker image by name



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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?Boolean

Check if Docker is installed

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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) ⇒ Object

Start Docker container, attaches STDIN and STDOUT



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 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) ⇒ Object

Stop running container



112
113
114
115
116
117
118
119
120
121
122
123
124
125
# 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