Class: Minke::Docker::DockerRunner
- Inherits:
-
Object
- Object
- Minke::Docker::DockerRunner
- Defined in:
- lib/minke/docker/docker_runner.rb
Instance Method Summary collapse
-
#build_image(dockerfile_dir, name) ⇒ Object
build_image creates a new image from the given Dockerfile and name.
-
#create_and_run_container(image, volumes, environment, working_directory, cmd) ⇒ Object
create_and_run_container starts a conatainer of the given image name and executes a command.
- #delete_container(container) ⇒ Object
- #docker_version ⇒ Object
-
#find_image(image_name) ⇒ Object
find_image finds a docker image in the local registry Returns.
-
#get_docker_ip_address ⇒ Object
returns the ip address that docker is running on.
- #login_registry(url, user, password, email) ⇒ Object
-
#pull_image(image_name) ⇒ Object
pull_image pulls a new copy of the given image from the registry.
- #push_image(image_name) ⇒ Object
- #tag_image(image_name, tag) ⇒ Object
Instance Method Details
#build_image(dockerfile_dir, name) ⇒ Object
build_image creates a new image from the given Dockerfile and name
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/minke/docker/docker_runner.rb', line 90 def build_image dockerfile_dir, name ::Docker. = {:read_timeout => 6200} begin ::Docker::Image.build_from_dir(dockerfile_dir, {:t => name}) do |v| data = /{"stream.*:"(.*)".*/.match(v) data = data[1].encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''}) unless data == nil || data.length < 1 $stdout.puts data unless data == nil end rescue => e = /.*{"message":"(.*?)"}/.match(e.to_s) puts "Error: #{[1]}" unless == nil || .length < 1 end end |
#create_and_run_container(image, volumes, environment, working_directory, cmd) ⇒ Object
create_and_run_container starts a conatainer of the given image name and executes a command
Returns:
-
Docker::Container
-
sucess (true if command succeded without error)
51 52 53 54 55 56 57 58 59 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 |
# File 'lib/minke/docker/docker_runner.rb', line 51 def create_and_run_container image, volumes, environment, working_directory, cmd # update the timeout for the Excon Http Client # set the chunk size to enable streaming of log files #puts working_directory puts volumes #puts environment ::Docker. = {:chunk_size => 1, :read_timeout => 3600} container = ::Docker::Container.create( 'Image' => image, 'Cmd' => cmd, "Binds" => volumes, "Env" => environment, 'WorkingDir' => working_directory) success = true thread = Thread.new do container.attach(:stream => true, :stdin => nil, :stdout => true, :stderr => true, :logs => false, :tty => false) do |stream, chunk| stream.to_s == 'stdout' ? color = :green : color = :red puts "#{chunk.strip}".colorize(color) if stream.to_s == "stderr" success = false else success = true end end end container.start thread.join return container, success end |
#delete_container(container) ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/minke/docker/docker_runner.rb', line 104 def delete_container container if container != nil begin container.delete() rescue => e puts "Error: Unable to delete container" end end end |
#docker_version ⇒ Object
134 135 136 |
# File 'lib/minke/docker/docker_runner.rb', line 134 def docker_version ::Docker.version['Version'] end |
#find_image(image_name) ⇒ Object
find_image finds a docker image in the local registry Returns
Docker::Image
29 30 31 32 33 34 35 36 |
# File 'lib/minke/docker/docker_runner.rb', line 29 def find_image image_name found = nil ::Docker::Image.all.each do | image | found = image if image.info["RepoTags"].include? image_name end return found end |
#get_docker_ip_address ⇒ Object
returns the ip address that docker is running on
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/minke/docker/docker_runner.rb', line 6 def get_docker_ip_address # first try to get the ip from docker-ip env if !ENV['DOCKER_IP'].to_s.empty? return ENV['DOCKER_IP'] end if !ENV['DOCKER_HOST'].to_s.empty? # dockerhost set host = ENV['DOCKER_HOST'].dup host.gsub!(/tcp:\/\//, '') host.gsub!(/:\d+/,'') return host else return '127.0.0.1' end end |
#login_registry(url, user, password, email) ⇒ Object
114 115 116 117 118 119 120 121 122 |
# File 'lib/minke/docker/docker_runner.rb', line 114 def login_registry url, user, password, email if docker_version.start_with? '1.11' # email is removed for login in docker 1.11 system("docker login -u #{user} -p #{password} #{url}") else system("docker login -u #{user} -p #{password} -e #{email} #{url}") end $?.exitstatus end |
#pull_image(image_name) ⇒ Object
pull_image pulls a new copy of the given image from the registry
40 41 42 43 |
# File 'lib/minke/docker/docker_runner.rb', line 40 def pull_image image_name puts "Pulling Image: #{image_name}" ::Docker::Image.create('fromImage' => image_name) end |
#push_image(image_name) ⇒ Object
129 130 131 132 |
# File 'lib/minke/docker/docker_runner.rb', line 129 def push_image image_name system("docker push #{image_name}:latest") $?.exitstatus == 0 end |
#tag_image(image_name, tag) ⇒ Object
124 125 126 127 |
# File 'lib/minke/docker/docker_runner.rb', line 124 def tag_image image_name, tag image = self.find_image "#{image_name}:latest" image.tag('repo' => tag, 'force' => true) unless image.info["RepoTags"].include? "#{tag}:latest" end |