欢迎光临
我们一直在努力

Docker 搭建Nexus3私服

一、Nexus 简介

Nexus Repository Manager 3(简称Nexus3)是Sonatype公司推出的一款仓库管理工具,主要用于存储、管理和分发:

  • Maven(Java)依赖
  • Docker 镜像
  • npm(Node.js)包
  • PyPI(Python)包
  • NuGet(.NET)包
  • APT(Debian)包
  • Yum(RPM)包
  • Go 模块
  • 等多种开发语言的组件

二、Nexus 核心概念

2.1 仓库类型

Nexus3的仓库类型主要分为三大类:代理仓库(Proxy Repository)、宿主仓库(Hosted Repository)和仓库组(Repository Group)。

  • 代理仓库(Proxy Repository)

    • 作用:作为远程仓库的缓存代理,提高访问速度并减少外部网络流量。
    • 特点:
      • 缓存远程仓库内容
      • 支持负缓存(缓存404响应)
      • 可设置缓存策略
    • 配置示例(Maven代理仓库):{
      "name": "maven-central",
      "type": "proxy",
      "format": "maven2",
      "url": "https://repo.maven.apache.org/maven2",
      "storage": {
      "blobStoreName": "default",
      "strictContentTypeValidation": true
      },
      "proxy": {
      "remoteUrl": "https://repo.maven.apache.org/maven2",
      "contentMaxAge": 1440,
      "metadataMaxAge": 1440
      },
      "negativeCache": {
      "enabled": true,
      "timeToLive": 1440
      },
      "httpClient": {
      "blocked": false,
      "autoBlock": true,
      "connection": {
      "retries": 0,
      "userAgentSuffix": "Nexus",
      "timeout": 60,
      "enableCircularRedirects": false,
      "enableCookies": false
      }
      }
      }

  • 宿主仓库(Hosted Repository)

    • 作用:存储企业内部生成的制品。
    • 子类型:
      • 发布仓库(Releases):存储稳定版本
      • 快照仓库(Snapshots):存储开发中版本
      • 混合仓库(Mixed):同时支持发布和快照
    • 配置示例:{
      "name": "maven-releases",
      "type": "hosted",
      "format": "maven2",
      "online": true,
      "storage": {
      "blobStoreName": "default",
      "writePolicy": "ALLOW_ONCE", // 防止覆盖
      "strictContentTypeValidation": true
      },
      "cleanup": {
      "policyNames": ["weekly-cleanup"]
      },
      "maven": {
      "versionPolicy": "RELEASE", // RELEASE, SNAPSHOT 或 MIXED
      "layoutPolicy": "STRICT" // STRICT 或 PERMISSIVE
      }
      }

  • 仓库组(Repository Group)

    • 作用:聚合多个仓库,提供统一的访问入口。
    • 特点:
      • 虚拟仓库,不实际存储内容
      • 可包含代理、宿主或其他组仓库
      • 按顺序搜索成员仓库
    • 配置示例:{
      "name": "maven-public",
      "type": "group",
      "format": "maven2",
      "online": true,
      "storage": {
      "blobStoreName": "default",
      "strictContentTypeValidation": true
      },
      "group": {
      "memberNames": [
      "maven-releases",
      "maven-snapshots",
      "maven-central",
      "third-party"
      ]
      }
      }

  • 2.2 仓库格式支持

    Nexus3 支持多种包管理格式:

    • Maven 仓库

      # 配置示例
      maven-central (proxy) # Maven中央仓库代理
      maven-releases (hosted) # 内部发布版本
      maven-snapshots (hosted) # 内部快照版本
      maven-public (group) # 聚合所有Maven仓库

    • Docker 仓库

      # 类型
      docker-hosted # 存储内部Docker镜像
      docker-proxy # 代理Docker Hub/Registry
      docker-group # 聚合多个Docker仓库

      # 配置要点
      – 需要配置HTTP/HTTPS端口
      – 支持Blob存储优化
      – 可配置清理策略

    • NPM 仓库

      # 类型
      npm-proxy # 代理npm官方仓库
      npm-hosted # 存储私有npm包
      npm-group # 聚合npm仓库

      # 使用示例
      npm config set registry http://nexus:8081/repository/npm-group/

    三、Docker 部署 Nexus3

    3.1 拉取镜像

    # 拉取 Nexus3 官方镜像
    docker pull sonatype/nexus3:latest

    3.2 创建挂载目录

    # 创建数据目录(用于持久化存储
    mkdir -p /usr/local/src/nexus/nexus-data
    chmod 777 /usr/local/src/nexus/nexus-data

    3.3 运行容器

    • 基础运行命令

      # 最简单的方式
      docker run -d –name nexus3 -p 8081:8081 sonatype/nexus3

      # 推荐方式(挂载数据卷)
      docker run -d \\
      –name nexus3 \\
      -p 8081:8081 \\
      -v nexus-data:/nexus-data \\
      sonatype/nexus3:latest

    • 完整配置命令(生产环境推荐)

      docker run -d \\
      –name nexus3 \\
      –restart unless-stopped \\
      -p 8081:8081 \\
      -p 5000:5000 \\ # Docker 仓库端口(可选)
      -v /usr/local/src/nexus/nexus-data:/nexus-data \\
      -v /etc/localtime:/etc/localtime:ro \\
      -e INSTALL4J_ADD_VM_PARAMS="-Xms256M -Xmx512M -XX:MaxDirectMemorySize=1g" \\
      -e NEXUS_CONTEXT="/" \\
      sonatype/nexus3:latest

      • -d:后台运行
      • –name nexus3:容器名称
      • –restart unless-stopped:自动重启策略,其他选项:no(不重启)、always(总是重启)、on-failure(失败时重启)
      • -p 8081:8081:映射 Web 管理端口:主机8081 -> 容器8081
      • -p 5000:5000:Docker 私有仓库端口
      • -v nexus-data:/nexus-data:挂载数据卷(持久化存储),将主机目录挂载到容器内
      • -v /etc/localtime:/etc/localtime:ro:时区同步,将主机的时区文件挂载到容器内
      • -e INSTALL4J_ADD_VM_PARAMS:JVM 内存参数设置
      • -e NEXUS_CONTEXT="/":上下文路径(默认为根目录)

    3.4 初始访问

  • 等待容器启动(首次启动需要 2-5 分钟)
  • 访问:http://localhost:8081
  • 默认管理员账号:
    • 用户名:admin
    • 初始密码:查看容器日志获取# 查看容器日志,找到初始密码
      docker logs nexus3 | grep "admin.password"

      # 或者直接查看文件
      docker exec nexus3 cat /nexus-data/admin.password

  • 登录账号:admin
  • 按提示修改密码
    在这里插入图片描述
  • 3.5 基本设置

  • 禁用匿名访问

    设置 → Security → Anonymous Access
    取消勾选 "Allow anonymous users to access the server"

    在这里插入图片描述

  • 创建用户

    设置 → Security → Users → Create local user
    填写:ID、First Name、Last Name、Email、Password
    选择 Role:nx-admin(管理员权限)

    在这里插入图片描述

  • 四、配置各种类型仓库

    4.1 Maven 仓库配置

    • 创建代理仓库(Proxy)
    • 进入 设置 → Repository → Repositories → Create repository
    • 选择 maven2 (proxy)
    • 配置示例:
      • Name: maven-central
      • Remote storage: https://repo1.maven.org/maven2/
      • Version policy: Release
      • Layout policy: Strict

    在这里插入图片描述

    • 创建宿主仓库(Hosted)

    • 选择 maven2 (hosted)
    • 配置示例:
      • Name: maven-releases
      • Version policy: Release
      • Deployment policy: Allow redeploy
    • 创建仓库组(Group)

    • 选择 maven2 (group)
    • 将前面创建的仓库加入组:
      • maven-central
      • maven-releases
      • maven-snapshots

    4.2 Docker 仓库配置

  • 启用 Docker 仓库

    设置 → Repository → Repositories → Create repository
    选择 docker (hosted)

    在这里插入图片描述

  • 配置 Docker 仓库

    Name: docker-hosted
    HTTP: 8082 # 注意此端口需要与容器映射端口一致
    Deployment policy: Allow redeploy

  • 五、仓库使用

    5.1 Maven 仓库使用

  • Maven 配置

    <settings>
    <servers>
    <server>
    <id>nexus</id>
    <username>deployment</username>
    <password>your-password</password>
    </server>
    </servers>

    <mirrors>
    <mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
    </mirrors>
    </settings>

  • 项目 pom.xml 配置:

    <distributionManagement>
    <repository>
    <id>nexus</id>
    <name>Releases</name>
    <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
    <id>nexus</id>
    <name>Snapshots</name>
    <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
    </distributionManagement>

  • 发布和拉取

    # 发布到 Nexus
    mvn clean deploy

    # 从 Nexus 拉取依赖
    mvn clean install

  • 5.2 Docker 仓库使用

  • 配置 Docker 客户端

    # 1. 配置 insecure-registries(Linux/Mac)
    sudo vim /etc/docker/daemon.json
    {
    "insecure-registries": ["localhost:8082"]
    }

    # 重启 Docker
    sudo systemctl restart docker

    # 2. 登录到 Nexus
    docker login localhost:8082
    # 用户名/密码:Nexus 创建的用户

  • 推送/拉取镜像

    # 1. 给镜像打标签
    docker tag my-image:latest localhost:8082/my-image:latest

    # 2. 推送到 Nexus
    docker push localhost:8082/my-image:latest

    # 3. 从 Nexus 拉取
    docker pull localhost:8082/my-image:latest

    # 4. 拉取远程镜像(通过代理)
    # Nexus 会自动缓存 Docker Hub 的镜像
    docker pull localhost:8082/library/nginx:latest

  • 六、高级功能

    6.1 权限管理(RBAC)

    设置 → Security → Roles
    设置 → Security → Privileges

    • 创建角色(Role)
    • 分配权限(Privilege)
    • 用户绑定角色

    6.2 LDAP 集成

    设置 → Security → LDAP

    • 连接公司 LDAP/AD 进行用户认证

    6.3 清理策略

    设置 → Repository → Cleanup Policies

    • 基于时间清理
    • 基于版本数清理
    • 正则表达式匹配

    6.4 Webhook

    设置 → System → Capabilities → Webhook

    配置事件通知,如:

    • 制品上传
    • 清理完成
    • 系统异常

    七、最佳实践

  • 定期备份:备份整个 nexus-data 目录
  • 监控告警:设置磁盘使用率监控
  • 权限细分:按团队分配最小必要权限
  • 定期清理:配置自动清理策略
  • 版本控制:重要配置导出备份
  • HTTPS:生产环境启用 HTTPS
  • 高可用:考虑集群部署(Nexus Pro 版本)
  • 赞(0)
    未经允许不得转载:171主机测评 » Docker 搭建Nexus3私服
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址