我们知道,构建企业内部私有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功能丰富而又简单易用的其它选择呢?


做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镜像,这样我们即可免除手动安装调试的麻烦。



snap docker 卸载 snap docker 区别_docker




snap docker 卸载 snap docker 区别_Cloud_02




通过上面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平台添加应用栈:



snap docker 卸载 snap docker 区别_Cloud_03




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



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



snap docker 卸载 snap docker 区别_docker_04




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



snap docker 卸载 snap docker 区别_snap docker 卸载_05




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



snap docker 卸载 snap docker 区别_Cloud_06




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



snap docker 卸载 snap docker 区别_Docker_07




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



snap docker 卸载 snap docker 区别_Docker_08




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



snap docker 卸载 snap docker 区别_docker_09




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



snap docker 卸载 snap docker 区别_docker_10




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



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



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



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



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



snap docker 卸载 snap docker 区别_Docker_11




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



snap docker 卸载 snap docker 区别_Docker_12




部署过程到此为止结束,真的是非常的简单!下面我们来看看在docker客户端的镜像提交及下载过程吧:


(在我们的测试场景中并未为镜像仓库服务启用https证书,所以docker启动进程的参数还需要添加参数--inscure-registry=192.168.9.11:8088,具体方法依不同OS有所差异不再详述)



snap docker 卸载 snap docker 区别_docker_13




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就可以了:



snap docker 卸载 snap docker 区别_snap docker 卸载_14




创建group仓库(docker group)


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



snap docker 卸载 snap docker 区别_docker_15