2014年11月8日土曜日

groovyとDocker Remote APIでDockerfileからイメージを作成する

groovyとDocker Remote APIでDockerfileからイメージを作成するには、以下のようなコードを実行します。

サンプルコード
@Grab(group='org.apache.httpcomponents', module='httpclient', version='4.3.5')
import org.apache.http.client.methods.*
import org.apache.http.impl.client.*
import org.apache.http.entity.*
import groovy.json.*

// Dockerfileはstageディレクトリに配置する
def ant = new AntBuilder()
ant.tar(destfile:"dockerfile.tar", basedir:"./stage")

def host = "192.168.159.128" // replace this
def port = 4243
// 作成するイメージの名前
def imageName = "apache2"

def httpclient = new DefaultHttpClient()
httpclient.withCloseable {
  def method = new HttpPost(
    "http://${host}:${port}/build?t=${imageName}&rm=1&nocache=1"
  )
  // 作成したtarをpost
  def bae = new ByteArrayEntity(new File("dockerfile.tar").bytes)
  method.setEntity(bae)

  def response = httpclient.execute(method)
  response.withCloseable {
    System.out.println(response.getStatusLine())
    def isr = new InputStreamReader(response.getEntity().getContent())
    isr.eachLine { line ->
      def json = new JsonSlurper().parseText(line)
      println json.stream
    }
  }
}

Docker Remote APIを使用可能にする方法
ubuntuの場合、/etc/default/dockerに以下のように記述します。
DOCKER_OPTS="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d"
そのあと、dockerを再起動します。
sudo service docker restart

動作環境
Docker 1.3.1

0 件のコメント:

コメントを投稿