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)


33
34
35
# File 'lib/dory/docker_service.rb', line 33

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

#delete(container_name = self.container_name) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/dory/docker_service.rb', line 56

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

#has_docker_client?Boolean

Returns:

  • (Boolean)


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

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

#ps(all: false) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/dory/docker_service.rb', line 37

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

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

Returns:

  • (Boolean)


29
30
31
# File 'lib/dory/docker_service.rb', line 29

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

#startObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/dory/docker_service.rb', line 5

def start
  unless self.running?
    success = if self.container_exists?
                if Dory::Config.debug?
                  puts "[DEBUG] Container '#{self.container_name}' already exists.  " \
                       "Starting with '#{self.start_cmd}'"
                end
                Sh.run_command(self.start_cmd).success?
              else
                if Dory::Config.debug?
                  puts "[DEBUG] Container '#{self.container_name}' does not exist.  " \
                       "Creating/starting with '#{self.run_cmd}'"
                end
                Sh.run_command(self.run_cmd).success?
              end
    unless success
      raise RuntimeError.new(
        "Failed to run #{self.container_name}.  Command #{self.run_cmd} failed"
      )
    end
  end
  self.running?
end

#start_cmdObject



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

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

#stop(container_name = self.container_name) ⇒ Object



51
52
53
54
# File 'lib/dory/docker_service.rb', line 51

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