您好,登录后才能下订单哦!
# Docker中怎么安装Nexus3
## 前言
在现代软件开发中,高效的依赖管理是项目成功的关键因素之一。Sonatype Nexus Repository Manager 3(简称Nexus3)作为一款强大的仓库管理工具,能够帮助开发团队集中管理各种二进制组件(如Java的JAR包、Node.js的npm模块、Docker镜像等)。通过Docker容器化部署Nexus3,可以显著简化安装和配置过程,提高环境一致性,并便于后续的维护和扩展。
本文将详细介绍如何在Docker环境中安装和配置Nexus3,涵盖从基础概念到高级配置的全过程。无论您是初次接触Nexus3还是希望优化现有部署,都能从本文中获得实用指导。
## 第一章:Nexus3与Docker基础
### 1.1 Nexus3概述
Nexus3是Sonatype公司开发的企业级仓库管理软件,主要功能包括:
- 代理远程仓库(如Maven Central、npm Registry等)
- 托管私有仓库
- 组件分组管理
- 细粒度的访问控制
- 强大的搜索和浏览功能
- 支持多种包格式(Maven/npm/Docker/PyPI等)
与早期版本相比,Nexus3在架构和功能上有显著提升:
- 采用更高效的存储格式
- 支持更多仓库类型
- 改进的UI和管理界面
- 增强的REST API
### 1.2 Docker基础概念
Docker是一种轻量级的容器化技术,主要优势包括:
- **环境一致性**:确保开发、测试和生产环境一致
- **快速部署**:秒级启动容器实例
- **资源高效**:共享主机内核,资源占用小
- **易于扩展**:支持水平扩展和编排
核心概念:
- **镜像(Image)**:只读模板,包含运行环境和应用程序
- **容器(Container)**:镜像的运行实例
- **仓库(Registry)**:存储和分发镜像的服务
### 1.3 为什么选择Docker部署Nexus3
传统物理机/虚拟机部署方式的挑战:
- 环境配置复杂
- 依赖管理困难
- 系统资源占用高
- 迁移和扩展不便
Docker部署的优势:
- 一键式部署和升级
- 资源隔离更轻量
- 便于版本管理和回滚
- 与CI/CD流水线无缝集成
## 第二章:准备工作
### 2.1 系统要求
#### 硬件要求
- 最低配置:
- CPU:2核
- 内存:4GB
- 磁盘:10GB(实际生产环境需要根据存储需求规划)
- 推荐生产配置:
- CPU:4核+
- 内存:8GB+
- 磁盘:SSD存储,容量根据组件数量确定
#### 软件要求
- Docker Engine 18.06+
- Docker Compose 1.25+(可选)
- 操作系统:支持的主流Linux发行版(Ubuntu/CentOS等)、Windows Server 2016+或macOS
### 2.2 环境准备
#### 安装Docker引擎
Ubuntu示例:
```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
对于生产环境,建议配置更适合的存储驱动:
# 查看可用驱动
docker info | grep "Storage Driver"
# 修改为overlay2(需在/etc/docker/daemon.json中配置)
{
"storage-driver": "overlay2"
}
确保相关端口开放(默认8081):
sudo ufw allow 8081/tcp
sudo ufw reload
官方镜像位于Sonatype的Docker Hub仓库:
docker pull sonatype/nexus3:latest
建议使用特定版本标签而非latest:
docker pull sonatype/nexus3:3.38.1
验证镜像:
docker images | grep nexus
docker run -d \
--name nexus3 \
-p 8081:8081 \
-v nexus-data:/nexus-data \
sonatype/nexus3:3.38.1
参数说明:
- -d
:后台运行
- --name
:指定容器名称
- -p
:端口映射(主机端口:容器端口)
- -v
:数据卷挂载(自动创建名为nexus-data的volume)
mkdir -p /opt/nexus-data && chown -R 200 /opt/nexus-data
docker run -d \
--name nexus3 \
-p 8081:8081 \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3:3.38.1
注意:Nexus3在容器内以UID 200运行,需确保主机目录权限正确。
检查容器状态:
docker ps -a | grep nexus3
查看启动日志:
docker logs -f nexus3
等待出现以下日志表明启动完成:
Started Sonatype Nexus OSS 3.38.1-01
访问Web界面:
http://<服务器IP>:8081
创建docker-compose.yml
文件:
version: '3'
services:
nexus:
image: sonatype/nexus3:3.38.1
container_name: nexus3
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- nexus-data:/nexus-data
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx2g -XX:MaxDirectMemorySize=2g
volumes:
nexus-data:
启动服务:
docker-compose up -d
http://<服务器IP>:8081
docker exec -it nexus3 cat /nexus-data/admin.password
以Maven Central为例: 1. 导航到”Repository” > “Repositories” 2. 点击”Create repository” 3. 选择”maven2 (proxy)” 4. 配置: - Name: maven-central - Remote storage: https://repo1.maven.org/maven2/ - Version policy: Release 5. 保存
修改Docker运行命令添加JVM参数:
-e INSTALL4J_ADD_VM_PARAMS="-Xms4g -Xmx4g -XX:MaxDirectMemorySize=4g"
建议配置: - Xms和Xmx设置为相同值(推荐4GB+) - MaxDirectMemorySize >= Xmx
对于生产环境建议使用外部数据库:
1. 停止Nexus服务
2. 配置/nexus-data/etc/nexus.properties
:
nexus.datastore.enabled=true
nexus.h2.enabled=false
Nginx配置示例:
server {
listen 443 ssl;
server_name nexus.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "https";
}
}
-v /path/to/keystore.jks:/opt/sonatype/nexus/etc/ssl/keystore.jks \
-e NEXUS_SSL_KEYSTORE__FILE=/opt/sonatype/nexus/etc/ssl/keystore.jks \
-e NEXUS_SSL_KEYSTORE__PASSWORD=yourpassword
docker stop nexus3
tar czvf nexus-backup-$(date +%Y%m%d).tar.gz /opt/nexus-data
docker start nexus3
rm -rf /opt/nexus-data/*
tar xzvf nexus-backup-20230101.tar.gz -C /
docker logs --tail 100 -f nexus3
/service/metrics/prometheus
端点docker exec -it nexus3 bash
find /nexus-data/blobs -mtime +30 -delete
docker pull sonatype/nexus3:3.39.0
docker stop nexus3
docker rm nexus3
错误现象:
Bind for 0.0.0.0:8081 failed: port is already allocated
解决方案: 1. 查找占用进程:
sudo netstat -tulnp | grep 8081
-p 8082:8081
错误现象:
Permission denied for /nexus-data
解决方案:
chown -R 200 /opt/nexus-data
可能原因: - JVM内存不足 - 磁盘I/O瓶颈 - 网络延迟
解决方案: 1. 增加JVM内存参数 2. 使用SSD存储 3. 优化数据库配置
可能原因: - 存储空间不足 - 权限配置错误
解决方案: 1. 检查磁盘空间:
df -h
重置步骤: 1. 停止容器 2. 删除密码文件:
rm /nexus-data/admin.password
/nexus-data/etc/nexus.properties
:
nexus.security.randompassword=false
手动安装步骤:
1. 将插件jar放入/nexus-data/plugin-repository
2. 重启Nexus服务
settings.xml
示例:
<servers>
<server>
<id>nexus-releases</id>
<username>deploy-user</username>
<password>deploy-password</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<url>http://nexus:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
pipeline {
agent any
tools {
maven 'Maven-3.8'
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Deploy') {
steps {
sh 'mvn deploy -DaltDeploymentRepository=nexus-releases::default::http://nexus:8081/repository/maven-releases/'
}
}
}
}
@Named
@Singleton
public class MyPlugin implements Runnable {
@Override
public void run() {
System.out.println("Hello from Nexus plugin!");
}
}
通过本文,我们系统性地介绍了: 1. Docker环境下Nexus3的部署方法 2. 初始配置和优化技巧 3. 日常维护最佳实践 4. 常见问题解决方案 5. 安全加固和扩展集成
官方文档:
社区资源:
书籍推荐:
命令 | 描述 |
---|---|
docker ps |
列出运行中的容器 |
docker logs <container> |
查看容器日志 |
docker exec -it <container> bash |
进入容器shell |
docker volume ls |
列出数据卷 |
docker system prune |
清理无用资源 |
端口 | 用途 |
---|---|
8081 | 主HTTP服务 |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。