Что такое API gcloud для реестра контейнеров Google?

Мне нужно перечислить изображения контейнера Docker, опубликованные в определенном проекте, но я не могу найти подходящий API, используя gcloud Инструмент CLI. Это возможно?

Есть ли какое-либо другое решение для отображения изображений контейнеров из этого личного реестра контейнеров в моем проекте Google?

1 ответ

Вы можете использовать "gcloud docker search /" для вывода списка изображений. Имя хоста должно быть "gcr.io", или "us.gcr.io", или как там ваши изображения. Обратите внимание, что вам нужно перебрать все возможные хосты, чтобы найти все изображения в рамках проекта. Однако этот метод только перечисляет репозитории, он не будет перечислять теги или манифесты.

Вы также можете напрямую использовать API реестра, чтобы получить больше информации. Используя приведенный ниже скрипт в качестве руководства по началу работы:

#!/bin/bash

HOSTS="gcr.io us.gcr.io eu.gcr.io asia.gcr.io"
PROJECT=your-project-id

function search_gcr() {
  local fullpath=""
  local host=$1
  local project=$2
  if [[ -n $3 ]]; then
    fullpath=${3}
  fi
  local result=$(curl -u _token:$(gcloud auth print-access-token) \
    --fail --silent --show-error \
    https://${host}/v2/${project}${fullpath}/tags/list)
  if [[ -z $result ]]; then
    printf ""
  else
    printf $result
  fi
}

function recursive_search_gcr() {
  local host=$1
  local project=$2
  local repository=$3
  local result=$(search_gcr $host $project ${repository})
  local returnVal=$?
  if [[ -z $result ]]; then
    echo Not able to curl: https://${host}/v2/${project}${fullpath}/tags/list
    return
  fi
  local children="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'child' in obj:
  print ' '.join(obj['child'])
else:
  print ''
EOF
    )"

  for child in $children;
  do
    recursive_search_gcr $host $project ${repository}/${child}
  done
  local manifests="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'manifest' in obj:
  print ' '.join(obj['manifest'])
else:
  print ''
EOF
    )"
  echo Repository ${host}/${project}$repository:
  echo "    manifests:"
    for manifest in $manifests
    do
      echo "        "$manifest
    done
    echo

  local tags="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'tags' in obj:
  print ' '.join(obj['tags'])
else:
  print ''
EOF
    )"
  echo "    tags:"
  for tag in $tags
  do
    echo "        "$tag
  done
  echo
}

for HOST in $HOSTS;
do
  recursive_search_gcr $HOST $PROJECT
done

Используйте команду "gcloud container images" для поиска и взаимодействия с изображениями в реестре контейнеров Google. Например, это будет список всех контейнеров в проекте под названием "my-project":

gcloud container images list --repository=gcr.io/my-project

Полная документация находится по адресу https://cloud.google.com/container-registry/docs/managing

Другие вопросы по тегам