Использование selfhosted Nexus в качестве docker registry

Использование selfhosted Nexus в качестве docker registry

За основу была взята статья https://blog.sonatype.com/using-sonatype-nexus-repository-3-part-3-docker-images

Nexus можно использовать в качестве docker-registry — как хранилище docker-образов, которые собраны самостоятельно, так и как кэширующий прокси для основного docker-hub, чтобы образы скачивались каждый раз не из интернета, а из локальной сети.

Далее будет рассмотрена последовательность шагов, позволяющая настроить свой собственный nexus в качестве docker-registry.

Нам потребуется:

  1. Приватный репозиторий для хранения собственных docker-образов;
  2. Прокси-репозиторий для хранения образов из docker-hub;
  3. Репозиторий-группа, которая объединит в себе приватный и прокси-репозиторий и будет выступать в качестве единой точки входа для docker-клиентов.

Для каждого репозитория можно создать свое собственное blob-хранилище, отличное от хранилища по-умолчанию. По сути это означает создание отдельной папки внутри рабочего каталога nexus (/nexus-data). Этот прием можно использовать, чтобы можно было подмонтировать отдельный диск или persistence volume (в случае запуска nexus через docker) для этой папки.

Создание приватного репозитория

Логинимся в nexus под админской учеткой, заходим в настройки (1), репозитории (2), создать репозиторий (3).

В списке типов репозиториев выбираем docker (hosted) и заполняем настройки как представлено на картинке.

Обращаем внимание на заполнение имени репозитория (docker-private), http-коннектор с портом 8082.

Создание прокси-репозитория

Делаем по аналогии с приватным репозиторием, но в списке выбираем тип docker (proxy).

Особенности — необходимо ввести удаленный docker-registry, который мы планируем проксировать (https://registry-1.docker.io в данном примере — центральный docker-репозиторий, но ничто не мешает ввести адрес любого docker-registry), выбрать Docker Index — Use Docker Hub

Создание группы-репозитория

Завершающий этап — создание группы репозиториев, которая объединяет в себе созданные выше приватный и прокси-репозиторий.

Особенности — указываем http-коннектор с портом 8083, добавляем ранее созданные репозитории docker-private и docker-proxy в качестве членов данной группы.

Создание отдельного пользователя

Чтобы пользоваться нашим собственным docker-registry более безопасно можно создать в nexus отдельного пользователя, которому присвоить роль, которой доступен деплой образов. Для этого переходим в раздел Users в настройках, создаем пользователя (например, docker), задаем ему пароль, роль deployers.

Настройка клиентов

Для взаимодействия с новосозданными репозиториями необходимо произвести настройку docker-демонов на машине, на которой планируется запускать docker-контейнеры.

Создаем файл (при отсутствии) /etc/docker/daemon.json со следующим содержимым

{
  "insecure-registries": [
    "repo-url-or-ip:8082",
    "repo-url-or-ip:8083"
  ]
}

Это позволит docker’у обращаться к нашим репозиториям по менее безопасному http-протоколу. https в нашем случае не обязателен, т. к. мы работаем внутри локальной сети, недоступной извне.

Перезапускаем docker-демон командой sudo systemctl restart docker (при использовании ubuntu. В других дистрибутивах может использоваться иная команда)

Логинимся в нашем docker-репозитории с использованием учетной записи docker

sudo docker login -u docker -p passw repo-url-or-ip:8082
sudo docker login -u docker -p passw repo-url-or-ip:8083

При этом в домашней директории пользователя, под которым запускаем эти команды, будет создан файл ~/.docker/config.json с примерно следующим содержимым

{
	"auths": {
		"repo-url-or-ip:8082": {
			"auth": "YWRtaW46YWRtaW4xMjM="
		},
		"repo-url-or-ip:8083": {
			"auth": "YWRtaW46YWRtaW4xMjM="
		}
}
Работа с docker-репозиторием

Для получения образов контейнеров из репозитория необходимо использовать команду (порт 8083 соответствует групповому репозиторию! При этом внутри nexus запрос будет направлен в репозиторий docker-proxy, который, в свою очередь, произведет вытягивание (в случае отсутствия) образа из центрального docker-hub’а, на который был настроен прокси)

sudo docker pull repo-url-or-ip:8083/httpd:2.4-alpine

Для загрузки своих собственных образов в nexus необходимо сперва пометить собранный на локальной машине образ тегом, а затем его залить в наш приватный docker-репозиторий (обращаем внимание на использование порта 8082)

sudo docker tag own-image:1 repo-url-or-ip:8082/own-image:1
sudo docker push repo-url-or-ip:8082/own-image:1

Для получения своих собственных образов можно использовать как порт 8082, так и 8083

sudo docker pull own-image:1 repo-url-or-ip:8082/own-image:1
# или
sudo docker pull own-image:1 repo-url-or-ip:8083/own-image:1
Back To Top