使用Podman/Docker搭建Nexus3私有Maven与Docker镜像仓库全攻略

一、引言:为何需要私有仓库?

在软件开发与运维过程中,依赖管理是核心环节之一。对于Java项目,Maven仓库存储着项目所需的依赖库;对于容器化应用,Docker镜像仓库则是分发和部署的基础。公有仓库(如Maven Central、Docker Hub)虽方便,但在企业环境中存在安全隐患(如依赖篡改)、网络依赖(如访问速度慢)及合规性问题。因此,搭建私有仓库成为保障软件供应链安全、提升构建效率的重要手段。

Nexus Repository Manager 3(Nexus3)是Sonatype推出的开源仓库管理工具,支持多种仓库类型(Maven、Docker、npm、PyPI等),并提供权限控制、代理缓存、元数据管理等功能。通过容器化部署(Podman或Docker),可快速实现高可用、可扩展的私有仓库服务。

二、环境准备与工具选择

1. 容器化工具对比:Podman vs Docker

  • Docker:市场占有率最高,生态完善,支持Swarm集群与Kubernetes集成。适合已有Docker环境或需要复杂编排的场景。
  • Podman:无守护进程设计,安全性更高,支持rootless模式,兼容Docker CLI。适合对安全性要求高的环境或无Docker依赖的场景。

2. 系统要求

  • 操作系统:Linux(推荐CentOS/Ubuntu)、macOS(需Docker Desktop)或Windows(WSL2)。
  • 资源:至少2核CPU、4GB内存(生产环境建议8GB+)、20GB以上磁盘空间。
  • 网络:开放8081(Nexus3默认HTTP端口)、8443(HTTPS)、5000(Docker仓库,可选)。

3. 安装容器化工具

  • Docker安装(以Ubuntu为例):
    1. sudo apt update
    2. sudo apt install docker.io
    3. sudo systemctl enable --now docker
    4. sudo usermod -aG docker $USER # 添加当前用户到docker组
  • Podman安装(以CentOS为例):
    1. sudo dnf install -y podman

三、部署Nexus3容器

1. 拉取Nexus3镜像

  1. # Docker方式
  2. docker pull sonatype/nexus3:latest
  3. # Podman方式(镜像名相同,命令兼容)
  4. podman pull sonatype/nexus3:latest

2. 启动容器

基础启动(仅HTTP)

  1. # Docker
  2. docker run -d --name nexus3 \
  3. -p 8081:8081 \
  4. -v nexus-data:/nexus-data \
  5. sonatype/nexus3
  6. # Podman
  7. podman run -d --name nexus3 \
  8. -p 8081:8081 \
  9. -v nexus-data:/nexus-data \
  10. sonatype/nexus3
  • -v nexus-data:/nexus-data:持久化存储配置与仓库数据。
  • 生产环境建议添加--restart unless-stopped实现自动重启。

高级配置(HTTPS与Docker仓库)

  1. # 生成自签名证书(示例)
  2. mkdir -p /etc/nexus/ssl
  3. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  4. -keyout /etc/nexus/ssl/nexus.key -out /etc/nexus/ssl/nexus.crt \
  5. -subj "/CN=nexus.example.com"
  6. # 启动容器(Docker示例)
  7. docker run -d --name nexus3 \
  8. -p 8081:8081 -p 8443:8443 -p 5000:5000 \
  9. -v /etc/nexus/ssl:/nexus-ssl \
  10. -v nexus-data:/nexus-data \
  11. -e NEXUS_CONTEXT=/ \
  12. -e INSTALL4J_ADD_VM_PARAMS="-Djavax.net.ssl.keyStore=/nexus-ssl/nexus.keystore -Djavax.net.ssl.keyStorePassword=changeit" \
  13. sonatype/nexus3
  • 需将证书转换为PKCS12格式(.keystore)并配置JVM参数。

四、配置Nexus3仓库

1. 初始设置

  1. 访问http://<服务器IP>:8081,默认管理员账号为admin,密码通过以下命令获取:
    ```bash

    Docker方式

    docker exec -it nexus3 cat /nexus-data/admin.password

Podman方式

podman exec -it nexus3 cat /nexus-data/admin.password

  1. 2. 登录后修改密码,并完成向导(可跳过代理设置)。
  2. ## 2. 创建Maven仓库
  3. 1. **托管仓库**:存储私有依赖。
  4. - 路径:`Administration > Repository > Repositories > Create repository`
  5. - 选择`maven2 (hosted)`,设置名称为`maven-private`,存储类型为`File`
  6. 2. **代理仓库**:缓存远程依赖(如Maven Central)。
  7. - 选择`maven2 (proxy)`,设置名称为`maven-central`,远程存储URL`https://repo.maven.apache.org/maven2/`
  8. 3. **仓库组**:聚合多个仓库。
  9. - 选择`maven2 (group)`,设置名称为`maven-public`,成员包含`maven-private``maven-central`
  10. ## 3. 创建Docker仓库
  11. 1. **托管仓库**:
  12. - 路径:`Create repository > docker (hosted)`
  13. - 设置名称为`docker-private`HTTP端口为`5000`(需与容器端口映射一致),选择`Docker (HTTP)``Docker (HTTPS)`
  14. 2. **代理仓库**:
  15. - 选择`docker (proxy)`,设置名称为`docker-hub`,远程URL`https://registry-1.docker.io`
  16. 3. **仓库组**:
  17. - 选择`docker (group)`,设置名称为`docker-public`,成员包含`docker-private``docker-hub`
  18. # 五、使用私有仓库
  19. ## 1. Maven项目配置
  20. `pom.xml`中添加私有仓库:
  21. ```xml
  22. <repositories>
  23. <repository>
  24. <id>nexus-private</id>
  25. <url>http://nexus.example.com:8081/repository/maven-public/</url>
  26. </repository>
  27. </repositories>

settings.xml中配置认证:

  1. <servers>
  2. <server>
  3. <id>nexus-private</id>
  4. <username>deploy-user</username>
  5. <password>your-password</password>
  6. </server>
  7. </servers>

2. Docker客户端配置

  • 登录私有仓库
    1. docker login nexus.example.com:5000
    2. # 或
    3. podman login nexus.example.com:5000
  • 推送镜像
    1. docker tag my-image nexus.example.com:5000/my-image
    2. docker push nexus.example.com:5000/my-image
  • 拉取镜像
    1. docker pull nexus.example.com:5000/my-image

六、运维与优化

  1. 备份与恢复
    • 备份/nexus-data目录。
    • 恢复时需确保Nexus3版本一致。
  2. 性能调优
    • 调整JVM堆内存(修改NEXUS_JVM_OPTS环境变量)。
    • 启用Blob存储压缩(Administration > System > Capabilities)。
  3. 高可用部署
    • 使用共享存储(如NFS)挂载/nexus-data
    • 结合Kubernetes部署多实例。

七、总结

通过Podman或Docker部署Nexus3,可快速构建安全、高效的私有Maven与Docker仓库。本文详细介绍了从环境准备到仓库使用的全流程,并提供了HTTPS配置、权限管理等高级场景的解决方案。实际部署中,建议结合CI/CD流水线(如Jenkins、GitLab CI)实现自动化依赖管理与镜像构建,进一步提升开发效率。