2.2. ネットワーク制限のある環境でソースからイメージへのビルドを作成する


非接続環境で ソースからイメージへの ビルドストラテジーを使用するには、まず必要なビルダーイメージをローカルレジストリーにミラーリングしてください。このアプローチにより、組織のコンテンツポリシーを遵守しながら、パブリックレジストリーへのアクセスなしでクラスターを運用することが可能になります。

前提条件

  • OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
  • oc CLI がインストールされている。
  • オプション: shp CLI がインストールされている。
  • お使いのクラスターは、ソースからイメージへのビルドを作成するために使用できる Git ソースに接続してやり取りすることができます。
  • ローカルレジストリーで source-to-image ビルドを作成するために必要な builder-image がある。ビルダーイメージがローカルレジストリーに存在しない場合は、ソースイメージをミラーリングしてください。

手順

  1. ソースからイメージへの ビルドストラテジーに必要なイメージをミラーリングするには、次のコマンドを実行します。

    $ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/source-to-image/source-to-image-rhel8@sha256:d041c1bbe503d152d0759598f79802e257816d674b342670ef61c6f9e6d401c5 <mirror_registry>/<repo>/source-to-image-source-to-image-rhel8

    各項目の説明:

    < レジストリー認証 >
    コンテナーレジストリーへのアクセスに使用する認証情報を指定します。これは、プライベートレジストリーへのプッシュまたはプライベートレジストリーからのプルを行う際に必要です。
    < ミラーレジストリー >
    ミラーリングしたいイメージが保存されているレジストリーを指定します。
  2. Build リソースを作成して OpenShift Container Platform クラスターに適用します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: s2i-nodejs-build
    spec:
      source:
        type: Git
        git:
          url: https://github.com/redhat-openshift-builds/samples
        contextDir: s2i-build/nodejs
      strategy:
        name: source-to-image
        kind: ClusterBuildStrategy
      paramValues:
      - name: builder-image
        value: quay.io/centos7/nodejs-12-centos7:master
      output:
        image: quay.io/<repo>/s2i-nodejs-example
        pushSecret: registry-credential
    EOF

    各項目の説明:

    source
    ソースコードが配置される場所を定義します。
    strategy
    コンテナーを構築するために使用するビルドストラテジーを定義します。
    パラメーター値
    ビルドストラテジーのパラメーターを定義します。ソースからイメージへの ビルドの場合、これにはアプリケーションのビルドに使用されるベースイメージを指定する builder-image パラメーターが含まれます。
    output
    ビルドされたイメージがプッシュされる場所を定義します。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。buildah-example は現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
    pushSecret
    コンテナーイメージをプッシュするための認証情報を格納する秘密の名前を定義します。認証用に docker-registry タイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
    $ shp build create s2i-nodejs-build \
    --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="s2i-build/nodejs" \
    --strategy-name="source-to-image" \
    --builder-image="quay.io/centos7/nodejs-12-centos7" \
    --output-image="quay.io/<repo>/s2i-nodejs-example" \
    --output-credentials-secret="registry-credential"

    各項目の説明:

    ソースコンテキストディレクトリー
    ソースコードが配置される場所を定義します。
    ストラテジー名
    コンテナーの構築に使用するビルドストラテジー。
    builder-image
    ビルドストラテジーで定義されるパラメーター。ソースイメージ ビルドの場合、これはアプリケーションのビルドに使用されるベースイメージを指定します。
    出力イメージ
    ビルドイメージがプッシュされる場所。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。buildah-example は現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
    出力認証情報シークレット
    コンテナーイメージをプッシュするための認証情報を保存するシークレット名。認証用に docker-registry タイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
  3. ビルド リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc get builds.shipwright.io s2i-nodejs-build
    $ shp build list
  4. BuildRun リソースを作成し、それを OpenShift Container Platform クラスターに適用します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: BuildRun
    metadata:
      name: s2i-nodejs-buildrun
    spec:
      build:
        name: s2i-nodejs-build
    EOF

    各項目の説明:

    spec.build.name
    実行するビルドを指定します。このビルドは同じ名前空間に存在することが想定されます。
    $ shp build run s2i-nodejs-build --follow

    詳細は次のとおりです。

    --follow
    (オプション) --follow フラグを使用すると、出力結果にビルドログを表示できます。
  5. BuildRun リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc get buildrun s2i-nodejs-buildrun
    $ shp buildrun list

    BuildRun リソースは TaskRun リソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。

検証

すべてのコンテナーがタスクを完了したら、以下のリソースの状態を確認してください。

  1. Pod で STATUS フィールドが Completed として表示されるかどうかを確認します。

    $ oc get pods -w

    出力例:

    NAME                                READY   STATUS     RESTARTS   AGE
    s2i-nodejs-buildrun-phxxm-pod       2/2     Running    0          10s
    s2i-nodejs-buildrun-phxxm-pod       1/2     NotReady   0          14s
    s2i-nodejs-buildrun-phxxm-pod       0/2     Completed  0          2m
  2. それぞれの TaskRun リソースに SUCCEEDED フィールドが True と表示されているかどうかを確認します。

    $ oc get tr

    出力例:

    NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
    s2i-nodejs-buildrun-phxxm      True       Succeeded  2m39s        13s
  3. それぞれの BuildRun リソースに SUCCEEDED フィールドが True と表示されているかどうかを確認します。

    $ oc get br

    出力例:

    NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
    s2i-nodejs-buildrun      True        Succeeded    2m41s           15s
  4. 検証中にビルドの実行が失敗した場合は、BuildRun リソースの status.failureDetails フィールドをチェックして、Pod またはコンテナー内で失敗が発生した正確なポイントを特定できます。

    注記

    コンテナーの 1 つがタスクを完了したため、Pod が NotReady 状態に切り替わる可能性があります。これは想定される動作です。

  5. build.spec.output.image フィールドで指定されたレジストリーにイメージがプッシュされたかどうかを検証します。レジストリーにログインし、以下のコマンドを実行してイメージをプルします。

    $ podman manifest inspect image-registry.openshift-image-registry.svc:5000/s2i-example/taxi-app

    前の例では、プロジェクト名は s2i-example、イメージ名は taxi- アプリケーション です。

    出力例:

       "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "manifests": [
            {
                "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
                "size": 594,
                "digest": "sha256:6a05100e302c86c03fec6277f4b3107f1fdde6c69d3ca9a4207e4735a5213e32",
                "platform": {
                    "architecture": "amd64",
                    "os": "linux"
                }
         ]
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る