Module: Jarl::Docker
- Defined in:
- lib/jarl/docker.rb
Defined Under Namespace
Constant Summary collapse
- INSECURE_KEY_PATH =
'/home/vagrant/.ssh/insecure_key'
Class Method Summary collapse
-
.clean_containers ⇒ Object
Cleans stopped containers.
-
.clean_images ⇒ Object
Cleans unused images.
-
.containers_running ⇒ Object
Returns a list of running docker containers.
-
.execute(params) ⇒ Object
Execute container in foreground, defined by params.
-
.images ⇒ Object
Returns available docker images.
-
.images_unused ⇒ Object
Returns a list of unused images.
-
.images_used ⇒ Object
Returns a list of used images.
-
.images_used_add(name) ⇒ Object
Adds image to a list of used images.
-
.images_used_remove(name) ⇒ Object
Removes image from a list of used images.
-
.installed? ⇒ Boolean
Returns true if Docker is installed.
-
.ps ⇒ Object
Returns ‘docker ps` info inspector instance.
-
.reload! ⇒ Object
Reloads lists of images and containers.
-
.start(params) ⇒ Object
Start container defined by params.
Class Method Details
.clean_containers ⇒ Object
Cleans stopped containers
94 95 96 97 98 99 |
# File 'lib/jarl/docker.rb', line 94 def self.clean_containers sh "docker rm $(docker ps -a | grep 'Exited' | awk '{print $1}')" rescue RuntimeError => e # omit conflicting images error reports raise unless e.to_s =~ /Command failed/ end |
.clean_images ⇒ Object
Cleans unused images
85 86 87 88 89 90 |
# File 'lib/jarl/docker.rb', line 85 def self.clean_images sh "docker rmi $(docker images -a | grep '^<none>' | awk '{print $3}') >/dev/null 2>&1" rescue RuntimeError => e # omit conflicting images error reports raise unless e.to_s =~ /Command failed/ end |
.containers_running ⇒ Object
Returns a list of running docker containers
58 59 60 61 62 63 64 65 |
# File 'lib/jarl/docker.rb', line 58 def self.containers_running return @docker_containers_running if @docker_containers_running container_ids = `docker ps -q`.split("\n") @docker_containers_running = container_ids.map do |id| Container.new id end @docker_containers_running end |
.execute(params) ⇒ Object
Execute container in foreground, defined by params
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/jarl/docker.rb', line 125 def self.execute(params) container_name = "#{params[:name]}.execute" Docker::Container.clean_containers(container_name) opts = [] opts << params[:volumes].map do |v| "-v #{v}" end.join(' ') opts << params[:ports].map do |p| "-p #{p}" end.join(' ') opts << params[:environment].map do |k, v| "-e #{k}=#{v}" end.join(' ') docker_cmd = "docker run -t -i --rm #{opts.join(' ')} " \ " --hostname #{params[:hostname]} " \ " --name #{container_name} #{params[:image]} #{params[:command]}" # puts docker_cmd sh docker_cmd end |
.images ⇒ Object
Returns available docker images
15 16 17 18 19 |
# File 'lib/jarl/docker.rb', line 15 def self.images @docker_images ||= Pathname.glob(Pathname.new(DOCKER_IMAGES_PATH).join('*/')).sort.map do |path| Image.new(path.basename, path) end end |
.images_unused ⇒ Object
Returns a list of unused images
31 32 33 |
# File 'lib/jarl/docker.rb', line 31 def self.images_unused images - images_used end |
.images_used ⇒ Object
Returns a list of used images
23 24 25 26 27 |
# File 'lib/jarl/docker.rb', line 23 def self.images_used used_images_list = File.readlines(USED_IMAGES_FILE) rescue [''] used_images_list.map!(&:chomp) @docker_images_used ||= images.select { |di| used_images_list.include?(di.name) } end |
.images_used_add(name) ⇒ Object
Adds image to a list of used images
37 38 39 40 41 42 43 44 |
# File 'lib/jarl/docker.rb', line 37 def self.images_used_add(name) list = images_used.map(&:name) list << name File.open(USED_IMAGES_FILE, 'w') do |f| f.puts list.join("\n") end reload! end |
.images_used_remove(name) ⇒ Object
Removes image from a list of used images
48 49 50 51 52 53 54 |
# File 'lib/jarl/docker.rb', line 48 def self.images_used_remove(name) list = images_used.map(&:name).select { |n| n != name } File.open(USED_IMAGES_FILE, 'w') do |f| f.puts list.join("\n") end reload! end |
.installed? ⇒ Boolean
Returns true if Docker is installed
9 10 11 |
# File 'lib/jarl/docker.rb', line 9 def self.installed? !`which docker`.empty? end |
.ps ⇒ Object
Returns ‘docker ps` info inspector instance
69 70 71 |
# File 'lib/jarl/docker.rb', line 69 def self.ps @docker_ps ||= Ps.new end |
.reload! ⇒ Object
Reloads lists of images and containers
76 77 78 79 80 81 |
# File 'lib/jarl/docker.rb', line 76 def self.reload! @docker_ps = nil @docker_images = nil @docker_images_used = nil @docker_containers_running = nil end |
.start(params) ⇒ Object
Start container defined by params
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/jarl/docker.rb', line 103 def self.start(params) container_name = params[:name] Docker::Container.clean_containers(container_name) opts = [] opts << params[:volumes].map do |v| "-v #{v}" end.join(' ') opts << params[:ports].map do |p| "-p #{p}" end.join(' ') opts << params[:environment].map do |k, v| "-e #{k}=#{v}" end.join(' ') docker_cmd = "docker run -d #{opts.join(' ')} " \ " --hostname #{params[:hostname]} " \ " --name #{container_name} #{params[:image]} #{params[:command]}" # puts docker_cmd sh docker_cmd end |