概要
Ruby から docker API をコールしてみました
環境
- CentOS 7.3.1611
- docker 17.03.1-ce
- Ruby 2.3.3p222
dockerd を tcp で通信できるようにする
事前に dockerd の設定を変更する必要があります
過去に紹介した記事があるのでこちらを参考に dockerd の設定を変更してください
ライブラリインストール
- bundle init
- vim Gemfile
gem "docker-api"
gem "pp"
- bundle install
とりあえずバージョンを表示してみる
- touch docker.rb
- vim docker.rb
require 'docker'
require 'pp'
Docker.url = 'tcp://0.0.0.0:2376'
pp Docker.version
- bundle exec ruby docker.rb
{"Version"=>"17.03.1-ce",
"ApiVersion"=>"1.27",
"MinAPIVersion"=>"1.12",
"GitCommit"=>"c6d412e",
"GoVersion"=>"go1.7.5",
"Os"=>"linux",
"Arch"=>"amd64",
"KernelVersion"=>"4.9.4-1.el7.elrepo.x86_64",
"BuildTime"=>"2017-03-24T00:36:45.846383257+00:00"}
こんな感じで表示されば OK です
イメージを pull する
先程のファイルの末尾に追記していきます
- vim docker.rb
image = Docker::Image.create('fromImage' => 'alpine:latest')
p image.info["id"]
で以下のように ID が表示されれば OK です
"sha256:7328f6f8b41890597575cbaadc884e7386ae0acc53b747401ebce5cf0d624560"
イメージに tag 付けする
リポジトリとタグを指定してプライベートリポジトリに push する際に使います
- vim docker.rb
tagged = image.tag('repo' => 'your-registry.com/hawksnowlog/alpine', 'tag' => 'latest', force: true)
p tagged
で以下のようにタグ付けしたイメージが追加されていれば OK です
["alpine:latest", "your-registry.com/hawksnowlog/alpine:latest"]
イメージを push する
タグ付けしたイメージを push してみます
- vim docker.rb
Docker.authenticate!('username' => 'username', 'password' => 'password', 'serveraddress' => 'your-registry.com')
pushed = image.push(nil, repo_tag: 'your-registry.com/hawksnowlog/alpine:latest')
pp pushed
でプライベートリポジトリにイメージを push することができます
最後に
Ruby から docker を操作してみました
過去に golang でやったのですが数倍は楽にできました
その他の操作方法も Github の公式を見れば簡単にできると思います
0 件のコメント:
コメントを投稿