5.2. Source-to-Image ビルド
Source-to-Image (S2I) は再現可能なコンテナーイメージをビルドするためのツールです。これはアプリケーションソースをコンテナーイメージに挿入し、新規イメージをアセンブルして実行可能なイメージを生成します。新規イメージはベースイメージ、ビルダーおよびビルドされたソースを組み込み、buildah run
コマンドで使用することができます。S2I は増分ビルドをサポートします。これは以前にダウンロードされた依存関係や、以前にビルドされたアーティファクトなどを再利用します。
5.2.1. Source-to-Image (S2I) 増分ビルドの実行 リンクのコピーリンクがクリップボードにコピーされました!
Source-to-Image (S2I) は増分ビルドを実行できます。つまり、以前にビルドされたイメージからアーティファクトが再利用されます。
手順
増分ビルドを作成するには、ストラテジー定義に以下の変更を加えてこれを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2. Source-to-Image (S2I) ビルダーイメージスクリプトの上書き リンクのコピーリンクがクリップボードにコピーされました!
ビルダーイメージによって提供される assemble
、run
、および save-artifacts
Source-to-Image (S2I) スクリプトを上書きできます。
手順
ビルダーイメージによって提供される assemble
、run
、および save-artifacts
S2I スクリプトを上書きするには、以下のいずれかを実行します。
-
アプリケーションのソースリポジトリーの
.s2i/bin
ディレクトリーにassemble
、run
、 またはsave-artifacts
スクリプトを指定します。 ストラテジー定義の一部として、スクリプトを含むディレクトリーの URL を指定します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このパスに、
run
、assemble
、およびsave-artifacts
が追加されます。一部または全スクリプトがある場合、そのスクリプトが、イメージに指定された同じ名前のスクリプトの代わりに使用されます。
scripts
URL にあるファイルは、ソースリポジトリーの .s2i/bin
にあるファイルよりも優先されます。
5.2.3. Source-to-Image 環境変数 リンクのコピーリンクがクリップボードにコピーされました!
ソースビルドのプロセスと生成されるイメージで環境変数を利用できるようにする方法として、2 つの方法があります。2 種類 (環境ファイルおよび BuildConfig 環境の値の使用) あります。指定される変数は、ビルドプロセスでアウトプットイメージに表示されます。
5.2.3.1. Source-to-Image 環境ファイルの使用 リンクのコピーリンクがクリップボードにコピーされました!
ソースビルドでは、ソースリポジトリーの .s2i/environment
ファイルに指定することで、アプリケーション内に環境の値 (1 行に 1 つ) を設定できます。このファイルに指定される環境変数は、ビルドプロセス時にアウトプットイメージに表示されます。
ソースリポジトリーに .s2i/environment
ファイルを渡すと、Source-to-Image (S2I) はビルド時にこのファイルを読み取ります。これにより assemble
スクリプトがこれらの変数を使用できるので、ビルドの動作をカスタマイズできます。
手順
たとえば、ビルド中の Rails アプリケーションのアセットコンパイルを無効にするには、以下を実行します。
-
DISABLE_ASSET_COMPILATION=true
を.s2i/environment
ファイルに追加します。
ビルド以外に、指定の環境変数も実行中のアプリケーション自体で利用できます。たとえば、Rails アプリケーションが production
ではなく development
モードで起動できるようにするには、以下を実行します。
-
RAILS_ENV=development
を.s2i/environment
ファイルに追加します。
サポートされる環境変数の完全なリストは、各イメージのイメージの使用に関するセクションを参照してください。
5.2.3.2. Source-to-Image ビルド設定環境の使用 リンクのコピーリンクがクリップボードにコピーされました!
環境変数をビルド設定の sourceStrategy
定義に追加できます。ここに定義されている環境変数は、assemble
スクリプトの実行時に表示され、アウトプットイメージで定義されるので、run
スクリプトやアプリケーションコードでも利用できるようになります。
手順
たとえば、Rails アプリケーションのアセットコンパイルを無効にするには、以下を実行します。
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. Source-to-Image ソースファイルを無視する リンクのコピーリンクがクリップボードにコピーされました!
Source-to-Image (S2I) は .s2iignore
ファイルをサポートします。これには、無視する必要のあるファイルパターンのリストが含まれます。このファイルには、無視すべきファイルパターンのリストが含まれます。.s2iignore
ファイルにあるパターンと一致する、さまざまな入力ソースで提供されるビルドの作業ディレクトリーにあるファイルは assemble
スクリプトでは利用できません。
5.2.5. Source-to-Image によるソースコードからのイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
Source-to-Image (S2I) は、アプリケーションのソースコードを入力として取り、アセンブルされたアプリケーションを出力として実行する新規イメージを生成するイメージを簡単に作成できるようにするフレームワークです。
再生成可能なコンテナーイメージのビルドに S2I を使用する主な利点として、開発者の使い勝手の良さが挙げられます。ビルダーイメージの作成者は、イメージが最適な S2I パフォーマンスを実現できるように、ビルドプロセスと S2I スクリプトの基本的なコンセプト 2 点を理解する必要があります。
5.2.5.1. Source-to-Image ビルドプロセスについて リンクのコピーリンクがクリップボードにコピーされました!
ビルドプロセスは次の 3 つの基本要素で構成されます。これらを組み合わせて最終的なコンテナーイメージが作成されます。
- ソース
- Source-to-Image (S2I) スクリプト
- ビルダーイメージ
S2I は、最初の FROM
命令として、ビルダーイメージで Dockerfile を生成します。S2I によって生成される Dockerfile は Buildah に渡されます。
5.2.5.2. Source-to-Image スクリプトの作成方法 リンクのコピーリンクがクリップボードにコピーされました!
Source-to-Image (S2I) スクリプトは、ビルダーイメージ内でスクリプトを実行できる限り、どのプログラム言語でも記述できます。S2I は assemble
/run
/save-artifacts
スクリプトを提供する複数のオプションをサポートします。ビルドごとに、これらの場所はすべて、以下の順番にチェックされます。
- ビルド設定に指定されるスクリプト
-
アプリケーションソースの
.s2i/bin
ディレクトリーにあるスクリプト -
io.openshift.s2i.scripts-url
ラベルを含むデフォルトの URL にあるスクリプト
イメージで指定した io.openshift.s2i.scripts-url
ラベルも、ビルド設定で指定したスクリプトも、以下の形式のいずれかを使用します。
-
image:///path_to_scripts_dir
: S2I スクリプトが配置されているディレクトリーへのイメージ内の絶対パス。 -
file:///path_to_scripts_dir
: S2I スクリプトが配置されているディレクトリーへのホスト上の相対パスまたは絶対パス。 -
http(s)://path_to_scripts_dir
: S2I スクリプトが配置されているディレクトリーの URL。
スクリプト | 説明 |
---|---|
|
|
|
|
|
これらの依存関係は |
|
|
|
注記
|
S2I スクリプトの例
以下の S2I スクリプトの例は Bash で記述されています。それぞれの例では、tar
の内容は /tmp/s2i
ディレクトリーにデプロイメントされることが前提とされています。
assemble
スクリプト:
run
スクリプト:
run the application
#!/bin/bash
# run the application
/opt/application/run.sh
save-artifacts
スクリプト:
usage
スクリプト:
5.2.6. ビルドボリュームの使用 リンクのコピーリンクがクリップボードにコピーされました!
ビルドボリュームをマウントして、実行中のビルドに、アウトプットコンテナーイメージで永続化しない情報にアクセスできます。
ビルドボリュームは、ビルド時にビルド環境や設定が必要なリポジトリーの認証情報など、機密情報のみを提供します。ビルドボリュームは、データが出力コンテナーイメージに保持される ビルド入力 とは異なります。
実行中のビルドがデータを読み取るビルドボリュームのマウントポイントは機能的に pod volume mounts に似ています。
手順
BuildConfig
オブジェクトのsourceStrategy
定義で、ビルドボリュームをvolumes
配列に追加します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1 5 9
- 必須。一意な名前
- 2 6 10
- 必須。マウントポイントの絶対パス。
..
または:
を含めないでください。こうすることで、ビルダーが生成した宛先パスと競合しなくなります。/opt/app-root/src
は、多くの Red Hat S2I 対応イメージのデフォルトのホームディレクトリーです。 - 3 7 11
- 必須。ソースのタイプは、
ConfigMap
、Secret
、またはCSI
。 - 4 8
- 必須。ソースの名前。
- 12
- 必須。一時 CSI ボリュームを提供するドライバー。
- 13
- 必須。この値は
true
に設定する必要があります。読み取り専用ボリュームを提供します。 - 14
- オプション:一時 CSI ボリュームのボリューム属性。サポートされる属性キーおよび値については、CSI ドライバーのドキュメントを参照してください。
共有リソース CSI ドライバーは、テクノロジープレビュー機能としてサポートされています。