Module: Dory::DockerService

Included in:
Dnsmasq, Proxy
Defined in:
lib/dory/docker_service.rb

Instance Method Summary collapse

Instance Method Details

#container_exists?(container_name = self.container_name) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/dory/docker_service.rb', line 46

def container_exists?(container_name = self.container_name)
  !!(self.ps(all: true) =~ /#{container_name}/)
end

#delete(container_name = self.container_name) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/dory/docker_service.rb', line 69

def delete(container_name = self.container_name)
  if self.container_exists?
    self.stop if self.running?
    Sh.run_command("docker rm #{Shellwords.escape(container_name)}")
  end
  !self.container_exists?
end

#handle_error(command_output) ⇒ Object



10
11
12
13
# File 'lib/dory/docker_service.rb', line 10

def handle_error(command_output)
  # Override to provide error handling
  return false
end

#has_docker_client?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/dory/docker_service.rb', line 60

def has_docker_client?
  Sh.run_command('which docker').success?
end

#ps(all: false) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/dory/docker_service.rb', line 50

def ps(all: false)
  cmd = "docker ps#{all ? ' -a' : ''}"
  ret = Sh.run_command(cmd)
  if ret.success?
    return ret.stdout
  else
    raise RuntimeError.new("Failure running command '#{cmd}'")
  end
end

#run_preconditionsObject



5
6
7
8
# File 'lib/dory/docker_service.rb', line 5

def run_preconditions
  # Override if preconditions are needed
  return true
end

#running?(container_name = self.container_name) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/dory/docker_service.rb', line 42

def running?(container_name = self.container_name)
  !!(self.ps =~ /#{container_name}/)
end

#start(handle_error: true) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/dory/docker_service.rb', line 15

def start(handle_error: true)
  if self.running?
    if Dory::Config.debug?
      puts "[DEBUG] Container '#{self.container_name}' is already running. Doing nothing"
    end
  else
    self.run_preconditions
    if self.container_exists?
      puts "[DEBUG] Container '#{self.container_name}' exists.  Deleting" if Dory::Config.debug?
      self.delete
    end
    if Dory::Config.debug?
      puts "[DEBUG] '#{self.container_name} does not exist.  Creating/starting " \
           "'#{self.container_name}' with '#{self.run_command}'"
    end
    status = Sh.run_command(self.run_command)
    unless status.success?
      if !handle_error || !self.handle_error(status)
        raise RuntimeError.new(
          "Failed to run #{self.container_name}.  Command #{self.run_command} failed"
        )
      end
    end
  end
  self.running?
end

#start_cmdObject



77
78
79
# File 'lib/dory/docker_service.rb', line 77

def start_cmd
  "docker start #{Shellwords.escape(self.container_name)}"
end

#stop(container_name = self.container_name) ⇒ Object



64
65
66
67
# File 'lib/dory/docker_service.rb', line 64

def stop(container_name = self.container_name)
  Sh.run_command("docker kill #{Shellwords.escape(container_name)}") if self.running?
  !self.running?
end