Я хочу дважды пометить образы докеров (последняя + версия, например, 1.3.0-78) во время сборки / запуска докера.
Затем я хочу развернуть все свои приложения в kubernetes с последним тегом,если тесты пройдут, найдите «настоящий» тег (1.3.0-78) из дайджеста изображения, который я могу получить из kubernetes, связанного с «последним», а затем создайте манифест всех тегов докера в качестве кандидата на выпуск.
К сожалению, я не нашел хорошего способа найти "настоящий" тег, основанный только на дайджесте.
Похоже, вам нужно итерировать все теги во всем хранилище и искать соответствующий дайджест.Учитывая, что для конкретного изображения могут быть сотни или тысячи тегов, это может занять очень много времени.
Вот скрипт, который находит все теги с одинаковым дайджестом, но он очень медленный:
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
У кого-нибудь есть другой подход?