Ответ
Работал с различными реестрами в зависимости от требований к безопасности, стоимости и интеграции:
Публичные и облачные реестры:
- Docker Hub – для публичных образов базовых ОС и софта (например,
nginx:alpine). Для приватных репозиториев использовал редко из-за лимитов. - AWS ECR / Google GCR / Azure ACR – основной выбор в облачных проектах. Интеграция с IAM и встроенная безопасность (сканирование на уязвимости в ECR, immutable tags в GCR).
Приватные/корпоративные реестры:
- Harbor – разворачивал on-premise и в облаке. Ключевые фичи: vulnerability scanning (интеграция с Trivy/Clair), replication между инстансами, подписание образов (Notary).
- GitLab Container Registry – использовал в связке с GitLab CI. Удобно, так как образ автоматически собирался и пушился в тот же проект.
- Nexus Repository OSS – универсальное решение, когда нужно хранить не только Docker-образы, но и артефакты Maven, npm пакеты.
Рабочий процесс:
- Сборка и тегирование образа с версией (
git commit SHA) иlatestдля основной ветки. - Аутентификация:
docker loginили использованиеcredHelpers(для ECR). - Push образа. В CI/CD пайплайне это выглядело так:
# Пример для AWS ECR aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.eu-west-1.amazonaws.com docker build -t my-app:${CI_COMMIT_SHA} . docker tag my-app:${CI_COMMIT_SHA} 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-project/my-app:${CI_COMMIT_SHA} docker push 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-project/my-app:${CI_COMMIT_SHA} - В Kubernetes использовал
imagePullSecretsдля доступа к приватным реестрам.