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