./share/scripts/gc in docker-utils-0.1.33 vs ./share/scripts/gc in docker-utils-0.1.34
- old
+ new
@@ -1,39 +1,70 @@
#!/usr/bin/env ruby
-containers = `docker ps -a -q`.chomp.split("\n").sort
+DockerBinaryLocation = `which docker`.chomp
-purge_all = ARGV.delete('-a')
-kill_running_containers = ARGV.delete('-r') || purge_all
-delete_data_containers = ARGV.delete('-d') || purge_all
-delete_tagged_images = ARGV.delete('-t') || purge_all
+def cmd(*args)
+ io = IO.popen(args, err: '/dev/null')
+ io.read.split("\n")
+end
-unless kill_running_containers
- running_containers = `docker ps -q`.chomp.split("\n").sort
- containers = containers - running_containers
+def docker(*args)
+ cmd(DockerBinaryLocation, *args)
end
-unless delete_data_containers
- containers = containers.find_all do |cid|
- container_name = `docker inspect -f '{{.Name}}' #{cid}`.chomp[1..-1]
- container_name !~ /-data$/
+tasks = [:remove_containers, :remove_volumes, :remove_images]
+container_filter = [:running]
+image_filter = [:untagged]
+
+while task_pattern = ARGV.shift
+ case task_pattern.intern
+ when :all
+ container_filter = []
+ image_filter = []
+ when :running
+ container_filter -= [:running]
+ when :volumes
+ #
+ when :images
+ image_filter -= [:untagged]
end
end
-containers.each do |cid|
- system 'docker', 'kill', cid, err: '/dev/null'
- system 'docker', 'rm', cid, err: '/dev/null'
+
+containers = docker('ps', '-a', '-q').sort
+
+if container_filter.include? :running
+ running_containers = docker('ps', '-q').sort
+ containers = containers - running_containers
end
-images = `docker images`.chomp.split("\n")[1..-1].map do |ln|
+
+images = docker('images')[1..-1].map do |ln|
parts = ln.split(' ').map{ |part| part unless part == '<none>' }
image_name = (parts[0] and parts[1]) ? "#{parts[0]}:#{parts[1]}" : nil
{id: parts[2], name: image_name}
end
-unless delete_tagged_images
+if image_filter.include? :untagged
images = images.delete_if{ |image| image[:name] }
end
-images.each do |image|
- system 'docker', 'rmi', '-f', image[:id]
-end
\ No newline at end of file
+
+
+if tasks.include? :remove_containers and containers.length.nonzero?
+ puts "removing containers"
+ containers.each do |cid|
+ docker 'kill', cid
+ docker 'rm', cid
+
+ puts " #{cid}"
+ end
+end
+
+if tasks.include? :remove_images and images.length.nonzero?
+ puts "removing image layers"
+ images.each do |image|
+ docker 'rmi', '-f', image[:id]
+
+ puts " #{image[:name]} #{image[:id]}"
+ end
+end