Her*_*oCC 12 continuous-integration containers docker dockerhub docker-registry
我有一个 GitLab CI 作业,它将同一应用程序的多个架构构建到 docker 映像中。我想将它们推送到 DockerHub,而无需标记每个图像。这样我就可以将它们添加到清单中,而不会用一堆重复的图像污染标签目录。
例如——来自这组标签:
对此:
这是可能的吗?我现在制作了这段代码来推高标签并制作清单,但我不确定如何调整它。
- >
for arch in $DEPLOY_ARCHS; do
NEW_IMAGE_NAME="${REPO_PATH}:${REVISION}-${arch}${TAG_EXTRAS}"
docker pull "${INDEV_IMAGE_NAME}-${arch}${TAG_EXTRAS}"
docker tag "${INDEV_IMAGE_NAME}-${arch}${TAG_EXTRAS}" "${NEW_IMAGE_NAME}"
docker push "${NEW_IMAGE_NAME}" # I want to be able to push to the manifest without tagging
export IMAGES="$IMAGES ${NEW_IMAGE_NAME}"
done
- docker manifest create ${REPO_PATH}:${REVISION}${TAG_EXTRAS} ${IMAGES}
- docker manifest push --purge ${REPO_PATH}:${REVISION}${TAG_EXTRAS}
Run Code Online (Sandbox Code Playgroud)
这是可能的吗?
这是我找到的解决方案 - 尽管对于大多数人来说,与 Jean 的答案相比,这里添加的步骤和解决方法是不必要的。除非你特别需要我提供的答案,否则你应该接受这个答案。
我想在不同的机器(arm 机和 amd64 机)上运行构建,以实现比 qemu 提供的更好的构建速度。但是,GitLab / GitHub 运行器无法相互通信,因此我无法使用 buildx 原生在多台机器上运行的功能。我想出的是构建图像,将它们推送到中间注册表(或者如果没有可用的注册表,则在本地导出和导入它们),拉出并使用它们作为另一个最终构建的缓存。
GitLab CI 中是这样的:
# Build your images separately however you need, tagging with -${arch}
# Do testing on the image to make sure it validates, then...
deploy_image:
stage: deploy
script:
- >
for arch in "amd64 arm64 armv7"; do
export name="$<YOUR CONTAINER URL AND TAG>-${arch}"
docker pull "NAME" # or `docker load`
export ARCH_IMAGES_CACHE="$ARCH_IMAGES_CACHE --cache-from $NAME"
done
# Docker will detect that the images we pulled are entirely cacheable, and use those without building
- docker buildx build --push --pull $ARCH_IMAGES_CACHE --build-arg BUILDKIT_INLINE_CACHE=1 --platform="linux/amd64,linux/arm64,linux/arm/v7" -t "$<YOUR CONTAINER URL>:${CI_COMMIT_SHORT_SHA}" .
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法或抽象可以使用docker manifest或来完成docker buildx imagetools,但这是我想出的最佳解决方案。
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |