nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

OpenShiftのsource-to-image (s2i)をすごく簡単に説明するよ

この投稿はOpen PaaS Advent Calendar 2015の16日目の記事です。

OpenShiftにはソースコードからDockerイメージをビルドするs2iという仕組みがあります。ドキュメントを見ると煩雑な印象を受けるかもしれませんが、実はとっても簡単です。

単体のs2i

s2iはgithubなどのソースコードのURL、s2i builder imageを受け取って、Dockerイメージを作成するソフトウェアです。以下実行例ですがそのまんますぎて説明のしようがないくらいです。openshift/ruby-20-centos7というs2i builder imageを使ってtest-ruby-appというDockerイメージをビルドしています。

s2i build git://github.com/pmorie/simple-ruby openshift/ruby-20-centos7 test-ruby-app
docker run --rm -i -p :8080 -t test-ruby-app

s2i builder image

s2i builder imageはs2iスクリプトが入っていて、ラベルが付いているだけのDockerイメージです。ぶっちゃけ以下のラベル付けるだけでs2i builder imageの要件は満たせます。

LABEL io.openshift.s2i.scripts-url=image:///usr/libexec/s2i

s2iはこのs2i builder imageのラベルからs2iスクリプトの場所を読み込み、実行してその結果のイメージを出力のDockerイメージとするだけです。s2iをマニュアルでやるとするとdocker runしてs2iスクリプトをキックしてdocker commit/tagする、というイメージです。

OpenShiftでのsti-builderイメージ

OpenShiftではopenshift-sti-builderとかorigin-sti-builderなどのイメージが提供されていますが、これらはs2i builder imageではありません。ややこしいですね、すみません。

これは実際には最初に説明した「単体のs2i」をOpenShift環境上で行うDockerイメージ、つまりOpenShift版s2iです。openshift-sti-buildコマンドというs2iを実行するコマンドが入っていて、OpenShift上ではs2iはこのイメージで実行しています。

stiだったりs2iだったり

同じです。最初stiだったんですけど途中でs2iにしようぜってことになったんですが全部修正されているわけではないので表記が混ざっています。熟練したOpenShift使いには同じに見えるはずです。

まとめ

  • s2iはすごくシンプル
  • s2i builder imageもスクリプト入ってるだけの単なるDocker image
  • OpenShiftのsti-builderは単なるs2i