2017年7月18日火曜日

Ruby から docker を操作する

概要

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 件のコメント:

コメントを投稿