This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第4章 S2I の要件
4.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
Source-to-Image (S2I) は、インプットとして、アプリケーションのソースコードを受け入れるイメージを簡単に記述でき、アウトプットとして、組み立てられたアプリケーションを実行する新規イメージを簡単に生成することができるフレームワークです。
再生成可能なコンテナーイメージのビルドに S2I を使用する主な利点として、開発者の使い勝手の良さが挙げられます。ビルダーイメージの作成者は、イメージが最適な S2I パフォーマンスを実現できるように、ビルドプロセス と S2I スクリプト の基本的なコンセプト 2 点を理解する必要があります。
4.2. ビルドプロセス リンクのコピーリンクがクリップボードにコピーされました!
ビルドプロセスは、以下の 3 つの要素で構成されており、これら 3 つを組み合わせて最終的なコンテナーイメージが作成されます。
- ソース
 - S2I スクリプト
 - ビルダーイメージ
 
				ビルドプロセス中に、S2I はソースとスクリプトをビルダーイメージ内に配置する必要があります。ビルダーイメージ内にソースとスクリプトを配置するために、S2I はソースとスクリプトを含む tar ファイルを作成してから、このファイルをビルダーイメージにストリーミングします。assemble スクリプトを実行する前に、S2I はファイルを展開して、ビルダーイメージからコンテンツを、デフォルトの /tmp ディレクトリーではなく、io.openshift.s2i.destination ラベルが指定する場所に配置します。
			
				このプロセスを行うには、イメージに tar アーカイブユーティリティー (tar コマンドは $PATH にあります) とコマンドラインインタープリター (/bin/sh コマンド) が必要です。これにより、イメージが最速のビルドパスを使用できるようになります。tar または /bin/sh コマンドが利用できない場合には s2i ビルド プロセスにより、イメージ内にソースとスクリプトが配置されるように、追加のコンテナーが自動で強制実行されて初めて、通常のビルドが実行されます。
			
基本的な S2I ビルドワークフローについては、以下の図を参照してください。
図4.1 ビルドのワークフロー
- 
						ビルドの実行では、ソース、スクリプト、アーティファクト (ある場合) を展開して、
assembleスクリプトを実行します。2 回目の実行の場合には (tarまたは/bin/shを検出できないエラーが発生した後など)、スクリプトとソースの両方があるので、assembleスクリプトの呼び出しのみを行います。 
4.3. S2I スクリプト リンクのコピーリンクがクリップボードにコピーされました!
				S2I スクリプトは、ビルダーイメージ内でスクリプトを実行できる限り、どのプログラム言語でも記述できます。S2I は assemble/run/save-artifacts スクリプトを提供する複数のオプションをサポートします。ビルドごとに、これらの場所はすべて、以下の順番にチェックされます。
			
- BuildConfig で指定する スクリプト
 - 
						アプリケーションソースの 
.s2i/binディレクトリーにあるスクリプト - 
						デフォルトの URL (
io.openshift.s2i.scripts-urlラベル) にあるスクリプト 
				イメージで指定した io.openshift.s2i.scripts-url ラベルも、BuildConfig で指定したスクリプトも、以下の形式のいずれかを使用します。
			
- 
						
image:///path_to_scripts_dir: S2I スクリプトが配置されているディレクトリーへのイメージ内の絶対パス - 
						
file:///path_to_scripts_dir: S2I スクリプトが配置されているディレクトリーへのホスト上の相対パスまたは絶対パス - 
						
http(s)://path_to_scripts_dir: S2I スクリプトが配置されているディレクトリーの URL 
| スクリプト | 説明 | 
|---|---|
| 
							 assemble (必須)  | 
							 assemble スクリプトは、ソースからアプリケーションアーティファクトをビルドし、イメージ内の適切なディレクトリーに配置します。このスクリプトのワークフローは以下のとおりです。 
  | 
| 
							 run (必須)  | 
							 run スクリプトはアプリケーションを実行します。  | 
| 
							 save-artifacts (オプション)  | 
							 save-artifacts スクリプトは、次に続くビルドプロセスを加速できるように全依存関係を集めます。以下に例を示します。 
 これらの依存関係は、tar ファイルに集められ、標準出力としてストリーミングされます。  | 
| 
							 usage (オプション)  | 
							 usage スクリプトでは、ユーザーに、イメージの正しい使用方法を通知します。  | 
| 
							 test/run (オプション)  | 
							 test/run スクリプトでは、イメージが正しく機能しているかどうかを確認するための、単純なプロセスを作成できます。このプロセスの推奨フローは以下のとおりです。 
 詳細は、S2I イメージのテスト のトピックを参照してください。 注記 test/run スクリプトでビルドしたテストアプリケーションを配置する推奨の場所は、イメージリポジトリーの test/test-app ディレクトリーです。詳しい情報は、S2I ドキュメント を参照してください。  | 
S2I スクリプトの例
以下の例は Bash で記述されており、tar の内容はすべて /tmp/s2i ディレクトリーに展開されることが前提です。
例4.1 assemble スクリプト:
例4.2 run スクリプト:
run the application
#!/bin/bash
# run the application
/opt/application/run.sh
例4.3 save-artifacts スクリプト:
例4.4 usage スクリプト:
4.4. ONBUILD 命令でのイメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
				ONBUILD 命令は、以下など、Docker の公式イメージの多くに含まれています。
			
- Ruby
 - Node.js
 - Python
 
				ONBUILD に関する詳しい情報は、Docker ドキュメント を参照してください。
			
				S2I は、開始されると、S2I プロセスでビルドインプットの注入に必要とされる sh と tar バイナリーが、ビルダーイメージに含まれているかどうかを検出します。ビルダーイメージでこれらの要件が満たされていない場合には、代わりにインプットを階層化するコンテナービルドの実行を試みます。ビルダーイメージに ONBUILD 命令が含まれる場合には、ONBUILD 命令が階層化プロセス中に実行され、S2I ビルドよりセキュリティーが低い一般的なコンテナーが実行されるのと同等で、明示的なパーミッションが必要となるので、S2I ではビルドが失敗します。
			
				このように、S2I ビルダーイメージに ONBUILD 命令が含まれていないことを確認するか、sh と tar バイナリーの要件が満たされていることを確認してください。