Docker registry провайдеры

Docker Container Registry — сервис для хранения и распространения Docker-образов. Genesis реализует контейнеризацию приложений с помощью частных registry.

В качестве дефолтного используется registry провайдер предоставляемый git провайдером (Gitlab registry), при этом есть возможность его смены на сторонний, к примеру Yandex container registry.

Gitlab Docker registry

По умолчанию при использовании в качестве git провайдера Gitlab, будет использован Gitlab docker registry со следующими переменными:

REGISTRY_PROVIDER: GL
REGISTRY_URL: $CI_REGISTRY_IMAGE
REGISTRY_USER: $CI_REGISTRY_USER
REGISTRY_TOKEN: $CI_REGISTRY_PASSWORD

В таком случае значения для переменных REGISTRY_URL, REGISTRY_USER, REGISTRY_TOKEN будут заполнены из CI/CD процесса Gitlab. Но вы можете указать значения переменных своего отдельного Gitlab Docker Registry.

Yandex Docker registry

Для работы с YandexRegistry необходимо сформировать REGISTRY_TOKEN доступа и YANDEX_CLOUD_FOLDER_ID. Узнать об этом можно на странице Yandex token. Так же будет необходим regisrty_id, где его найти можно узнать тут.

В результате, для работы YandexRegistry, должен получиться перечень переменных:

variables:
    REGISTRY_PROVIDER: YA
    REGISTRY_URL: cr.yandex/registry_id
    REGISTRY_USER: iam
    REGISTRY_TOKEN: {
                       "id": "oauth_key_id",
                       "service_account_id": "service_account_id_with_admin_permissions_for_folder",
                       "private_key": "-----BEGIN PRIVATE KEY-----\nsome_key\n-----END PRIVATE KEY-----"
                   }
    YANDEX_CLOUD_FOLDER_ID: $YANDEX_CLOUD_FOLDER_ID

HOSTING_TOKEN был приведен в человекочитаемый вид для наглядности.

Multi registry login

Реализует возможность производить логин в частные реджестри, что в свою очередь помогает избежать лимитов docker hub (For authenticated users, it is 200 pulls per 6 hour period) на скачивание образов. Для работы необходимо сформировать json для переменной MULTI_REGISTRY_TOKEN формата dict[str, dict[str, str]] и указать в своих манифестах пути до контейнеров в репозиториях.

Примечание если вы решите использовать один реджестри как для собираемых генезисом образов, так и для своих статических образов (для обхода лимитов), то в таком случае необходимо указывать тэг latest для своих имеджей, в противном случае генезис удалит лишние тэги отличные от имени ветки и от тэга latest.

Пример json для токена (проверить коректонсть синтаксиса json можно тут):

{
  "REGISTRY_NAME": {
    "url": "some_url",
    "username": "some_username",
    "token": "some_pass"
  },
  "YANDEX_REGISTRY_iam_token": {
    "url": "cr.yandex/some_folder_id",
    "username": "iam",
    "token": {
      "id": "some_id",
      "service_account_id": "some_account_id",
      "private_key": "-----BEGIN PRIVATE KEY-----\nsome_private_key\n-----END PRIVATE KEY-----"
    }
  },
  "YANDEX_REGISTRY_oauth_token": {
    "url": "cr.yandex",
    "username": "oauth",
    "token": "some_token"
  }
}

Для использования дополнительных Yandex Regestry:

  1. Для аутентификации с помощью Iam-токена значение для поля "token" должно содержать json token сформированный аналогично Yandex token.
  2. Для аутентификации с помощью OAuth-токена получите токен согласно инструкции. Помните что срок жизни OAuth-токена 1 год. После этого необходимо получить новый OAuth-токен и повторить процедуру аутентификации.