ようへいの日々精進XP

よかろうもん

今更だけど docker の Remote API を Ruby から使うなど

はじめに

  • 今更だけど...
  • 以前に docker の Remote API を触ったことがあったが Ruby からも扱えるようなので試してみた
  • 前回の記事でも Dashing から Remote API を使っている

参考


細かいことは置いといて

逆引き◯◯的な感じで。

gem インストール

gem install docker-api --no-ri --no-rdoc -V

稼働中のコンテナ一覧の ID を取得する

require 'docker'

Docker.url="http://#{DOCKER_HOST}:4243/"
cons = Docker::Container.all(:running => true)
cons.each do |con|
  puts con.id
end

以下のようにコンテナ ID が得られる。

ef1b058edfcf2b598e6c44c0e389cafe5caca652b9e51280e72cb45d5efc1c9b
5a6cead4d80da3a0f32e1a623670ac463e9645a3b3946c5e83b667ae8763cc31
6815f0019f1928c6525e52be9164b9b2cf044a009b95ee40666f6a29d27a9454
9f2f92e44f694e09aba0dc9fe7e64a52af0a2c0df53482fa470007b0d2e9b67c

長いなーと思ったら docker ps の出力結果みたいにコンテナ ID を 12 桁にする場合には以下のようにしてもいいかも。

require 'docker'

Docker.url="http://#{DOCKER_HOST}:4243/"
cons = Docker::Container.all(:running => true)
cons.each do |con|
  puts con.id[0,12]
end

コンテナ名とかは以下のように取得出来る。

puts con.info.fetch("Names")

コンテナ一覧を取得する

docker コマンドで言うところの docker ps -a と同じ結果が得られる。

require 'docker'

Docker.url="http://#{DOCKER_HOST}:4243/"
cons = Docker::Container.all(:all => true)
cons.each do |con|
  puts con
end

以下のような結果となる。

Docker::Container { :id => 3a954851ae74985788cb1236f4db26667c6ef17f69f5f62c5db9f26bf3a9d867, :connection => Docker::Connection { :url => http://${DOCKER_HOST}:4243/, :options => {} } }
Docker::Container { :id => ef1b058edfcf2b598e6c44c0e389cafe5caca652b9e51280e72cb45d5efc1c9b, :connection => Docker::Connection { :url => http://${DOCKER_HOST}:4243/, :options => {} } }
Docker::Container { :id => 5a6cead4d80da3a0f32e1a623670ac463e9645a3b3946c5e83b667ae8763cc31, :connection => Docker::Connection { :url => http://${DOCKER_HOST}:4243/, :options => {} } }
Docker::Container { :id => 6815f0019f1928c6525e52be9164b9b2cf044a009b95ee40666f6a29d27a9454, :connection => Docker::Connection { :url => http://${DOCKER_HOST}:4243/, :options => {} } }

稼働中のコンテナの数は?

今までの例を利用して稼働中のコンテナ数はこんな感じで。

require 'docker'

Docker.url="http://#{DOCKER_HOST}:4243/"
cons = Docker::Container.all(:running => true)
puts cons.size

引き続き

  • 気づいたら書こう