class Image

Attributes

created[RW]
id[RW]
regexp_repo[RW]
regexp_tag[RW]
repository[RW]
size[RW]
tag[RW]

Public Class Methods

build(dockerfile, *tags) click to toggle source
# File lib/models/image.rb, line 22
def self.build(dockerfile, *tags)
  run 'docker',
      'build',
      '--force-rm',
      '-f',
      dockerfile,
      '-t',
      tags.join(' -t '),
      '.'
end
command() click to toggle source
# File lib/models/image.rb, line 14
def self.command
  'docker images'
end
create(line) click to toggle source
# File lib/models/image.rb, line 57
def self.create(line)
  repository, tag, id, created, size = line.chomp.split(' ' * 2).reject(&:empty?).map(&:strip)
  ret = new(repository: repository, tag: tag, id: id, created: created, size: size, raw: line)
  ret
end
find(keyword:, name:, tag:) click to toggle source
# File lib/models/image.rb, line 33
def self.find(keyword:, name:, tag:)
  return all unless keyword || name || tag
  ret = keyword ? search(keyword) : all
  if name
    regexp_repo = /#{name}/i
    ret = ret.select do |image|
      image.regexp_repo = regexp_repo
      regexp_repo.match image.repository
    end
  end
  if tag
    regexp_tag = /#{tag}/i
    ret = ret.select do |image|
      image.regexp_tag = regexp_tag
      regexp_tag.match image.tag
    end
  end
  ret
end
headers() click to toggle source
# File lib/models/image.rb, line 4
def self.headers
  {
    repository: 'REPOSITORY',
    tag: 'TAG',
    id: 'IMAGE ID',
    created: 'CREATED',
    size: 'SIZE'
  }
end
launch(image_name, run_opts, command) click to toggle source
# File lib/models/image.rb, line 18
def self.launch(image_name, run_opts, command)
  ['docker', 'run', run_opts, image_name, command]
end
new(**params) click to toggle source
# File lib/models/image.rb, line 63
def initialize(**params)
  @repository = params[:repository]
  @tag = params[:tag]
  @id = params[:id]
  @created = params[:created]
  @size = params[:size]
  @raw = params[:raw]
end
pull(name) click to toggle source
# File lib/models/image.rb, line 77
def self.pull(name)
  run("docker pull #{name}")
end
push(repo_name) click to toggle source
# File lib/models/image.rb, line 53
def self.push(repo_name)
  run("docker push #{repo_name}")
end
tag(name, *as_names) click to toggle source
# File lib/models/image.rb, line 85
def self.tag(name, *as_names)
  run("docker tag #{name} #{as_names.join(' ')}")
end

Public Instance Methods

del() click to toggle source
# File lib/models/image.rb, line 72
def del
  instance = /<none>/.match(image_name) ? id : image_name
  run("docker rmi -f #{instance}")
end
image_name() click to toggle source
# File lib/models/image.rb, line 89
def image_name
  "#{repository}:#{tag || 'latest'}"
end
launch(run_opts, command) click to toggle source
# File lib/models/image.rb, line 93
def launch(run_opts, command)
  self.class.launch(image_name, run_opts, command)
end
push() click to toggle source
# File lib/models/image.rb, line 81
def push
  self.class.push(image_name)
end
to_a(*cols) click to toggle source
# File lib/models/image.rb, line 97
def to_a(*cols)
  cols = Image.headers.keys if cols.empty?
  ret = cols.map { |col| send(col).strip }
  ret
end
to_s() click to toggle source
# File lib/models/image.rb, line 103
def to_s
  @raw.gsub!(@regexp, &:yellow) if @regexp
  @raw.sub!(repository, repository.gsub(@regexp_repo, '\0'.red)) if @regexp_repo
  @raw.gsub!(/#{tag}$/) { |tag| tag.gsub(@regexp_tag, '\0'.blue) } if @regexp_tag
  @raw
end