Sonatype Nexus 3 — это менеджер репозиториев с открытым исходным кодом, используемый для хранения программных артефактов и управления ими. Это обеспечивает центральное расположение для хранения программных компонентов и их зависимостей и управления ими, упрощая управление программными пакетами и их распространение в организации.
Предварительные требования
- Требуется минимум 2-ядерный процессор и 4 ГБ оперативной памяти.
- Базовые знания о Docker.
- Базовые знания команд Linux.
- Запуск Docker.
В этом посте мы покажем вам, как развернуть nexus docker container.
Извлеките образ Nexus Docker
Нам нужно извлечь официальный образ docker из Docker Hub с помощью данной команды.
sudo docker pull sonatype/nexus3

Проверьте образ Nexus Docker
Давайте проверим образ nexus docker, выполнив данную команду.
sudo docker images

Развертывание контейнера Nexus Docker
Мы умеем развертывать образы nexus docker с помощью следующих команд.
Создайте каталог для хранения данных nexus вне контейнера docker.
sudo mkdir nexus-data
Как развернуть контейнер nexus docker.
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
Для проверки контейнера nexus.
sudo docker ps

Доступ к порталу Nexus
Как только контейнер nexus будет развернут, мы сможем получить доступ к порталу nexus с localhost: 8081 или IP экземпляра Docker http://IP-Address:8081
Примечание: Если ваша машина docker работает внутри брандмауэра, то вам необходимо открыть порт 8081, чтобы получить доступ к серверу nexus repository.

Настройте пароль пользователя вашего администратора, Ваш пароль пользователя администратора находится в /nexus-data/admin.password на сервере.
sudo docker exec -it <Container_id> cat /nexus-data/admin.password
Вам нужно заменить идентификатор контейнера на приведенную выше команду, чтобы получить пароль nexus по умолчанию.

Вы должны получить возможность обновить свой собственный пароль для администратора.

после этого вы должны получить параметр «Настроить анонимный доступ», вы должны выбрать параметр «Анонимный доступ», В моем случае я выбираю «Disable anonymous access» (Отключить анонимный доступ).

И тогда вы должны получить сообщение finish при просмотре веб-страниц, подобное этому.

Как попасть на главную панель управления nexus следующим образом.

Создание репозитория Maven
Мы собираемся рассказать о проекте maven и загрузке артефактов maven в nexus repository.
Следуйте приведенным шагам, чтобы создать репозиторий maven nexus.
Нажмите на кнопку репозитории.

Нажмите на кнопку Создать репозиторий.

Найдите и щелкните maven2 (размещенный) репозиторий.

Введите имя репозитория maven project nexus, это имя должно быть уникальным, В моем случае я использую example и

вы также можете оставить другие настройки по умолчанию и нажать на кнопку «Создать репозиторий» в конце веб-страницы.

Проверьте созданный репозиторий nexus, В разделе репозитория вы должны увидеть недавно созданный репозиторий.

Мы успешно развернули nexus docker container и настроили bind mount в ubuntu 22.04 LTS, если у вас все еще есть вопросы, пожалуйста, разместите их в разделе комментариев ниже.
Здравствуйте, я хочу попросить вас оценить мой compose с nexus.
GNU nano 5.4 docker-compose.yml se
rvices:db
: i
mage: postgres:15 c
ontainer_name: nexus-db e
nvironment:
POSTGRES_DB: nexus
POSTGRES_USER: nexus
POSTGRES_PASSWORD: nexuspassword v
olumes:
— db-data:/var/lib/postgresql/data n
etworks:
— nexus-network h
ealthcheck:
test: [«CMD-SHELL», «pg_isready -U nexus»]
interval: 10s
timeout: 5s
retries: 5ne
xus: i
mage: sonatype/nexus3 c
ontainer_name: nexus-service d
epends_on:
db:
condition: service_healthy e
nvironment:
NEXUS_DATABASE_TYPE: postgresql
NEXUS_DATABASE_HOST: db
NEXUS_DATABASE_PORT: 5432
NEXUS_DATABASE_NAME: nexus
NEXUS_DATABASE_USER: nexus
NEXUS_DATABASE_PASSWORD: nexuspassword v
olumes:
— nexus-data:/nexus-data
networks:
— nexus-network
ports:
— «8081:8081»
volumes:
nexus-data:
db-data:
Здравствуйте! Спасибо, что поделились конфигурацией.
В целом подход верный: отдельная БД PostgreSQL, healthcheck и depends_on с condition: service_healthy — это как раз то, что нужно, чтобы Nexus не стартовал до готовности БД. Отдельные volumes для данных тоже правильно.
При копировании из nano в комментарий сбилась разметка YAML (склеились строки и отступы). В приложении выше — исправленный вариант. В нём добавлены:
секция networks с явным объявлением nexus-network;
restart: unless-stopped для обоих сервисов.
Для продакшена рекомендую вынести пароль БД в .env и не хранить его в открытом виде в compose. Если понадобится ограничить память JVM у Nexus, можно задать переменную окружения INSTALL4J_ADD_VM_PARAMS с параметрами вроде -Xms1g -Xmx2g.
Если после правок что-то не поднимется — пришлите фрагмент логов контейнера Nexus или БД, разберём точечно.
Плюсы:
PostgreSQL 15 и отдельный контейнер БД.
depends_on с condition: service_healthy — Nexus стартует после готовности БД.
Healthcheck у db через pg_isready.
Отдельные volumes для данных БД и Nexus.
Общая сеть nexus-network для сервисов.
Что стоит улучшить:
Сеть — nexus-network используется в сервисах, но в конце файла нет секции networks:, где она объявлена. Лучше явно добавить.
Пароль — nexaxpassword в открытом виде; для продакшена лучше .env или Docker secrets.
Рестарт — можно добавить restart: unless-stopped для обоих сервисов.
Nexus — при желании можно задать JVM-память через INSTALL4J_ADD_VM_PARAMS (например, -Xms1g -Xmx2g), если не описали в статье.
Исправленный и «причёсанный» пример compose для ответа:
services:db:
image: postgres:15
container_name: nexus-db
environment:
POSTGRES_DB: nexus
POSTGRES_USER: nexus
POSTGRES_PASSWORD: nexuspassword
volumes:
- db-data:/var/lib/postgresql/data
networks:
- nexus-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nexus"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
nexus:
image: sonatype/nexus3
container_name: nexus-service
depends_on:
db:
condition: service_healthy
environment:
NEXUS_DATABASE_TYPE: postgresql
NEXUS_DATABASE_HOST: db
NEXUS_DATABASE_PORT: "5432"
NEXUS_DATABASE_NAME: nexus
NEXUS_DATABASE_USER: nexus
NEXUS_DATABASE_PASSWORD: nexuspassword
volumes:
- nexus-data:/nexus-data
networks:
- nexus-network
ports:
- "8081:8081"
restart: unless-stopped
volumes:
nexus-data:
db-data:
networks:
nexus-network:
driver: bridge