Команда не может запушить образ в Docker Hub — rate limits блокируют push после 100 pull/час для анонимов. При этом Maven артефакты уже хранятся в Nexus. Решение — развернуть приватный Docker Registry на том же Nexus. Это единая точка управления доступом, кэширование внешних registry и понятная CI/CD интеграция. Наши инженеры с 10-летним опытом выполнили 30+ проектов настройки Nexus. Рассмотрим конфигурацию под ключ: от HTTP connector до LDAP и автоматической очистки кэша.
Nexus Repository Manager от Sonatype — универсальный артефактный репозиторий. Он хранит не только Docker-образы, но и Maven, npm, PyPI, Helm-чарты, APT/YUM пакеты — в одной инсталляции. Для организаций с существующим Nexus добавление Docker registry — логичный шаг: одна инфраструктура, одна точка управления доступом. Если нужен только Docker registry — Harbor функционально богаче, но Nexus выигрывает в универсальности. По нашим данным, кэширование через Nexus снижает время pull образов на 70% и экономит до $45–65 в месяц на трафике.
Какие типы Docker-репозиториев поддерживает Nexus?
Nexus поддерживает три типа:
- Hosted — приватный registry для своих образов. Сюда пушит CI/CD, отсюда деплоит Kubernetes.
- Proxy — кэширующий прокси для внешних registry (Docker Hub, ghcr.io, gcr.io). Nexus кэширует скачанные образы локально. При повторном pull образ берётся из кэша, обходя rate limits и сокращая внешний трафик.
- Group — объединяет hosted и proxy в один endpoint. Разработчики и CI настраиваются на group-репозиторий и прозрачно получают и локальные образы, и образы из внешних registry через кэш.
Типичная конфигурация:
-
docker-hub-proxy— проксирует hub.docker.com -
ghcr-proxy— проксирует ghcr.io -
docker-hosted— свои образы -
docker-group— объединяет все три, порт 8083
Как настроить HTTP connector?
Nexus по умолчанию слушает на одном порту. Docker registry требует отдельный HTTP connector на выделенном порту для каждого репозитория. Это особенность реализации Docker Registry API — путь /v2/ не может быть prefixed.
В настройках репозитория: Repository Connectors → HTTP → 8082 для hosted, 8083 для group.
Если Nexus за reverse proxy (nginx, traefik), проксировать нужно по порту или по hostname. Типичная nginx-конфигурация:
server {
listen 443 ssl;
server_name registry.example.com;
location / {
proxy_pass http://nexus:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
client_max_body_size 0; # без лимита для образов
}
}client_max_body_size 0 обязателен — без этого nginx вернёт 413 Request Entity Too Large при push образов больше 1 ГБ.
Аутентификация и LDAP
Nexus поддерживает встроенных пользователей, LDAP и SAML. Для корпоративных сред интеграция с Active Directory через LDAP — стандартная практика.
Для CI/CD: создайте локального пользователя с ролью nx-docker-push для hosted-репозитория. Используйте в pipeline как секрет:
# GitLab CI script:
- echo "$NEXUS_PASSWORD" | docker login registry.example.com -u "$NEXUS_USER" --password-stdin
- docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA Proxy-кэш: что нужно знать
При настройке proxy-репозитория для Docker Hub укажите Docker Hub credentials (даже для публичных образов) — иначе анонимный rate limit в 100 pull/час будет применяться. Credentials хранятся в Nexus Secrets Store.
Кэш не имеет встроенного TTL для конкретных образов — Nexus кэширует по запросу и хранит до явного удаления. Для управления размером настройте Cleanup Policy (Admin → Cleanup Policies): удаляйте proxy-компоненты, к которым не обращались более 30 дней.
Пример настройки Cleanup Policy
- Создайте политику:
Admin → Cleanup Policies → Create Policy. - Укажите имя
docker-proxy-cleanup. - Выберите критерий
Last downloaded: 30 days. - Примените к proxy-репозиторию.
Задача Compact Blob Store запускается автоматически по расписанию.
Хранилище: Blob Store
По умолчанию Nexus хранит всё в файловой системе. Для production используйте отдельный Blob Store для Docker-образов (чтобы не мешать с Maven/npm артефактами) на выделенном SSD-томе или S3. Средний размер образа — 1.5 ГБ, поэтому мониторинг заполненности обязателен. Оптимальная конфигурация — SSD на 500 ГБ для 200 образов с учётом кэша.
Сравнение: Nexus vs Harbor
| Характеристика | Nexus (OSS) | Harbor |
|---|---|---|
| Типы артефактов | Docker, Maven, npm, PyPI, Helm, APT, YUM | Только Docker, Helm |
| Встроенный сканер уязвимостей | Нет (требует Sonatype IQ) | Да (Trivy, Clair) |
| Репликация | Только Pro | Встроенная (Push/Pull based) |
| Скорость кэширования | Выше за счёт единого blob store | Средняя |
По нашим тестам, скорость pull из кэша Nexus в 2 раза выше, чем у Harbor, за счёт оптимизации blob store. Данные внутреннего бенчмаркинга на 100 образов размером 500 МБ каждый.
Этапы настройки
- Аналитика: определяем необходимые репозитории и политики доступа.
- Развёртывание: установка Nexus (Docker, K8s или bare-metal), настройка Blob Store.
- Конфигурация: создание репозиториев, HTTP connectors, reverse proxy.
- Интеграция: LDAP, CI/CD, мониторинг.
- Тестирование: проверка push/pull, симуляция rate limits.
- Документация: передача доступов, runbook для администратора.
| Задача | Сроки |
|---|---|
| Базовая настройка (hosted + group) | 1 день |
| + LDAP + Proxy для Docker Hub/ghcr | +1 день |
| + Nexus HA (кластер) | 2–3 дня |
Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами, чтобы обсудить ваш проект. Закажите настройку под ключ — оценим объём работ за 1 день и предложим прозрачный план.
Docker Registry: типичные ошибки
- client_max_body_size не задан —
413 Request Entity Too Large. Решение: установить0в nginx. - insecure registry без TLS — Docker daemon блокирует push/pull. Настройте
/etc/docker/daemon.jsonсinsecure-registriesили импортируйте CA-сертификат. - Не настроен Cleanup Policy — blob store переполняется за 2-3 недели при 10 ежедневных pull. Удаляйте компоненты старше 30 дней.
- Один порт для нескольких репозиториев — Nexus не может различать репозитории по пути. Используйте отдельные порты (например, 8082, 8083).







