第1章 コンテナーイメージを作成する


アプリケーション開発者として、ソースコード、フレームワーク、および自動化要件に応じて、buildahソースからイメージへの 変換、または ビルドパック ストラテジーを使用してコンテナーイメージを作成します。コンテナーイメージのビルドには、Open Container Initiative (OCI) の成果物を使用することもできます。

1.1. buildah ビルドの作成

Dockerfile を使用してコンテナーイメージをビルドし、プッシュするには、buildah の ビルドストラテジーを使用します。

前提条件

  • OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
  • oc CLI がインストールされている。
  • オプション: shp CLI がインストールされている。

手順

  1. Build リソースを作成して OpenShift Container Platform クラスターに適用します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: buildah-golang-build
    spec:
      source:
        type: Git
        git:
          url: https://github.com/shipwright-io/sample-go
        contextDir: docker-build
      strategy:
        name: buildah
        kind: ClusterBuildStrategy
      paramValues:
      - name: dockerfile
        value: Dockerfile
      output:
        image: image-registry.openshift-image-registry.svc:5000/buildah-example/sample-go-app
    EOF

    各項目の説明:

    source
    ソースコードが配置される場所を定義します。
    strategy
    コンテナーを構築するために使用するビルドストラテジーを定義します。
    パラメーター値
    ビルドストラテジーで定義されたパラメーターを定義します。dockerfile ストラテジーパラメーターの値を設定するには、出力イメージの構築に必要な Dockerfile の場所を指定します。
    output
    ビルドされたイメージがプッシュされる場所を定義します。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。buildah-example は現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
    $ shp build create buildah-golang-build \
    --source-url="https://github.com/redhat-openshift-builds/samples"
    --source-context-dir="buildah-build" \
    --strategy-name="buildah" \
    --dockerfile="Dockerfile" \
    --output-image="image-registry.openshift-image-registry.svc:5000/buildah-example/go-app"

    各項目の説明:

    ソースコンテキストディレクトリー
    ソースコードが配置される場所を定義します。
    ストラテジー名
    コンテナーを構築するために使用するビルドストラテジーを定義します。
    dockerfile
    ビルドストラテジーで定義されたパラメーターを定義します。dockerfile ストラテジーパラメーターの値を設定するには、出力イメージのビルドに必要な Dockerfile の場所を指定します。
    出力イメージ
    ビルドされたイメージがプッシュされる場所を定義します。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。buildah-example は現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
  2. ビルド リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

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

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

    各項目の説明:

    spec.build.name
    実行するビルドを定義します。このビルドは同じ名前空間に存在することが想定されます。
    $ shp build run buildah-golang-build --follow
    • --follow:: (オプション) --follow フラグを使用すると、出力結果にビルドログが表示されます。
  4. BuildRun リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc get buildrun buildah-golang-buildrun
    $ shp buildrun list

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

検証

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

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

    $ oc get pods -w

    出力例:

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

    $ oc get tr

    出力例:

    NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
    buildah-golang-buildrun-dtrg2  True       Succeeded  11m         8m51s
  3. それぞれの BuildRun リソースに SUCCEEDED フィールドが True と表示されているかどうかを確認します。

    $ oc get br

    出力例:

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

    注記

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

  5. build.spec.output.image フィールドで指定されたレジストリーにイメージがプッシュされたかどうかを検証します。内部レジストリーにアクセスできるノードからイメージを取得するには、次のコマンドを実行します。

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

    前の例では、プロジェクト名は buildah-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
トップに戻る