1.4. OCI アーティファクトを使用したビルドの作成


コンテナーイメージをビルドするには、Open Container Initiative (OCI) アーティファクト (スクラッチイメージとも呼ばれる) をソースコードとしてレジストリーに保存します。これらをプルして展開し、ビルドのソースとして使用してください。これらにはソースコードのみが含まれており、実行可能なコンテナーは含まれていません。

前提条件

  • OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
  • oc コマンドラインインターフェイス (CLI) がインストールされている。
  • shp CLI がインストールされている。

手順

  1. Build リソースを作成して OpenShift Container Platform クラスターに適用します。次の設定例を参照してください。

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: <build_resource_name>
    spec:
      source:
        type: OCI
        ociArtifact:
          image: <quay.io/org/image:tag>
      strategy:
        name: <strategy_name>
        kind: ClusterBuildStrategy
      output:
        image: <target_image_registry/repository/image:tag>
        pushSecret: <secret_name_for_credentials>
    EOF

    各項目の説明:

    <build_resource_name>
    ビルド リソースの名前を指定します。
    <quay.io/org/image:tag>
    OCI アーティファクトのソースイメージの場所を指定します。
    < 戦略名 >
    コンテナーを構築するためのビルドストラテジーの名前を指定します。
    <target_image_registry/repository/image:tag>
    ビルドしたイメージをプッシュする場所を指定します。
    < 認証情報用の秘密名 >
    (オプション) コンテナーイメージをプッシュするための認証情報を格納するシークレット名を指定します。認証用のプライベートレジストリーのシークレットを生成するには、コンテナーレジストリーへの認証を 参照してください。
  2. 次のいずれかの方法を選択して、ソースコードを必要なレジストリーにアップロードし、ビルドを実行します。

    • shp CLI を使用してソースコードをアップロードします。

      • ローカルソースコードを含むディレクトリーで次のコマンドを実行します。ソースコードをスクラッチコンテナーイメージにパッケージ化し、必要なレジストリーにプッシュして、ビルドを実行します。

        $ shp build upload <build_resource_name>

        各項目の説明:

        <build_resource_name>
        ビルド リソースの名前を指定します。
    • OCI アーティファクトを手動でアップロードします。

      1. ソースコードのルートディレクトリーに Containerfile を作成し、次の設定を追加します。

        FROM scratch
        COPY . /
      2. ソースコードのルートディレクトリーで次のコマンドを実行し、Podman を使用してコンテナーイメージをビルドします。

        $ podman build -t <registry_path>/<image_name>:<tag> .

        各項目の説明:

        < レジストリーパス >
        イメージが保存されるレジストリーのビルド場所を指定します。
        <image_name>
        コンテナーイメージの名前を指定します。
        <tag>

        イメージのタグを指定します。

        コンテナーイメージが正常に構築されると、成功メッセージが表示されます。以下のコマンド例と出力結果を参照してください。

        podman build -t quay.io/example/oci:latest .
        STEP 1/2: FROM scratch
        STEP 2/2: COPY . /
        --> Using cache 31f2530b092a8e0d75586407052900e9946043eca09deb9a2c9e50c2541bfcfd
        COMMIT quay.io/example/oci:latest
        --> 31f2530b092a
        Successfully tagged quay.io/example/oci:latest
        31f2530b092a8e0d75586407052900e9946043eca09deb9a2c9e50c2541bfcfd
      3. 次のコマンドを使用して、コンテナーイメージを必要な場所にプッシュします。

        $ podman push <registry_path>/<image_name>:<tag>

        各項目の説明:

        < レジストリーパス >
        イメージが保存されるレジストリーのビルド場所を指定します。
        <image_name>
        コンテナーイメージの名前を指定します。
        <tag>
        イメージのタグを指定します。
      4. 次のコマンドを使用してビルドを実行します。

        $ shp build run <build_resource_name>

        各項目の説明:

        <build_resource_name>
        ビルド リソースの名前を指定します。

検証

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

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

    $ oc get pods -w

    出力例:

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

    $ oc get tr

    出力例:

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

    $ oc get br

    出力例:

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

    注記

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

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

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

    前の例では、プロジェクト名は oci- アーティファクト s-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
トップに戻る