基于nexus3搭建私有仓库
1. 环境要求
本次实验在centOS 7 服务器上通过使用nexus3搭建私有仓库,包括maven仓库和docker hub
环境说明
- centOS 7
- docker ce
2. 启动nexus3容器
- 安装docker环境
- 创建数据卷用于数据持久
docker volume create --name nexus-data
- 启动容器
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
- 访问
http://ip:8081
,默认管理员用户名/密码:admin/admin123
- nexus启动较慢,可通过
docker logs -f nexus
查看日志,待出现如下日志即表示启动。
-------------------------------------------------
Started Sonatype Nexus OSS 3.14.0-04
-------------------------------------------------
3.搭建maven仓库
3.1 相关仓库说明
nexus会默认创建以下4个maven仓库:
- maven-central:代理仓库,代理下载和存储包,如果私服仓库内没有用户需下载的包,则会根据代理配置,去外网仓库下载相应包并保存至私服。
- maven-releases:提供的默认存放release版本jar包的仓库。
- maven-snapshots:提供的默认存放snapshot版本jar包的仓库。
- maven-public:这是一个仓库组,访问这个仓库组的地址其实会访问组内所有仓库,用于提供下载包服务。
仓库逻辑如下
3.2 配置仓库
3.2.1 增加aliyun代理仓库
- 登录管理员账户后,点击上方“设置”按钮,继续点击左侧“Repositories”按钮,点击“Create repository”,类型选择“proxy”。
- 设置仓库名,代理url,点击保存。
3.2.2 将新建仓库添加至public仓库
- 点击“maven-public”。
- 移动新增的仓库至组,并提升其使用位置(maven-central代理地址为https://repo1.maven.org/maven2/,国内访问较慢)。
3.2.3 创建开发人员权限角色
- 点击左侧“Roles”,再点击“Create role”。
- 根据实际情况配置角色
3.2.4 创建用户
- 点击左侧“Users”,再点击“Create local user”。
- 根据实际情况填写信息。
3.4 使用
3.4.1 上传
- 找到本地mvn配置文件,“settings.xml”,在
<servers></servers>
标签内增加用户信息,保存。
- 在maven项目pom文件中配置maven仓库地址,注意
nexus
需要与上一步server
中配置的id需要一致。
<distributionManagement>
<repository>
<id>nexus</id>
<name>Release Deploy</name>
<url>http://122.224.204.77:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Snapshot Deploy</name>
<url>http://122.224.204.77:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- 执行
mvn clean deploy
进行上传测试。
#pom标签版本如下表示打包为快照版本
<version>0.0.2-SNAPSHOT</version>
#pom标签版本如下表示打包为release版本
<version>1.5</version>
3.4.2下载
- 在maven项目pom文件中配置maven仓库地址,添加包依赖即可。
<repositories>
<repository>
<id>nexus-public</id>
<name>Nexus Public</name>
<url>http://122.224.204.77:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
3.4.3 上传本地第三方jar包
对于第三方jar包,需要先生成相应的pom描述文件,将jar包安装到本地maven仓库后再推送至远程仓库。
- 本地安装
mvn install:install-file -Dfile=file.jar -DgroupId=com.example -DartifactId=test -Dversion=1.0 -Dpackaging=jar
Dfile: 文件路径
DgroupId:设置的groupID
DartifactId:设置的artifactId
Dversion: 设置的版本
Dpackaging:打包类型
- 推送至远程仓库
mvn deploy:deploy-file -DgroupId=com.example -DartifactId=test -Dversion=1.0 -Dpackaging=jar -Dfile=file.jar -Durl=http://172.22.25.234:8081/repository/3rd_part/ -DrepositoryId=nexus
Durl: 远程仓库地址
DrepositoryId:maven配置中的server用户ID,用于认证。
4. 创建docker hub仓库
4.1 启动容器
重新启动nexus3容器,8082端口用于代理docker hub
docker run -d -p 8081:8081 -p 8082:8082 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
4.2 新建仓库
点击设置界面,选择Repositories,点击Create repository,如下图所示:
选择仓库类型,这里Docker有三种类型,分别是group、hosted、proxy。这里只演示hosted类型,所以选择docker(hosted),如下图:
注:Docker镜像仓库类型含义解释如下:
- hosted : 本地存储,即同docker官方仓库一样提供本地私服功能
- proxy : 提供代理其他仓库的类型,如docker中央仓库
- group : 组类型,实质作用是组合多个仓库为一个地址
指定docker仓库的名称、指定一个端口用来通过http的方式进行访问仓库、勾选是否支持docker API V1,然后create repository;
因为我们测试的时候不是使用加密的HTTPS进行访问,所以这里需要增加一个docker的启动参数,给他指定私库的地址,如下:
编辑/etc/docker/daemon.json 增加如下内容,当然也可通过启动参数增加
{
"insecure-registries":["http://ip:port"]
}
登录到私有仓库
docker login ip:port
4.2 maven项目推送镜像至仓库
使用docker-maven-plugin
插件推送镜像。
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<pushImage>true</pushImage>
<serverId>nexus</serverId>
<registryUrl>172.22.25.234:8082</registryUrl>
<imageName>172.22.25.234:8082/xxxx:1.0.0-SNAPSHOT</imageName>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin>
</plugins>
参数解释:
serverId:maven配置文件中的用户信息
registryUrl:仓库地址
imageName:镜像标签名