Как пометить изображение в реестре докеров v2

В нашем CI-CD есть логика, в которой теги (через REST) ​​помещают изображение в прошлое (если тесты успешны). Это работало в реестре v1.

теперь переместился на v2 api, и я не могу найти в документации, как "добавить" теги к существующему изображению в реестре. Я делаю шаг, который может принести "манифест" некоторого промежуточного образа, но не конечно, как добавить тег и http-post его. попытался отправить нижеприведенный ввод

  • "tag": "staging", "latest",

  • "tag": [ "staging", "latest" ], и более

    { "schemaVersion": 1, "name": "configservice", "тег": "постановка", "архитектура": "amd64", "fsLayers": [....

Ответ 1

Если у вас есть Docker Registry, поддерживающий схему манифеста 2, вы можете просто загрузить манифест существующего изображения под новым тегом.

Например, предположим, что вы хотите пометить последнюю версию образа busybox. Этапы:

Загрузить существующий манифест:

curl '<registry_url>/v2/mybusybox/manifests/latest' \
-H 'accept: application/vnd.docker.distribution.manifest.v2+json' \
> manifest.json

Здесь будет выглядеть манифест (обратите внимание, что schemaVersion равно 2):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/octet-stream",
      "size": 1459,
      "digest": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 667590,
         "digest": "sha256:8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f"
      }
   ]
}

Загрузите манифест под новый тег:

curl -XPUT '<registry_url>/v2/mybusybox/manifests/new_tag' \
-H 'content-type: application/vnd.docker.distribution.manifest.v2+json' \
-d '@manifest.json'

Подробное пошаговое руководство дается в post.

Ответ 2

Это не прямой ответ на ваш вопрос, но я всегда делал следующее...

docker pull myimage:staging
docker run myimage:staging test
docker tag myimage:staging myimage:release
docker push myimage:release

Ответ 3

Я просто хотел добавить, так как это появилось в моих результатах поиска, что реестр контейнеров Google включает команду, чтобы сделать это напрямую.

gcloud container images add-tag gcr.io/project/image:old-tag gcr.io/project/image:new-tag

Рабочий процесс, описанный выше, работал, но привел к созданию нового контейнера, а не к добавлению дополнительного тега к существующему.