构建Docker镜像仓库的另一选择:Nexus3



我们知道,构建企业内部私有Docker镜像仓库有很多选择,比如可以采用原生的Docker
Registry服务,也可以部署更加专业的工具,例如SUSE team的Portus
https://github.com/SUSE/Portus)或VMware出品的Harbor(https://github.com/vmware/harbor)。我们也就曾对Harbor这样的产品做过较为详细的分析(http://mp.weixin.qq.com/s/oQoLgNgnfM8TQHnDDOOIog)。然而像Harbor这样的明星级镜像仓库管理器组件较为复杂,有没有比Docker原生的registry功能丰富而又简单易用的其它选择呢?
【上海站|3天烧脑式微服务架构训练营】培训内容包括:DevOps、微服务、Spring Cloud、Eureka、Ribbon、Feign、Hystrix、Zuul、Spring Cloud Config、Spring Cloud Sleuth等。

做Java研发项目的同事应该对于搭建Maven私服的工作不陌生,他们会选择例如Apache Archiva,Jfrog Artifactory或Sonatype Nexus之类的工具。在本篇文章我们要向大家介绍的正是Sonatype Nexus 3这个强大的工具,它不仅仅能够用于创建Maven私服,还可以用来创建bower、npm、nuget、pypi、rubygems等各种私有仓库,受到docker技术不断被追捧的影响,Nexus从3.0版本也开始支持创建Docker镜像仓库了。

让我们开始一次Nexus3的体验吧,当然一切的工作我们都会以Docker容器化的方式进行,这也许正是一个追求简单易用的趋势吧!

首先让我们获得Nexus3的Docker镜像,这样我们即可免除手动安装调试的麻烦。

21.jpg


22.jpg


通过上面Build Image的过程,我们得到了Nexus3的镜像,接下来我们在Rancher平台进行部署(当然你也可以通过一条docker run指令将容器运行起来,例如docker run –d --name=Nexus3 --restart=always -p 8081:8081 -p 8088:8088 –v /home/rancher/nexus-data:/nexus-data sonatype/nexus:3)。选择Rancher平台的好处是部署方便,全部基于UI图形界面完成操作,更进一步我们还可以将这个Nexus3制作成应用商店(Catalog)随时备用。

第一步 在Rancher平台添加应用栈:

1.png


填写应用栈名称为Sonatype,描述为Nexus Repository Manager

第二步 在该应用栈下添加Nexus3服务:

2.png


填写docker镜像为前面步骤生成的sonatype/nexus:3,添加两个端口映射项目,其中8081是Nexus服务自身的Web管理页面端口,8088是我们用于Docker镜像仓库服务的端口。(可以根据实际情况只有定义);

3.png


设置卷挂载条目,以便将Nexus的配置信息及数据持久保存于宿主机,这里Nexus容器内的/nexus目录被映射到RancherOS宿主机的/home/rancher/nexus-data目录下。

5.png


一切都是如此的优雅简洁,不到一分钟时间,我们的Nexus3服务便已经启动正常了。点击应用栈里的8081端口链接,我们便打开了Nexus的登录窗口,输入默认用户名及密码admin/admin123:

6.jpg


噢,这里首先映入眼帘的就是一堆图标,Docker蓝鲸赫然列于首位呢:

7.png


那么究竟Nexus3是如何来支持Docker镜像的呢?我们迫不及待的打开控制页面的按钮,像部署一台Maven私服那样开始操作,在设置 Repositories 选项卡中中选择 Create repository。

8.jpg


令人激动的信息终于出现了,没有看错,Nexus3确实支持如此丰富的仓库类型:

9.jpg


我们比较关心的是Docker镜像仓库,这里我们可以看到三种类型,分别是docker(group),docker(hosted),docker(proxy)。其含义解释如下:

hosted : 本地存储,即同docker官方仓库一样提供本地私服功能

proxy : 提供代理其他仓库的类型,如docker中央仓库

group : 组类型,实质作用是组合多个仓库为一个地址

我们的目标是建立一个本地私服Docker镜像仓库,于是选择docker(hosted),填写仓库名称,端口例如8088等信息后点击Create repository创建即可。

10.jpg


只需要很短的时间,我们即可见到服务启动成功的信息:

11.png


部署过程到此为止结束,真的是非常的简单!下面我们来看看在docker客户端的镜像提交及下载过程吧:
(在我们的测试场景中并未为镜像仓库服务启用https证书,所以docker启动进程的参数还需要添加参数--inscure-registry=192.168.9.11:8088,具体方法依不同OS有所差异不再详述)

12.jpg


Docker客户端需要登录镜像仓库才能镜像上载下载的操作,账号就是Nexux的用户账号,这里我们使用了管理员的登录信息(admin/admin123)。

由于 Nexus 在Maven jar管理方面已经是很成熟的产品,增加了Docker等支持以后基本思想没有太大变化,所以关于其他仓库配置这里不再提及,具体可以参考官方文档 (http://books.sonatype.com/nexu ... x.html) 。

面对Nexus3的强大功能,本篇文章只是起到抛砖引玉的作用。而对于另外两种Docker镜像仓库类型感兴趣的朋友可以进一步做相关测试,这里只做简要的描述,希望能够一起研究学习:

创建代理仓库(docker proxy)
创建仓库类型选择docker proxy,Remote storage填写https://registry-1.docker.io,Docker index选择Use Docker Hub,然后从代理仓库地址pull就可以了:

13.jpg


创建group仓库(docker group)
group不提供具体存储服务,其主要作用就是类似一个前端反向代理,可以把多个仓库(比如hosted私服和 proxy)组合成一个地址提供访问,创建方法基本相同,主要是添加多个hosted或者proxy类型的其他仓库即可:

14.jpg


文末福利:请大家关注'Wise2C'公众号并回复【进群】,睿云小助手会第一时间拉你进入【
Docker企业落地实践群】,我们分享的各个企业案例项目的技术专家与用户代表,正在敬候您的光临,期待大家就项目的更多细节与疑问与群里的大牛们进行咨询探讨。
若需要了解更多有关Wise系列PaaS产品的详情,请与我们的市场团队联系: contact@wise2c.com

1 个评论

作者在文中提到Nexus比Docker Registry强大,但是比Harbor更轻量级,能否做一个比较,在哪些情形下更适合用哪一款产品。

要回复文章请先登录注册