Class: Docker::Cli::DockerImage
- Inherits:
-
Object
- Object
- Docker::Cli::DockerImage
- Includes:
- TR::CondUtils
- Defined in:
- lib/docker/cli/docker_image.rb
Instance Attribute Summary collapse
-
#created ⇒ Object
readonly
Returns the value of attribute created.
-
#image_id ⇒ Object
readonly
Returns the value of attribute image_id.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#sid ⇒ Object
readonly
Returns the value of attribute sid.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
Class Method Summary collapse
- .build(imageName, dockerfile, context = ".") ⇒ Object
- .image(image) ⇒ Object
- .images ⇒ Object
- .inspect_format ⇒ Object
- .master_format ⇒ Object
- .separator ⇒ Object
- .set_inspect_format(format) ⇒ Object
- .set_master_format(format) ⇒ Object
- .set_separator(sep) ⇒ Object
Instance Method Summary collapse
- #containers ⇒ Object
- #delete! ⇒ Object
- #has_containers? ⇒ Boolean
-
#initialize(name, opts = {}) ⇒ DockerImage
constructor
A new instance of DockerImage.
- #is_runtime_image? ⇒ Boolean
Constructor Details
#initialize(name, opts = {}) ⇒ DockerImage
Returns a new instance of DockerImage.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/docker/cli/docker_image.rb', line 147 def initialize(name, opts = {}) @name = name if not_empty?(opts) @sid = opts[:sid] @image_id = opts[:image_id] @tag = opts[:tag] @size = opts[:size] @created = opts[:created] @runtime = opts[:runtime] end @runtime = false if is_empty?(@runtime) or not_bool?(@runtime) end |
Instance Attribute Details
#created ⇒ Object (readonly)
Returns the value of attribute created.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def created @created end |
#image_id ⇒ Object (readonly)
Returns the value of attribute image_id.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def image_id @image_id end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def name @name end |
#sid ⇒ Object (readonly)
Returns the value of attribute sid.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def sid @sid end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def size @size end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
145 146 147 |
# File 'lib/docker/cli/docker_image.rb', line 145 def tag @tag end |
Class Method Details
.build(imageName, dockerfile, context = ".") ⇒ Object
140 141 142 |
# File 'lib/docker/cli/docker_image.rb', line 140 def self.build(imageName, dockerfile, context = ".") command.build_image(imageName, dockerfile: dockerfile, context_root: context).run end |
.image(image) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/docker/cli/docker_image.rb', line 86 def self.image(image) cmd = [] cmd << Cli.docker_exe cmd << "images" cmd << "--format" cmd << "\"#{self.master_format}\"" # image and tag is in single unit # e.g.: # jruby:9.2-jdk11 # jruby:9 # jruby:9.3.0.0-jdk11 cmd << image rres = [] res = Command.new(cmd).run if res.successful? # single image could have many lines because they have # different tags! res.each_line do |l| sp = l.strip.split(self.separator) rres << { name: sp[0], id: sp[1], tag: sp[2] } end else logger.warn "Command '#{cmd.join(" ")}' failed.\n Error was : #{res.err_stream}" end fres = [] rres.each do |r| ccmd = [] ccmd << cmd[0] ccmd << "inspect" ccmd << "-f" ccmd << "'{{.ID}}#{self.separator}{{.Created}}#{self.separator}{{.Size}}'" ccmd << r[:name] rres = Command.new(ccmd).run if rres.successful? rres.each_line do |l| sp = l.strip.split(self.separator) rid = sp[0] r[:image_id] = rid.split(":")[1] r[:created] = sp[1] r[:size] = sp[2] r[:runtime] = true fres << DockerImage.new(r[:name], r) end else logger.warn "Command '#{ccmd.join(" ")}' failed.\n Error was : #{rres.err_stream}" end end fres end |
.images ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 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 |
# File 'lib/docker/cli/docker_image.rb', line 39 def self.images logger.warn "loading images from system is an expensive operation. Please implement some cache at aplication level to increase its efficiency" cmd = [] cmd << Cli.docker_exe cmd << "images" cmd << "--format" cmd << "\"#{self.master_format}\"" rres = [] res = Command.new(cmd).run if res.successful? res.each_line do |l| sp = l.strip.split(self.separator) rres << { name: sp[0], id: sp[1], tag: sp[2] } end else logger.warn "Command '#{cmd.join(" ")}' failed.\n Error was : #{res.err_stream}" end fres = [] rres.each do |r| ccmd = [] ccmd << cmd[0] ccmd << "inspect" ccmd << "-f" ccmd << "'{{.ID}}#{self.separator}{{.Created}}#{self.separator}{{.Size}}'" ccmd << r[:name] rres = Command.new(ccmd).run if rres.successful? rres.each_line do |l| sp = l.strip.split(self.separator) rid = sp[0] r[:image_id] = rid.split(":")[1] r[:created] = sp[1] r[:size] = sp[2] r[:runtime] = true fres << DockerImage.new(r[:name], r) end else logger.warn "Command '#{ccmd.join(" ")}' failed.\n Error was : #{rres.err_stream}" end end fres end |
.inspect_format ⇒ Object
22 23 24 25 26 27 |
# File 'lib/docker/cli/docker_image.rb', line 22 def self.inspect_format if @_doc_iformat.nil? @_doc_iformat = "{{.Created}}#{self.separator}{{.Size}}" end @_doc_iformat.freeze end |
.master_format ⇒ Object
12 13 14 15 16 17 |
# File 'lib/docker/cli/docker_image.rb', line 12 def self.master_format if @_doc_mformat.nil? @_doc_mformat = "{{.Repository}}#{self.separator}{{.ID}}#{self.separator}{{.Tag}}" end @_doc_mformat.freeze end |
.separator ⇒ Object
32 33 34 35 36 37 |
# File 'lib/docker/cli/docker_image.rb', line 32 def self.separator if @_doc_sep.nil? @_doc_sep = ";" end @_doc_sep.freeze end |
.set_inspect_format(format) ⇒ Object
19 20 21 |
# File 'lib/docker/cli/docker_image.rb', line 19 def self.set_inspect_format(format) @_dec_iformat = format end |
.set_master_format(format) ⇒ Object
9 10 11 |
# File 'lib/docker/cli/docker_image.rb', line 9 def self.set_master_format(format) @_doc_mformat = format end |
.set_separator(sep) ⇒ Object
29 30 31 |
# File 'lib/docker/cli/docker_image.rb', line 29 def self.set_separator(sep) @_doc_sep = sep end |
Instance Method Details
#containers ⇒ Object
170 171 172 173 174 175 176 177 |
# File 'lib/docker/cli/docker_image.rb', line 170 def containers if @_cont.nil? # here assuming every run from system will be logged # but what about the one not using the system? @_cont = DockerRunLog.instance.image_containers(@name).collect { |e| DockerContainer.new(e[:container], e) } end @_cont end |
#delete! ⇒ Object
179 180 181 182 183 184 185 |
# File 'lib/docker/cli/docker_image.rb', line 179 def delete! if not_empty?(@tag) command.delete_image(@name, @tag, opts) else raise IndefiniteOption, "Delete image cannot proceed because there might be more than single instance of the image. Please provide a tag for definite selection for deletion." end end |
#has_containers? ⇒ Boolean
166 167 168 |
# File 'lib/docker/cli/docker_image.rb', line 166 def has_containers? DockerRunLog.instance.image_has_containers?(@name) end |
#is_runtime_image? ⇒ Boolean
162 163 164 |
# File 'lib/docker/cli/docker_image.rb', line 162 def is_runtime_image? @runtime end |