IBM Cloud Docs
构建 Docker 映像

构建 Docker 映像

您可以在 containerize 阶段中构建所需的所有 Docker 映像。 如果您希望覆盖这些映像的缺省内置 GPG 映像签名,那么需要让管道了解这些映像。

添加图像工件

您可以使用 pipelinectl 界面来添加图像工件。 在 containerize 阶段中,将图像作为工件添加到管道:

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

其中 name 的值必须是标准映像名称,例如: your-docker-repository.namespace/imagename:imagetagdigest 必须是映像的 sha256 摘要,例如 sha256:c43e802dcc7485590b54614006ced9338d5bd9a045115c89d5570bb95eeb52d9

<image-alias> 可以是任何字符串,其目的是为其他工件中的图像提供人类可读的名称。 您可以向工件添加任何属性,例如标记和时间戳记等。

typenamedigest 字段必填!

示例

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 Image 签名将能够拾取这些图像并进行处理。

正在装入图像工件

在释放阶段的管道结束时,您可以使用 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

有关更多信息,请查看以下文档: