Nexus Repository和Docker Registry镜像仓库搭建及使用
一、Nexus Repository的搭建
Nexus Repository 是搭建maven的镜像的工具之一,在全球范围内使用挺广的。
Nexus 镜像的搭建还是相对简单的,将下载的文件解压到相应的目录下,然后进入./nexus-version/bin/下,启动nexus即可将Nexus Repository运行起来(其中Nexus是基于Jetty来运行的)。
或者使用docker run -d -p 8090:8081 --name nexus1 sonatype/nexus3
启动起来后,通过浏览器访问http://ip:8081就可以访问了。界面如下所示:
其中通过右侧的Sign In可以登录用户来管理Nexus。对于未登录的用户,只能查询和浏览相关资源。默认账号admin,密码admin123
用户登录后就能看到管理相关的菜单了,在管理菜单中主要是配置Blob Stores和Repositories,其中Blob Stores 是用来配置资源的保存位置的,可以将不同的远程资源保存到服务器的不同位置上(类似于Nexus 2的远程资源保存路径配置,在Nexus 3中进行了分组管理),Repositories 则用来配置远程资源和本地资源,其中支持Proxy类型资源,表示远程资源的镜像,host类型的资源表示本地资源,用于保存第三方资源或团队内部共享的资源等。group类型资源是组,可以将多个proxy或host类型的资源构建成一个组,供Maven使用等,如下图所示:
注意事项:
1. Nexus 2 能够支持资源信息的拷贝,提供xml格式,而Nexus 3 暂时还不支持该xml格式拷贝。
2. Nexus 2 能够下载远程的索引到本地,供搜索查询使用,但是Nexus 3 暂时还不支持,在Nexus 3 中查询的都是已经有请求该镜像库的资源,对于未从该镜像库下载过的资源是无法查询到的。那么在Nexus 3 搭建初期,没有使用前,在该系统是查询不到任何资源的,需要先使用程序去调用该镜像,才会有资源使用。
3. Nexus 3 暂时不支持下载远程镜像的索引。只有当Maven中设置了Nexus 3 的资源库,Nexus 3 会在具体编译项目的时候先从远程下载对应的资源到本地,然后传输给各个客户端使用。 这样也就不用跟Nexus 2 中那样再【Repair Index】来更新索引了。
二、Maven 配置Nexus 镜像
Nexus 镜像搭建起来后,那么如何在Maven中使用该镜像资源呢? 主要是通过调整maven配置来识别该镜像资源,从而将maven资源请求转发到该镜像资源库上。通常的做法为在当前用户的目录下.m2文件夹中创建settings.xml文件,其中指定mirror,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!-- for full reference, see also http://maven.apache.org/ref/3.2.3/maven-settings/settings.html -->
<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"><!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 --><mirrors><mirror><id>mirror_name</id><mirrorOf>*</mirrorOf><url>http://nexus_ip:8081/repository/maven-public/</url></mirror></mirrors>
</settings>
上述配置信息是所有的远程资源镜像的访问都会通过该镜像来访问,这也是大部分公司采用的方案,因为这样能够保证公司对远程资源的访问次数是有限的,公司内部的开发人员访问的都是公司内部的资源。开发人员不需要链接外网去下载远程镜像服务器上的资源,只需要该公司内部镜像去访问一次即可。当然了,mirrorOf可以指定为代理部分远程资源,详情见官方说明:http://maven.apache.org/guides/mini/guide-mirror-settings.html
三、Nexus 启用上传功能
团队有了私有的镜像服务器以后,团队内部代码的依赖也就不再需要源码依赖了,大家可以通过发布不同版本的jar到nexus镜像上来供调用者直接通过Maven下载使用,这样不同研发人员直接的依赖也就没有那么强了,大家可以基于已经发布的版本进行各自的开发。
那么如何发布个人的jar资源到团队内部镜像上呢?
1. 在Nexus 中创建一个developer的角色,拥有的权利为【nx-repository-view-maven2-*-edit】和【nx-repository-view-maven2-*-add】权利,如果该角色将来可能还有nuget,npm相关上传权利,则将其权利改为【nx-repository-view-*-*-edit】和【nx-repository-view-*-*-add】权利。
2. 创建用户,用户拥有的角色为【nx-anonymous】和刚创建的【developer】角色。其中nx-anonymous角色是nexus默认自带的角色。
3. 在.m2文件夹下的settings.xml配置文件中增加<servers>的配置。
<?xml version="1.0" encoding="UTF-8"?>
<!-- for full reference, see also http://maven.apache.org/ref/3.2.3/maven-settings/settings.html -->
<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"><!-- 配置Maven服务器的账号信息,自动化部署的时候需要用到 --><servers><server><id>server_id</id><!-- 使用公共的developer/password账号进行日常的发布管理 --><username>developer</username><password>password</password></server></servers><!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 --><mirrors><mirror><id>mirror_name</id><mirrorOf>*</mirrorOf><url>http://nexus_ip:8081/repository/maven-public/</url></mirror></mirrors>
</settings>
4. 在需要上传jar资源的项目的pom.xml中增加<distributionManagement>配置,其中<id>设置需要跟.m2文件夹下的settings.xml中<servers>下的id相同。<url>需要指定nexus中配置的hosts Repository资源的地址。
<distributionManagement><repository><id>server_id</id><name>Nexus Release Repository</name><url>http://nexus_ip:8081/repository/host-releases/</url></repository></distributionManagement>
5. 通过maven 编译项目,并通过mvn deploy 来发布jar资源到团队内部的镜像服务器即可。
四、Nexus 启用SNAPSHOTS
团队内部在开发过程中为了相互可以互不影响的开发,需要时常将未稳定版的jar发布出来供团队其他人员调用,这时候建议使用SNAPSHOT版本,那么SNAPSHOT版本怎么发布到Nexus上呢。如果以当前的配置,发布SNAPSHOT过程会失败,因为Nexus默认是不启用SNAPSHOT的。那么怎么启用SNAPSHOT及如何上传SNAPSHOT版本资源呢?
启用SNAPSHOT的方式为在.m2文件夹下的settings.xml中增加<profile>设置
<!-- 这个默认配置决定了我们的Maven服务器开启snapshot配置,否则不能下载SNAPSHOTS的相关资源 --> <profiles><profile><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>repository_name</id><name>Nexus Public Repository</name><url>http://nexus_ip:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories></profile></profiles>
增加这个配置后,那么是否就可以直接上传SNAPSHOT版本的jar资源了呢?经过测试还是不行,还需要有其他配置。
1. Nexus Repository中增加一个hosted类型的Repository,Maven的资源类型为SNAPSHOT(Nexus默认已经存在一个这种类型的资源)。
2. settings.xml的<servers>增加snapshot server的配置,settings.xml的最终配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- for full reference, see also http://maven.apache.org/ref/3.2.3/maven-settings/settings.html -->
<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"><!-- 配置Maven服务器的账号信息,自动化部署的时候需要用到 --><servers><server><id>nexus-releases</id><!-- 使用公共的developer/password账号进行日常的发布管理 --><username>developer</username><password>password</password></server><server><id>nexus-snapshots</id><!-- 使用公共的developer/password账号进行日常的发布管理 --><username>developer</username><password>password</password></server></servers><!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 --><mirrors><mirror><id>nexus</id><mirrorOf>*</mirrorOf><url>http://nexus_ip:8081/repository/maven-public/</url></mirror></mirrors><!-- 这个默认配置决定了我们的Maven服务器开启snapshot配置,否则不能下载SNAPSHOTS的相关资源 --> <profiles><profile><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>repository_name</id><name>Nexus Public Repository</name><url>http://nexus_ip:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories></profile></profiles>
</settings>
3. 需要发布jar资源到团队内部镜像服务器的项目的pom.xml配置<distributionManagement>增加snapshot的支持,最终的pom.xml增加的<distributionManagement>如下:
<distributionManagement><repository><id>nexus-releases</id><name>Nexus Release Repository</name><url>http://nexus_ip:8081/repository/yoyi-releases/</url></repository><snapshotRepository><id>nexus-snapshots</id><name>Nexus Snapshot Repository</name><url>http://nexus_ip:8081/repository/yoyi-snapshots/</url></snapshotRepository></distributionManagement>
通过上述各种配置,即可以发布jar到团队内部的镜像服务器了。 其中distributionManagement需要配置在各个项目的pom.xml文件中,如果多个项目都需要使用,是否可以将<distributionManagement>放到.m2文件夹下的settings.xml中呢?经过测试,放到settings.xml中是不起作用的。那么如果在多个项目中使用的方案为多个项目创建一个父项目,将各个项目作为模块加载到父项目中,只在父项目中配置distributionManagement即可。如果各位看客有更好的方案,还望能在留言中告知下。^-^
六、私有Docker Registry的部署和配置
从Docker Hub上可以获取官方的Registry的镜像,Registry 默认的对外服务端口是 5000,如果我们宿主机上运行的 Registry 需要对外提供服务,可以通过映射端口的方式提供。
1 docker pull registry //获取registry镜像文件
2
3 docker images //查看本地的registry镜像文件
4 REPOSITORY TAG IMAGE ID CREATED SIZE
5 registry latest 047218491f8c 4 days ago 33.17 MB
6
7 docker run -d -p 5000:5000 --restart=always --name registry registry:latest //运行一个registry的容器
验证
1 如果/var/lib/registry映射到宿主机器的目录(比如/opt/registry),可以push一个镜像到本地的registry,然后会在/opt/registry下找到镜像相关的内容
2 通过registry提供的API方式:
curl http://127.0.0.1:5000/v2/_catalog
{"repositories":["mongodb"]}
[root@ip-172~]# curl http://127.0.0.1:5000/v2/mongodb/tags/list
{"name":"mongodb","tags":["1.0"]}
七、使用Registry管理仓库和镜像
1、推送镜像
使用docker push可以将本地的镜像推送到本地的仓库
$ docker tag registry registry-host:5000/myadmin/registry$ docker push registry-host:5000/myadmin/registry
推送出现如下错误
docker push 192.168.0.130:5000/myadmin/registry
The push refers to repository [192.168.0.130:5000/myadmin/registry]
Get https://192.168.0.130:5000/v2/: http: server gave HTTP response to HTTPS client
centos下docker版本在/etc/sysconfig/docker文件中添加一下配置:
ADD_REGISTRY='--insecure-registry 192.168.0.130:5000'
centos下docker-ce版本在 /usr/lib/systemd/system/docker.service修改如下配置:
# ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.130:5000
修改完后重启docker
2、获取镜像
使用docker pull可以获取仓库中的镜像,比如
docker pull registry-host:5000/myadmin/registry
八、Docker Registry的配置
Docker Registry的配置是基于一个YAML文件,所以可以在创建Registry容器的时候把已经编辑好的YAML文件拷贝进去,也可以在创建容器的时候通过命令传入配置项。
拷贝YAML文件的例子:
1 $ docker run -d -p 5000:5000 --restart=always --name registry \
2 -v `pwd`/config.yml:/etc/docker/registry/config.yml \
3 registry:2
详细的配置参考官方配置说明。
Nexus Repository和Docker Registry镜像仓库搭建及使用相关推荐
- docker registry 镜像同步
docker registry 镜像同步 Intro 之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker regi ...
- 删除docker registry镜像脚本报错No repositories directory found inside REGISTRY_DATA_DIR
删除docker registry镜像脚本报错No repositories directory found inside REGISTRY_DATA_DIR registry使用delete_doc ...
- docker registry私有仓库搭建(为k3s准备)
#docker-compose.yml内容 zxl@debian:~/develop/docker-registry-install$ cat docker-compose.yml version: ...
- docker Registry镜像仓库
docker search whalesay搜索 2docker pull docker/whalesay 拉取镜像 3docker ps 4docker run docker/whalesay co ...
- Docker Registry本地私有仓库搭建
相比Docker Hub而言,Docker Registry的功能就不够全面了,且需要自己手动配置.升级.维护和管理,所以说对于Docker镜像管理不太熟悉的人员推荐使用Docker Hub.如果开发 ...
- Docker的使用(四:Docker Registry本地私有仓库搭建知识点总结)
任务一: Docker Registry本地私有仓库搭建 1.启动Docker Registry: 2.重命名镜像: 3.推送镜像: 4.浏览器查看验证: 5.文件查看验证: 任务二:Docker R ...
- docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云
目录 docker-maven-plugin 基本介绍 使用手册 Maven Goals命令 Maven命令执行顺序 Skip Docker Goals Bound to Maven Phases(跳 ...
- 【Docker】registry部署docker私有镜像仓库
Docker Hub作为Docker默认官方公共镜像仓库,但是如果我们不想使用怎么办,第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库,第二就是如我们自己搭建一个自己的私有镜像仓库,官方也提供do ...
- 使用docker registry建立私有镜像仓库
安装环境centos 7.4 镜像仓库地址10.0.0.200, 域名repo.cssweb.com 如没有DNS, 编辑/etc/hosts添加以上映射关系. 首先安装好docker. yum in ...
最新文章
- 如何使用python效率办公_日常office工作中如何用python提升效率014
- 页面中切换echarts主题
- 如何使处于不同局域网的计算机实现远程通信_小区自来水二次加压泵站远程监控系统方案...
- [css] 你有用过table布局吗?说说你的感受
- xhost和XServer相关概念汇总
- socket实现一个简单的echo服务
- 10天内构建良好的REST API的指南
- mysql创建临时表 主键_MySQL中临时表的基本创建与使用教程
- 笔记--Spring in action
- 被程序员怼完被自己人怼,产品经理就这样被逼哭了!
- .net中三种Timer使用总结
- Lidar Studio点云处理与分析软件V1.1
- 【元胞自动机】基于元胞自动机模拟地铁火灾疏散模型matlab代码
- 手机局域网关闭计算机的方法,用手机控制电脑关机 方法介绍【图文】
- Java运行准备JDR JRE JVM知识和环境变量的作用
- Oracle学习——第五讲(约束)
- 「现场参会攻略」| 2018AI in China之智能制造数据驱动产业变革高峰论坛
- Mac Ps cc2017 下载
- python bif_小猪的Python学习之旅 —— 1.基础知识储备
- node文件系统 常用文件处理方法