Module: AppRb::Util::Docker
- Defined in:
- lib/app-rb/util/docker.rb
Class Method Summary collapse
- .add_cron(user, host, image, env, app, crons) ⇒ Object
- .create_one_time_script(user, host, image, env, app) ⇒ Object
- .ids(user, host, labels = {}) ⇒ Object
- .pull(user, host, image) ⇒ Object
- .remove_images(user, host, image_name, keep_tags = []) ⇒ Object
- .remove_one_time_script(user, host, app) ⇒ Object
- .run(user, host, image, env, cmd) ⇒ Object
- .run_batch(user, host, name, image, cmd, labels = {}, env = {}, opts = []) ⇒ Object
- .run_daemon(user, host, name, image, cmd, labels = {}, env = {}, opts = [], ports = {}) ⇒ Object
- .stop(user, host, labels = {}, except = nil) ⇒ Object
Class Method Details
.add_cron(user, host, image, env, app, crons) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/app-rb/util/docker.rb', line 77 def self.add_cron(user, host, image, env, app, crons) echos = crons.map { |cron| %(echo "#{cron["at"]} __APP=#{app}; start=\\\\\\$(date); (docker run --rm #{env.map { |k, v| "-e #{k}='#{v}' " }.join}#{image} #{cron["cmd"]}; echo start \\\\\\$start, finish \\\\\\$(date)) >> /home/#{user}/crontab__#{app}__#{cron["key"]}.log 2>&1") } AppRb::Util.do_it %(ssh #{user}@#{host} bash <<EOF (crontab -l | grep -v -F '__APP=#{app};'; #{echos.join("; ")}) | crontab - \nEOF) end |
.create_one_time_script(user, host, image, env, app) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/app-rb/util/docker.rb', line 63 def self.create_one_time_script(user, host, image, env, app) AppRb::Util.do_it "ssh #{user}@#{host} bash <<EOF echo '#/bin/bash' > ~/run_#{app}.sh echo 'docker run -it --rm #{env.map { |k, v| "-e #{k}='#{v}' " }.join} #{image} \"\\$@\"' >> ~/run_#{app}.sh chmod +x ~/run_#{app}.sh \nEOF" end |
.ids(user, host, labels = {}) ⇒ Object
33 34 35 36 |
# File 'lib/app-rb/util/docker.rb', line 33 def self.ids(user, host, labels = {}) filters = labels.map { |k, v| "-f label=#{k}=#{v} " }.join("") AppRb::Util.just_cmd("ssh #{user}@#{host} docker ps -q #{filters}").split("\n") end |
.pull(user, host, image) ⇒ Object
4 5 6 7 8 9 10 11 |
# File 'lib/app-rb/util/docker.rb', line 4 def self.pull(user, host, image) Open3.popen2e("ssh #{user}@#{host} docker pull #{image}") { |i,o,w| while line = o.gets do puts "[#{host}] " + line end raise "FATAL" unless w.value.success? } end |
.remove_images(user, host, image_name, keep_tags = []) ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/app-rb/util/docker.rb', line 47 def self.remove_images(user, host, image_name, = []) all_ids = AppRb::Util.just_cmd("ssh #{user}@#{host} docker images #{image_name} -q").split("\n") keep_ids = .map { |tag| AppRb::Util.just_cmd("ssh #{user}@#{host} docker images #{image_name}:#{tag} -q") } if (all_ids - keep_ids).length > 0 AppRb::Util.do_it("ssh #{user}@#{host} 'docker rmi #{(all_ids - keep_ids).join(" ")}'; echo ok") end end |
.remove_one_time_script(user, host, app) ⇒ Object
71 72 73 74 75 |
# File 'lib/app-rb/util/docker.rb', line 71 def self.remove_one_time_script(user, host, app) AppRb::Util.do_it "ssh #{user}@#{host} bash <<EOF rm -f ~/run_#{app}.sh \nEOF" end |
.run(user, host, image, env, cmd) ⇒ Object
57 58 59 60 61 |
# File 'lib/app-rb/util/docker.rb', line 57 def self.run(user, host, image, env, cmd) AppRb::Util.do_it "ssh -t #{user}@#{host} docker run --rm -it " + env.map { |k, v| "-e #{k}='#{v}' " }.join + "#{image} #{cmd}" end |
.run_batch(user, host, name, image, cmd, labels = {}, env = {}, opts = []) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/app-rb/util/docker.rb', line 13 def self.run_batch(user, host, name, image, cmd, labels = {}, env = {}, opts = []) AppRb::Util.do_it "ssh #{user}@#{host} docker run --rm " + labels.map { |k, v| "--label #{k}=#{v} " }.join + "--name #{name} " + opts.join(" ") + " " + env.map { |k, v| "-e #{k}='#{v}' " }.join + "#{image} #{cmd}" end |
.run_daemon(user, host, name, image, cmd, labels = {}, env = {}, opts = [], ports = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/app-rb/util/docker.rb', line 22 def self.run_daemon(user, host, name, image, cmd, labels = {}, env = {}, opts = [], ports = {}) AppRb::Util.do_it "ssh #{user}@#{host} docker run -d " + "--restart unless-stopped " + labels.map { |k, v| "--label #{k}=#{v} " }.join + "--name #{name} " + opts.join(" ") + " " + env.map { |k, v| "-e #{k}='#{v}' " }.join + ports.map { |k, v| "-p #{k}:#{v} " }.join + "#{image} #{cmd}" end |
.stop(user, host, labels = {}, except = nil) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/app-rb/util/docker.rb', line 38 def self.stop(user, host, labels = {}, except = nil) keep_ids = except ? ids(user, host, labels.merge(except)) : [] all_ids = ids(user, host, labels) if (all_ids - keep_ids).length > 0 AppRb::Util.do_it("ssh #{user}@#{host} docker stop #{(all_ids - keep_ids).join(" ")}") AppRb::Util.do_it("ssh #{user}@#{host} docker rm #{(all_ids - keep_ids).join(" ")}") end end |