IBM Cloud Docs
Docker イメージのビルド

Docker イメージのビルド

必要なすべての Docker イメージを、containerizeステージでビルドすることができます。 それらのイメージのデフォルトの組み込み GPG イメージ署名をオーバーライドする場合は、パイプラインにそれらのイメージを認識させる必要があります。

イメージ成果物の追加

イメージ成果物は pipelinectl インターフェースを使用して追加することができます。 コンテナー化ステージで、イメージを成果物としてパイプラインに追加します。

save_artifact <image-alias> type=image "name=${IMAGE}" "digest=${DIGEST}" [<prop>=<value>]

ここで、name の値は完全修飾イメージ名でなければなりません (例: your-docker-repository.namespace/imagename:imagetag)。また、digest は、イメージの sha256 ダイジェストでなければなりません (例: sha256:c43e802dcc7485590b54614006ced9338d5bd9a045115c89d5570bb95eeb52d9)。

<image-alias> には任意のストリングを指定できます。その目的は、他の成果物の中からイメージの名前を人間が判読できるようにすることです。 成果物にはタグやタイム・スタンプなど任意のプロパティーを追加することができます。

typename、および digest は必須フィールドです。

save_artifact service type=image \
  name="${SERVICE_IMAGE}" \
  digest="${SERVICE_IMAGE_DIGEST}" \
  tags="${SERVICE_IMAGE_TAGS}"

save_artifact service_debug type=image \
  "name=${SERVICE_DEBUG_IMAGE}" \
  "digest=${SERVICE_DEBUG_IMAGE_DIGEST}"

このインターフェースを使用すると、デフォルトの組み込み GPG イメージ署名によってこれらのイメージをピックアップし、処理することができます。

イメージ成果物のロード

パイプラインのリリース・ステージの最後に、pipelinectl インターフェースを使用してこれらの成果物にアクセスすることができます。

list_artifacts
load_artifact <image-alias> <property>

list_artifacts は、使用可能なイメージ別名をリストしています。ここで、 <property> は、ユーザーまたは以前に追加したパイプラインの任意のプロパティーです。 これらを一緒に使用することで、成果物を順に反復して処理することができます。以下に例を示します。

list_artifacts | while IFS= read -r artifact; do

  $image=$(load_artifact "$artifact" name)
  $digest=$(load_artifact "$artifact" digest)
  $signature=$(load_artifact "$artifact" signature)

  # update your inventory using these

done

signature プロパティーは、デフォルトの組み込み GPG イメージ署名タスクによって追加されます。

ICR での作業

IBM Cloud® Container Registry には、コンテナー・イメージを保管して IBM Cloud アカウント内のユーザーと共有するために使用できるマルチテナント・プライベート・イメージ・レジストリーが用意されています。

プライベート・エンドポイントが有効になっている ICR の操作

プライベート・エンドポイントで有効になっているレジストリーを処理するには、環境変数 registry-domain をパイプラインに追加する必要があります。

registry-domain の値は private.de.icr.io に設定できます。

環境変数を使用するために、コードは以下のサンプルのようになります。

ICR_REGISTRY_DOMAIN="$(get_env registry-domain "")"
if [ -z "$ICR_REGISTRY_DOMAIN" ]; then
  # Default to icr domain from registry-region
  ICR_REGISTRY_REGION="$(get-icr-region "$(get_env registry-region "")")"
  ICR_REGISTRY_DOMAIN="$ICR_REGISTRY_REGION.icr.io"
fi
IMAGE="$ICR_REGISTRY_DOMAIN/$ICR_REGISTRY_NAMESPACE/$IMAGE_NAME:$IMAGE_TAG"
docker login -u iamapikey --password-stdin "$ICR_REGISTRY_DOMAIN" < /config/api-key

前のサンプル・コードは、 sample hello-compliance-app から取得されています。

詳しくは、以下の資料を確認してください。