搭建流程:
1、docker安装sonatype/nexus3
2、设置maven仓库
3、修改settings.xml
4、deploy jar到maven私有仓库
5、设置docker镜像仓库
6、构建推送自己的maven-jdk镜像
docker安装sonatype/nexus3
1、运行sonatype/nexus3,8081为maven仓库端口,8082为docker-hosted镜像仓库端口,8083为docker-public镜像仓库端口
#安装nexus3
sudo docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus3 sonatype/nexus3
启动完成后,访问http://localhost:8081,用户名为admin,密码在/nexus-data/admin.password文件中

#进入容器查看密码
sudo docker exec -it nexus3 /bin/bash
cat /nexus-data/admin.password
在页面中输入密码登陆后,将密码修改为admin
设置maven仓库
1、部署sonatype/nexus3后,默认已经创建好了4个maven仓库:maven-public、maven-release、maven-snapshots、maven-central
maven-release:用户保存release版本的jar包
maven-snapshots:用来保存tag为snapshots的jar包
maven-central:代理maven中央仓库的地址,即如果依赖的某个jar包,在maven-release或者maven-snapshots中找不到,就会到maven中央仓库中寻找,其配置的远程仓库的地址为:https://repo1.maven.org/maven2/
maven-public:用来分组maven仓库,其默认成员为maven-release、maven-snapshots、maven-central,在下载依赖jar包时,其寻找顺序为从上到下,即先去maven-release中找,然后再到maven-snapshots找,最后才到maven-central中找
2、新建一个阿里云的maven-ali仓库
点击“设置”——“Repositories”——“Create repository”,并选择“maven2(proxy)”进行创建名称为maven-ali的maven仓库,如下图所示:

在name栏中填入maven-ali,Proxy下的Remote storage中填入阿里云的远程仓库地址:http://maven.aliyun.com/nexus/content/groups/public/

3、将新建的maven-ali仓库加入到maven-pubilc组中,并将maven-ali移到maven-central之前,在下载依赖jar包时,其寻找顺序为从上到下,即先去maven-release中找,然后再到maven-snapshots找,然后到maven-ali中找,最后才到maven-central中找

修改settings.xml
新建settings.xml文件,配置自己搭建的私有仓库地址
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 配置存储jar的路径 -->
<localRepository>/usr/share/maven/ref/repository</localRepository>
<pluginGroups></pluginGroups>
<!-- 为nonProxyHosts设置代理地址 -->
<proxies>
<!-- <proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy> -->
<proxies>
<!-- 设置各个仓库访问用户名和密码 -->
<servers>
<!--snapshots仓库用户名和密码 -->
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
<!-- releases仓库用户名和密码 -->
<server>
<id>releases</id>
<username>admin</username>
<password>admin</password>
</server>
<!-- public仓库用户名和密码 -->
<server>
<id>public</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
<mirrors>
<!-- 为下面id为public的repository设置镜像地址,可以不设置 -->
<mirror>
<id>nexus-local</id>
<mirrorOf>public</mirrorOf>
<name>Nexus dev</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexusProfile</id>
<repositories>
<!-- 设置私有镜像仓库 -->
<repository>
<id>public</id>
<name>nexus Repository</name>
<url>http://localhost:8081/repository/maven-public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<!-- 设置生效的profile的id -->
<activeProfile>nexusProfile</activeProfile>
</activeProfiles>
</settings>
deploy jar到maven私有仓库
1、在maven项目的pom.xml文件中添加以下内容
<distributionManagement>
<repository>
<!-- 此id必须和settings.xml文件中server标签中的<id></id>中的值相同,即值为releases,否则deploy不到私有仓库 -->
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!-- 此id必须和settings.xml文件中server标签中的<id></id>中的值相同,即值为snapshots,否则deploy不到私有仓库 -->
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
2、在项目的根目录deploy到私服
在deploy之前,需指定使用上述的settings.xml
mvn deploy
设置docker镜像仓库
1、在浏览器中登录nexus3:http://localhost:8081,点击“设置”——“Repositories”——“Create repository”,并选择“docker(hosted)”创建名称为docker-hosted的docker镜像仓库,在http中填入端口号8082等信息后保存

2、选择“docker(proxy)”创建名称为docker-central的镜像仓库,在Proxy的Remote storage中填入https://registry.docker-cn.com,执行docker中央仓库的地址,并在“docker index”中选择“Use Docker Hub”

3、选择“docker(group)”创建名称为docker-public的镜像仓库,在“Http”栏中填入端口8083,勾上“Allow anonymous docker pull(Docker Bearer Token Realm required)”,然后再Group中将docker-hosted和docker-central添加到members中

4、因为上述的docker-public和docker-hosted都勾选上了“Allow anonymous docker pull(Docker Bearer Token Realm required)”,所以需要在“设置”-“Security”-"Realms"中激活“Docker Bearer Token Realm”

构建推送自己的maven-jdk镜像
1、设置服务器中docker镜像地址
#编辑/etc/docker/daemon.json,添加如下内容
vi /etc/docker/daemon.json
{
"insecure-registries": ["localhost:8082","localhost:8083"]
}
#使配置生效,并重启docker
systemctl daemon-reload
systemctl restart docker
2、使用命令登录docker镜像仓库
docker login -u admin -p admin localhost:8082
3、新建目录docker_build,在该目录下新建Dockerfile文件,并将上述settings.xml文件copy到该目录下
sudo mkdir docker_build
#编辑Dockerfile内容
vi Dockerfile
Dockerfile内容
FROM maven:3-jdk-8
COPY settings.xml /usr/share/maven/ref/
COPY settings.xml /usr/share/maven/conf/
COPY settings.xml ~/.m2/
4、构建自己的maven镜像
cd docker_build
sudo docker build -t maven-dev:3-jdk-8 .
#将maven-dev:3-jdk-8打成tag,docker打tag的格式:docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag>
docker tag maven-dev:3-jdk-8 localhost:8082/maven-dev:3-jdk-8
#将tag推到自己的镜像仓库
docker push localhost:8082/maven-dev:3.6.3-jdk8
推荐阅读:搭建prometheus监控服务




