module Dory::DockerService
Public Class Methods
docker_installed?()
click to toggle source
# File lib/dory/docker_service.rb, line 6 def self.docker_installed? Sh.run_command('which docker').success? end
Public Instance Methods
container_exists?(container_name = self.container_name)
click to toggle source
# File lib/dory/docker_service.rb, line 55 def container_exists?(container_name = self.container_name) !!(self.ps(all: true) =~ /#{container_name}/) end
delete(container_name = self.container_name)
click to toggle source
# File lib/dory/docker_service.rb, line 74 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
delete_container_if_exists()
click to toggle source
# File lib/dory/docker_service.rb, line 86 def delete_container_if_exists if self.container_exists? puts "[DEBUG] Container '#{self.container_name}' exists. Deleting" if Dory::Config.debug? self.delete end end
docker_installed?()
click to toggle source
# File lib/dory/docker_service.rb, line 10 def docker_installed? Dory::DockerService.docker_installed? end
execute_run_command(handle_error:)
click to toggle source
# File lib/dory/docker_service.rb, line 93 def execute_run_command(handle_error:) begin 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) puts "Failed to start docker container '#{self.container_name}' " \ ". Command '#{self.run_command}' failed".red end end rescue Dory::Dinghy::DinghyError => e puts e.message.red end status end
handle_error(_command_output)
click to toggle source
# File lib/dory/docker_service.rb, line 24 def handle_error(_command_output) # Override to provide error handling return false end
ps(all: false)
click to toggle source
# File lib/dory/docker_service.rb, line 59 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_postconditions()
click to toggle source
# File lib/dory/docker_service.rb, line 19 def run_postconditions # Override if postconditions are needed return true end
run_preconditions()
click to toggle source
# File lib/dory/docker_service.rb, line 14 def run_preconditions # Override if preconditions are needed return true end
running?(container_name = self.container_name)
click to toggle source
# File lib/dory/docker_service.rb, line 50 def running?(container_name = self.container_name) return false unless docker_installed? !!(self.ps =~ /#{container_name}/) end
start(handle_error: true)
click to toggle source
# File lib/dory/docker_service.rb, line 29 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 if docker_installed? self.delete_container_if_exists self.run_preconditions self.execute_run_command(handle_error: handle_error) self.run_postconditions else err_msg = "Docker does not appear to be installed /o\\\n" \ "Docker is required for DNS and Nginx proxy. These can be " \ "disabled in the config file if you don't need them." puts err_msg.red end end self.running? end
start_cmd()
click to toggle source
# File lib/dory/docker_service.rb, line 82 def start_cmd "docker start #{Shellwords.escape(self.container_name)}" end
stop(container_name = self.container_name)
click to toggle source
# File lib/dory/docker_service.rb, line 69 def stop(container_name = self.container_name) Sh.run_command("docker kill #{Shellwords.escape(container_name)}") if self.running? !self.running? end