docker - 双重标记 docker 图像(最新 + 设置版本)+ 将最新部署到 k8s + 然后查找真实标签?
问题描述
我想在构建/泊坞窗推送时对泊坞窗图像(最新 + 版本,例如 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
有没有人有另一种方法?
解决方案
然后我想用最新的标签将我所有的应用程序部署到 kubernetes
不,你肯定不会;您想使用发布候选图像创建 GitLab 所称的环境,然后Deployment
如果一切顺利,则将 RC 提升为真实环境。在几乎所有情况下,使用:latest
都是灾难的秘诀。
如果您坚持使用:latest
,那么我建议将“真实”图像标签放在临时的注释、标签或环境变量中,Deployment
这样您以后就可以获取该信息,不仅是为了您的理智,而且还可以使其可用到大概是拆除临时堆栈并将图像提升到生产堆栈的过程。
推荐阅读
- sql - 使用外部表的问题
- python - 有没有办法降低 cv2.VideoWriter 实时摄像机录制视频的比特率?
- python-3.x - RuntimeError:字典在迭代期间改变了大小,你能告诉我如何解决这个问题
- json - 一种查看reddit图像是否已被删除的方法
- python - 将两个数组之间的行匹配限制为特定列的值
- reactjs - Docker - npm 错误!enoent ENOENT:没有这样的文件或目录,打开 '/package.json' ----- /docker-entrypoint.sh: 38: exec: npm: not found
- drupal-8 - Drupal 8 上的缓存图像
- android - 如何在不发生重复类冲突的情况下混淆两个不同 `.aar` 的包名称?
- git - 如何确保 .gitignore 不缺少 Visual Studio 2017 引用?
- javascript - 图像比较滑块在 Firefox 上不起作用