class Object
Public Instance Methods
execute()
click to toggle source
# File bin/docker-shaball, line 18 def execute if pull? image_names.each do |name| system("docker pull #{name} > /dev/null") signal_error("docker pull failed") unless $?.success? end end if manifest? puts image_manifest return end manifest_checksum = Digest::SHA1.hexdigest(image_manifest) output_file_name = "#{manifest_checksum}.tar.gz" unless !force? && File.exist?(output_file_name) save_images(image_names, output_file_name) end puts output_file_name end
image_manifest()
click to toggle source
# File bin/docker-shaball, line 61 def image_manifest inspect_output = `docker inspect -f '{{ .Config.Image }}' #{image_names.join(" ")}` signal_error("docker inspect returned error") unless $?.success? image_ids = inspect_output.lines.map(&:strip) image_names.zip(image_ids).map do |image_name_and_id| image_name_and_id.join(" ") + "\n" end.join end
image_names()
click to toggle source
# File bin/docker-shaball, line 54 def image_names image_list.map do |name| name += ":latest" unless name.index(":") name end.uniq.sort end
save_images(image_names, output_file_name)
click to toggle source
# File bin/docker-shaball, line 39 def save_images(image_names, output_file_name) FileUtils.safe_unlink(output_file_name) tmp_file_name = "#{output_file_name}.tmp" r, w = IO.pipe save = spawn("docker save #{image_names.join(' ')}", :out => w) gzip = spawn("gzip", :in => r, :out => [tmp_file_name, "w"]) r.close w.close Process.wait save signal_error("docker save failed") unless $?.success? Process.wait gzip signal_error("gzip failed") unless $?.success? File.rename(tmp_file_name, output_file_name) end