第1章 コンテナーイメージを作成する
アプリケーション開発者として、ソースコード、フレームワーク、および自動化要件に応じて、buildah、ソースからイメージへの 変換、または ビルドパック ストラテジーを使用してコンテナーイメージを作成します。コンテナーイメージのビルドには、Open Container Initiative (OCI) の成果物を使用することもできます。
1.1. buildah ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
Dockerfile を使用してコンテナーイメージをビルドし、プッシュするには、buildah の ビルドストラテジーを使用します。
前提条件
- OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
-
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。
手順
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は現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
ビルドリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get builds.shipwright.io buildah-golang-build$ shp build listBuildRunリソースを作成し、それを 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フラグを使用すると、出力結果にビルドログが表示されます。
BuildRunリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get buildrun buildah-golang-buildrun$ shp buildrun listBuildRunリソースはTaskRunリソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。
検証
すべてのコンテナーがタスクを完了したら、以下のリソースを確認してください。
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それぞれの
TaskRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get tr出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-golang-buildrun-dtrg2 True Succeeded 11m 8m51sそれぞれの
BuildRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get br出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-golang-buildrun True Succeeded 13m 11m検証中にビルドの実行が失敗した場合は、
BuildRunリソースのstatus.failureDetailsフィールドをチェックして、Pod またはコンテナー内で失敗が発生した正確なポイントを特定できます。注記コンテナーの 1 つがタスクを完了したため、Pod が
NotReady状態に切り替わる可能性があります。これは想定される動作です。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" } ]