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使いには同じに見えるはずです。