Ответ
Да, разворачивал приватные Docker Registry для хранения внутренних образов. Использовал официальный образ registry:2. Основная задача — создать безопасное и отказоустойчивое хранилище, интегрированное в CI/CD.
Базовый запуск для тестирования:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Конфигурация для production-среды включала:
- TLS/SSL: Настройка обратного прокси (Nginx или Traefik) с сертификатами от Let's Encrypt.
- Аутентификация: Интеграция с базовой аутентификацией (htpasswd) или, что чаще, с корпоративным SSO (например, через Dex или OAuth2 proxy).
- Хранение: Настройка бэкенда хранения на Amazon S3 или Google Cloud Storage для масштабируемости и надежности вместо локального диска.
- Кэширование: Настройка Registry как pull-through cache для публичных образов из Docker Hub, чтобы ускорить сборки и снизить зависимость от внешних репозиториев.
Пример docker-compose с аутентификацией и S3-бэкендом:
version: '3.8'
services:
registry:
image: registry:2
container_name: registry
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_STORAGE: s3
REGISTRY_STORAGE_S3_ACCESSKEY: ${AWS_ACCESS_KEY}
REGISTRY_STORAGE_S3_SECRETKEY: ${AWS_SECRET_KEY}
REGISTRY_STORAGE_S3_REGION: us-east-1
REGISTRY_STORAGE_S3_BUCKET: my-company-docker-registry
volumes:
- ./auth:/auth
В CI/CD пайплайнах (GitLab CI, GitHub Actions) затем настраивал аутентификацию и push/pull команд docker login и docker push.