16 KiB
Nexus 3 是一款由 Sonatype 公司开发的仓库管理工具。它是一个用于存储、发布和管理软件组件的集中式仓库,特别适用于 Java 开发人员。Nexus 3 支持 Maven、Gradle 和其他构建工具,并提供了强大的搜索、版本控制和权限管理功能。使用 Nexus 3 可以帮助团队更好地组织和共享代码库,并提高开发效率。
1.Nexus 3 的安装
1.docker启动命令
或者可以使用Docker-Compose进行编排
linux x86-64
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
aarch64
docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus klo2k/nexus3
2.访问 Nexus 3
通过访问 http://localhost:8081 进入Nexus 3 的网站
3.获取密码并登录
点击页面右上角的"Sign in",按弹窗提示找到默认密码
- 默认账号:admin
- 默认密码:容器内的 "/nexus-data/admin.password"
- 会提示重置密码,改个记得住的密码(或者用默认密码),后面配置需要用到
在命令行中使用下面的命令进行获取密码
docker exec nexus cat /nexus-data/admin.password
4.修改密码并设置
默认开启匿名访问
这就基本安装完成
2.内容介绍
右侧分为四个一级菜单分别是 Welcome
Search
Browse
Upload
-
Welcome
-
欢迎界面,展示仓库的数据
-
Total components : 总组件数量
-
Unique logins : 登录数量(30天内)
-
Peak requests per minute : 每分钟峰值请求(24小时内)
-
Peak requests per day : 每天的峰值请求(30天内)
-
-
Search
- 用于在所有仓库中,搜索是否存在某个
jar
包(依赖) - Group(组织):如果我们想搜索 Spring Framework 的构件,可以使用 group:org.springframework 进行查询。
- Artifact(构件):如果我们想搜索 Spring Framework 的 web 模块,可以使用 artifact:spring-web 进行查询。
- Version(版本):如果我们想搜索 Spring Framework 版本为 5.3.10.RELEASE 的构件,可以使用 version:5.3.10.RELEASE 进行查询。另外,如果想模糊匹配多个版本,可以使用通配符 ,例如 version:5.3. 可以匹配到所有 5.3.x 版本。
- Base Version(基本版本):如果我们想搜索 Spring Framework 的 SNAPSHOT 版本,可以使用 baseVersion:5.3.11-SNAPSHOT 进行查询。这样就可以忽略掉 SNAPSHOT 部分,只匹配基本版本号为 5.3.11 的构件。
- Classifier(分类器):如果我们想搜索 Spring Framework 的 Windows 版本构件,可以使用 classifier:windows 进行查询。另外,有些 Maven 项目会为不同的环境打包不同的构件,例如 dev、test、prod 等,可以使用 classifier 进行搜索。
- Extension(扩展名):如果我们只想搜索 jar 文件,可以使用 extension:jar 进行查询。另外,如果我们想搜索所有类型的构件,可以省略该查询条件,默认会搜索所有扩展名的文件。
- 用于在所有仓库中,搜索是否存在某个
- Browse
- 检查该nexus私服拥有多少私有的仓库
- maven-central 是一个代理仓库,它代表了 Maven 中央仓库,它是默认的 Maven 仓库,包含了大量的开源 Java 类库和框架,可以改成国内代理,如阿里云(https://maven.aliyun.com/repository/public)
- maven-public 是一个托管的仓库,它允许将自己的库发布到其中,并使其可供其他人使用。
- maven-releases 是一个托管的仓库,用于发布稳定版本的库。
- maven-snapshots 是一个托管的仓库,用于发布开发中或者测试版的库。
-
Upload
- 上传 jar 包到私有仓库
- 点击仓库后可以进行上传 jar 包
3. Jar包推送仓库
1.修改项目pom.xml文件配置
- 直接改造Maven项目(或者新建一个Maven项目)
- 执行"mvn package"能打包出jar的项目就行
- 如下在pom.xml添加nexus3地址信息
- 与dependencies/build同级
<dependencies>...略</dependencies>
<build>...略</build>
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>maven-releases</name>
<url>${这里填写从nexus页面上复制的maven-releases的url}</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>${这里填写从nexus页面上复制的maven-snapshots的url}</url>
</snapshotRepository>
</distributionManagement>
- 推送包
- 执行 "mvn deoloy"
- 此时报错 "...status: 401 Unauthorized",说明项目配置正确
2.修改Maven软件配置
- 打开 ${maven根目录}/conf/settings.xml
- 增加nexus账号密码
- id要和在项目pom.xml中配置的一致
<servers>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>${密码}</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>${密码}</password>
</server>
</servers>
- 再次执行"mvn deploy"就不会报错了
- 刷新nexus页面上可以看到上传的包
-
项目版本不带"-SNAPSHOT"在"maven-releases"目录
-
否则在"maven-releases"目录
-
- 刷新nexus页面上可以看到上传的包
3.使用deploy推送
4. 引用jar包
1.修改Maven软件配置
- 打开 ${maven根目录}/conf/settings.xml
- 启用镜像,如果有其他镜像可以注释掉
- 重启IDE,pom.xml中像线上的库一样添加dependency即可使用
<mirror>
<id>nexus-public</id>
<mirrorOf>*</mirrorOf>
<name>私有仓库</name>
<url>${这里填写从nexus页面上复制的maven-public的url}</url>
</mirror>
2.项目引入jar包
<dependency>
<groupId>com.example</groupId>
<artifactId>mini-demo</artifactId>
<version>0.0.1-20231206.141630-1</version>
</dependency>
- 可以看到没有刷新之前是爆红显示在本地找不到该jar包
- 刷新Maven后就可以看到成功引入该jar包
5.docker镜像拉取
1.创建一个存储库
- 选择如下配置
- Type 选择 File 或者 S3(自行配置)
- Name 可以自行设置(这里默认 docker )
- 然后不选择容量提示,点击确认保存
2.创建镜像仓库
- 仓库分三种
- Docker (group) 是指在一个集群环境中使用 Docker。在这种情况下,多个 Docker 容器被组织成一个群组,共享资源并通过集中的管理方式进行操作。这使得容器之间可以相互通信和协调,并且可以提供高可用性和负载均衡等功能。
- Docker (hosted) 是指在托管环境中使用 Docker。这意味着 Docker 引擎和容器管理系统(如 Docker Swarm 或 Kubernetes)被部署在第三方云服务提供商或托管服务上。这样,用户可以将自己的应用程序打包为容器,并在托管环境中运行,而无需关心底层基础设施的维护和管理。
- Docker (proxy) 是指在 Docker 网络中使用代理服务器。代理服务器充当位于容器和外部网络之间的中间人,转发请求和响应。使用代理服务器可以提供额外的安全性、负载均衡和缓存等功能,并允许容器与外部网络进行通信,同时隔离容器内部网络。
1.创建代理仓库 Docker (proxy)
-
Docker仓库配置设置
-
Name 仓库名称,命名为 docker-registry-163
-
Online 是否接受传入,选择勾选接受传入
-
HTTP http连接器,配置为 http 使用,不配置
-
HTTPS https连接器,配置为 https 使用,不配置
- HTTP连接器和HTTPS连接器:用于配置Docker仓库使用的协议。HTTP连接器使用HTTP协议,而HTTPS连接器使用HTTPS协议。
-
Allow anonymous docker pull 允许匿名 docker 拉取,默认开启
-
Enable Docker V1 APl 启动 Docker V1 API ,默认开启
-
Remote storage 远程存储,代理仓库设置为163镜像库(其他也可)
-
Docker Index Docker 索引,选择为Docker Hub
-
Use the Nexus Repository truststore 使用Nexus存储库信任存储,默认不开启
- 默认情况下不开启,表示是否使用Nexus存储库的信任存储。开启后,Nexus会使用自己的存储库来管理信任证书。
-
Foreign Layer Caching 外层缓存,默认不启用
- 外层缓存可以提高Docker镜像的下载速度和性能。
-
Maximum component age 最大构建年龄,默认1440
- 如果一些镜像或组件已经存在于仓库中超过了这个时间,它们将被自动清理掉以释放空间。
-
Maximum metadata age 最大元数据年龄,默认1440
-
仓库中存储的元数据(metadata)的最长保留时间。这些元数据包括标签(tag)、索引(index)等信息。
-
限制存储空间:通过设置最大构建年龄和最大元数据年龄,可以控制仓库中存储的镜像和相关组件的数量和大小。当镜像或组件的存在时间超过设定的最大年龄时,它们将被自动清理,从而释放存储空间。
-
管理版本控制:Docker 镜像和相关组件可能会随着时间的推移多次更新和构建。通过设置最大构建年龄,您可以确保仓库中只保留最新的镜像和组件,这有助于避免过时的版本占用存储空间。
-
提高性能:仓库中存储的元数据(如标签、索引等)也会随着时间的推移不断增长。通过设置最大元数据年龄,可以定期清理过时的元数据,从而提高仓库的性能和响应速度。
-
维护仓库健康:定期清理过时的镜像、组件和元数据有助于保持仓库的健康状态。它可以防止仓库变得杂乱不堪,减少潜在的错误和故障。
-
-
Blob store 存储库,选择前面设置的 docker
-
Not found cache enabled 未找到启用的缓存,默认勾选
- 用于启用或禁用 "Not Found Cache" 功能。当启用此功能时,如果某个请求在仓库中未找到所需的内容(例如镜像或组件),仓库将会缓存这个"未找到"的结果。这样,当后续的请求再次发生时,仓库可以更快地响应,而不必重新执行相同的查询
-
Not found cache TTL 未找到缓存TTL,默认1440
- 指 "Not Found Cache" 功能中缓存的超时时间。一旦某个未找到的结果被缓存起来,在经过一段时间后(即 TTL 时间)将会自动过期并从缓存中清除。
-
Cleanup Policies 清理政策,不做更改
- 用于定义清理操作的策略。它允许您指定仓库中过期或不再需要的镜像、组件或其他资源的自动清理规则。可以根据各种条件(例如最后访问时间、构建日期等)来定义清理政策,以确保仓库保持干净和高效。
-
2.创建主仓库 Docker (group)
- 配置
- Name 为 docker-registry
- HTTP 对外接口为 8082(前面创建时候启用8082端口)
- 勾选允许匿名拉取
- 勾选 Docker V1 API
- 存储库设置为 docker
- Member repositories 存储库设置为前面创建的 docker-registry-163
3.启用 Docker
4.对应服务器配置镜像仓库
- ip以及配置
- Nexus 3 安装在了本地电脑的 docker 中,本地IP 10.211.55.2
- 目标服务器 CentOS Stream 9 aarch64 ,IP 10.211.55.40
vim /etc/docker/daemon.json
在文件中写入下面的配置
{
"insecure-registries": [
"10.211.55.2:8082"
],
"registry-mirrors": [
"http://10.211.55.2:8082"
]
}
重启 Docker
systemctl daemon-reload
systemctl restart docker
6.docker镜像推送
1.nexus 3 配置
创建 docker-private 存储库
- 创建镜像仓库 docker(hosted)
- HTTP 端口 8083
- 开启匿名拉取
- 开启 Docker V1 API 接口
- 存储库 docker-private
docker-registry 仓库中增加存储库 docker-private
- 创建角色
- Role ID 角色ID ,设置为 docker-publish
- Role Name 角色名称,设置为 docker-publish
- Role Description 角色描述,设置为 docker-publish
- Privilegs 权限,设置为 nx-repository-admin-docker-docker-private-*
- nx-repository-admin-docker-docker-private-* ,代表Docker 仓库中的私有仓库。这个特权表示被赋予的角色将对私有 Docker 仓库具有管理权限,包括创建、删除、推送和拉取镜像等操作。
- Roles 角色,设置为 nx-admin
- 创建用户
- ID ,设置为docker
- Fisrst Name ,设置为docker
- Last Name ,设置为docker
- Email ,设置为docker@gmail
- Password ,设置为docker
- status 状态,设置为 Active
- Roles 角色,赋予 docker-publish
2.配置服务器
- ip以及配置
- Nexus 3 安装在了本地电脑的 docker 中,本地IP 10.211.55.2
- 目标服务器 CentOS Stream 9 aarch64 ,IP 10.211.55.40
vim /etc/docker/daemon.json
在文件中写入下面的配置
{
"insecure-registries": [
"10.211.55.2:8082",
"10.211.55.2:8083"
],
"registry-mirrors": [
"http://10.211.55.2:8082"
]
}
//重启 Docker
systemctl daemon-reload
systemctl restart docker
//查看本地镜像
docker images
//打标签
docker tag redis:latest 10.211.55.2:8083/redis:v1.0
//登录仓库
docker login -u docker -p docker 10.211.55.2:8083
//推送打标签的镜像
docker push 10.211.55.2:8083/redis:v1.0
在本地仓库就能看到上传的镜像了