По умолчанию werf использует Docker Registry API и для большинства container registries от пользователя никаких дополнительных действий не требуется.
Тем не менее container registry может поддерживать Docker Registry API не полностью и/или реализовывать часть функций в нативном API. В таком случае, при работе с container registry от пользователя могут потребоваться дополнительные действия и данные.
Используя заданный адрес репозитория (опция --repo
) werf пытается автоматически определить container registry. Пользователь может явно указать container registry, используя опцию --repo-container-registry
или переменную окружения WERF_REPO_CONTAINER_REGISTRY
.
Сборка | Бандлы | Очистка | |
---|---|---|---|
AWS ECR | ок | ок | *ок |
Azure CR | ок | ок | *ок |
Default | ок | ок | ок |
Docker Hub | ок | ок | *ок |
GCR | ок | ок | ок |
GitHub Packages | ок | ок | *ок |
GitLab Registry | ок | ок | *ок |
Harbor | ок | ок | ок |
JFrog Artifactory | ок | ок | ок |
Nexus | ок | не проверялся | ок |
Quay | ок | не поддерживается | ок |
Yandex Container Registry | ок | ок | ок |
Selectel CRaaS | ok | не проверялся | *ok |
Авторизация
При работе с container registry команды werf используют данные хранящиеся в конфигурации Docker. По умолчанию используется пользовательская директория ~/.docker
или альтернативный путь, заданный переменной окружения WERF_DOCKER_CONFIG
или DOCKER_CONFIG
.
Конфигурация Docker — это директория, в которой хранятся данные авторизации, используемые для доступа в различные container registries, а также настройки Docker
Для авторизации можно использовать команду docker login
, oras login
или нативные решения container registry.
В рамках CI-заданий рекомендуется использовать команду werf ci-env, которая создаёт временную конфигурацию Docker на базе пользовательской, а также выполняет авторизацию (при использовании container registry CI), используя переменные окружения CI. Подробнее о подключении werf к CI-системам в соответствующем разделе.
Использование общей конфигурации Docker при параллельном выполнении заданий в CI-системе может приводить к падениям из-за временных доступов и состояния race condition (одно задание влияет на другое, переопределяя доступы в общей конфигурации Docker), поэтому для каждого CI-задания мы рекомендуем создавать собственную конфигурацию Docker (команда
werf ci-env
делает это по умолчанию)
Бандлы
Для работы с бандлами достаточно поддержки спецификации формата образов Open Container Initiative (OCI) в container registry.
Очистка
По умолчанию при удалении тегов werf использует Docker Registry API и от пользователя требуется только авторизация с использованием доступов с достаточным набором прав.
Если удаление посредством Docker Registry API не поддерживается и оно реализуется в нативном API, то от пользователя потребуется выполнить специфичные для container registry действия.
AWS ECR
При удалении тегов werf использует AWS SDK, поэтому перед очисткой container registry необходимо выполнить одно из следующих действий:
- Установить AWS CLI и выполнить конфигурацию (
aws configure
) или - Определить
AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
переменные окружения.
Azure CR
При удалении тегов werf использует Azure CLI, поэтому перед очисткой container registry необходимо выполнить следующие действия:
- Установить Azure CLI (
az
). - Выполнить авторизацию (
az login
).
Пользователю необходимо иметь одну из следующих ролей:
Owner
,Contributor
илиAcrDelete
(подробнее Azure CR roles and permissions)
Docker Hub
При удалении тегов werf использует Docker Hub API, поэтому при очистке container registry необходимо определить token или username и password.
Для получения token можно использовать следующий скрипт:
HUB_USERNAME=username
HUB_PASSWORD=password
HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${HUB_USERNAME}'", "password": "'${HUB_PASSWORD}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
В качестве token нельзя использовать personal access token, т.к. удаление ресурсов возможно только при использовании основных учётных данных пользователя
Для того, чтобы задать параметры, следует использовать следующие опции или соответствующие им переменные окружения:
--repo-docker-hub-token
или--repo-docker-hub-username
и--repo-docker-hub-password
.
GitHub Packages
При организации CI/CD в Github Actions мы рекомендуем использовать наш набор actions, который решит за вас большинство задач.
При удалении тегов werf использует GitHub API, поэтому при очистке container registry необходимо определить token с read:packages
и delete:packages
scopes.
Для того, чтобы задать токен, следует использовать опцию --repo-github-token
или соответствующую переменную окружения.
GitLab Registry
При удалении тегов werf использует GitLab Container Registry API или Docker Registry API в зависимости от версии GitLab.
Для удаления тега прав временного токена CI-задания (
$CI_JOB_TOKEN
) недостаточно, поэтому пользователю необходимо создать специальный токен в разделе Access Token (в секции Scope необходимо выбратьapi
) и выполнить авторизацию с ним
Selectel CRaaS
При очистке werf использует Selectel CR API, поэтому при очистке container registry необходимо определить username/password, account and vpc or vpcID.
Для того, чтобы задать параметры, следует использовать следующие опции или соответствующие им переменные окружения:
--repo-selectel-username
--repo-selectel-password
--repo-selectel-account
--repo-selectel-vpc
or--repo-selectel-vpc-id
Известные прлоблемы
1) Иногда Selectel не отдаёт токен при использовании VPC ID. Попробуйте использовать имя VPC. 2) CR API не позволяет удалять теги, которые хранятся в корне registry. 3) Небольшой лимит запросов в API. При активной разработке могут быть проблемы с очисткой.