【问题标题】:Double tagging docker images (latest + set version) + deploy latest to k8s + then lookup real tag?双重标记 docker 图像(最新 + 设置版本)+ 将最新部署到 k8s + 然后查找真实标签?
【发布时间】:2018-05-26 14:30:13
【问题描述】:

我想在构建/docker 推送时对 docker 镜像(最新 + 版本,例如 1.3.0-78)进行双重标记。

然后我想将我的所有应用程序部署到具有最新标签的 kubernetes,如果测试通过,然后从我可以从与“最新”相关联的 kubernetes 获得的图像摘要中查找“真实”标签(1.3.0-78) ",然后创建一个包含所有 docker 标签的清单作为候选发布版。

不幸的是,我还没有找到仅基于摘要找到“真实”标签的好方法。

看来您必须迭代整个存储库中的所有标签并寻找匹配的摘要。鉴于特定图像可能有数百或数千个标签,这可能需要很长时间。

这是一个脚本,它可以找到所有具有相同摘要的标签,但速度很慢:

REPOSITORY=$1
TARGET_TAG=$2


# find all tags
ALL_TAGS=$(curl -s  $REPOSITORY/tags/list | jq -r .tags[])

# get image digest for target
TARGET_DIGEST=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json"   $REPOSITORY/manifests/$TARGET_TAG | grep Docker-Content-Digest | cut -d ' ' -f 2)

# for each tags
for tag in ${ALL_TAGS[@]}; do
  echo "checking tag ${tag}"
  # get image digest
  digest=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json" $REPOSITORY/manifests/$tag | grep Docker-Content-Digest | cut -d ' ' -f 2)

  # check digest
  if [[ $TARGET_DIGEST = $digest ]]; then
    echo "$tag $digest"
  fi
done

有人有其他方法吗?

【问题讨论】:

  • 看起来您一定已经根据您的代码找到了这个问题,但对于其他人搜索,此处显示了将摘要映射到标签的更完整示例stackoverflow.com/questions/41808763/…
  • 此外,您可以通过对ALL_TAGS 应用正则表达式过滤器来加快该代码的速度,以便仅检索可能匹配的标签的摘要。

标签: docker kubernetes


【解决方案1】:

然后我想将我所有的应用程序部署到带有最新标签的kubernetes

不,你肯定不会;你想创建 GitLab 调用的 an environment 使用 release-candidate 图像,然后将 RC 提升为真正的 Deployment 如果一切顺利。在几乎所有情况下,使用 :latest 都会导致灾难。

如果您坚持使用:latest,那么我建议将“真实”图像标签放在临时Deployment 的注释、标签或环境变量中,这样您就可以稍后获取该信息,不仅是为了您的理智,而且还可以将其提供给可能正在拆除临时堆栈并将图像提升到生产堆栈的过程。

【讨论】:

  • 使用“latest”只是为了方便 dev/qa。想要使用最新的代码进行开发和测试是一个常见的用例。 latest 的问题是它不可重现,这是我要解决的问题。
  • 我目前在想,由于 docker 注册表 API 的限制,我将不得不以一种或另一种方式将 docker 标签发布到另一个系统以进行查找:( 如果我继续下去最新的路径,我必须将真正的标签发布到一个并行注册表到另一个键/映射系统 {latest: {digest: $digest, buildtag: $buildtag}}。
  • 使用“最新”是......不可复制是的,你和我说的是同一件事,但我不能清楚地传达一个从不,永远 需要在任何情况下都使用:latest。这就像说“去结帐master 并部署碰巧坐在其中的任何sha”以“方便开发/质量保证”——这不是方便,而是缺乏特异性。 ...如果你想发布到第二个仓库,那是你的选择,但你解决了错误的问题。
猜你喜欢
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多