Как использовать Nexus в качестве Docker Registry?
Nexus в роли Docker Registry — это конфигурация Nexus Repository Manager для хранения, проксирования и раздачи Docker-образов, что позволяет организации иметь приватный Docker Registry без отдельной инфраструктуры.
Представьте, что Docker Hub — это публичная библиотека, а вам нужна корпоративная. Вместо того чтобы разворачивать отдельное здание (standalone Docker Registry), вы добавляете новый отдел (Docker-репозиторий) к уже существующей библиотеке (Nexus). Читатели (разработчики) могут и хранить свои книги (hosted), и заказывать публичные (proxy) — через одно окно (group).
Настройка в Nexus
Для полноценной работы создаются три Docker-репозитория (каждый на своём HTTP-порту):
| Репозиторий | Тип | HTTP-порт | Назначение |
|---|---|---|---|
docker-hosted |
Hosted | 8083 | Хранение собственных образов |
docker-hub-proxy |
Proxy | 8084 | Кэширование образов из Docker Hub |
docker-group |
Group | 8085 | Единый URL для скачивания (объединяет hosted + proxy) |
Почему отдельные порты? Docker Registry API требует выделенного хоста/порта для корректной работы команд docker push и docker pull.
Использование Docker с Nexus
Пример
# Авторизация в Nexus Docker Registry
docker login nexus.company.com:8083 -u admin -p admin123
# Тегирование образа для Nexus
docker tag my-app:1.0.0 nexus.company.com:8083/my-app:1.0.0
# Загрузка образа в Nexus (push — через hosted-порт 8083)
docker push nexus.company.com:8083/my-app:1.0.0
# Скачивание образа из Nexus (pull — через group-порт 8085)
docker pull nexus.company.com:8085/my-app:1.0.0
Использование в Jenkinsfile
Пример
stage('Build & Push Docker Image') {
steps {
script {
def image = docker.build("nexus.company.com:8083/my-app:${env.BUILD_NUMBER}")
docker.withRegistry('https://nexus.company.com:8083', 'nexus-docker-credentials') {
image.push()
image.push('latest')
}
}
}
}
Настройка Docker daemon
Если Nexus использует HTTP (без TLS), необходимо добавить в /etc/docker/daemon.json:
Пример
{
"insecure-registries": ["nexus.company.com:8083", "nexus.company.com:8085"]
}
В production рекомендуется использовать HTTPS с валидным сертификатом — это устраняет необходимость insecure-registries и обеспечивает безопасную передачу данных.
Вывод
Использование Nexus как Docker Registry — удобное решение «два в одном»: не нужно разворачивать и поддерживать отдельный registry. Nexus предоставляет единый интерфейс управления для Maven-артефактов, Docker-образов и других форматов.
На собеседовании: часто спрашивают, зачем нужны разные порты для Docker-репозиториев в Nexus. Ответ: Docker Registry API требует выделенного хоста/порта. Push выполняется через hosted-порт, pull — через group-порт (объединяет hosted и proxy).