我们知道,构建企业内部私有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镜像,这样我们即可免除手动安装调试的麻烦。
通过上面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平台添加应用栈:
填写应用栈名称为Sonatype,描述为Nexus Repository Manager
第二步 在该应用栈下添加Nexus3服务:
填写docker镜像为前面步骤生成的sonatype/nexus:3,添加两个端口映射项目,其中8081是Nexus服务自身的Web管理页面端口,8088是我们用于Docker镜像仓库服务的端口。(可以根据实际情况只有定义);
设置卷挂载条目,以便将Nexus的配置信息及数据持久保存于宿主机,这里Nexus容器内的/nexus目录被映射到RancherOS宿主机的/home/rancher/nexus-data目录下。
一切都是如此的优雅简洁,不到一分钟时间,我们的Nexus3服务便已经启动正常了。点击应用栈里的8081端口链接,我们便打开了Nexus的登录窗口,输入默认用户名及密码admin/admin123:
噢,这里首先映入眼帘的就是一堆图标,Docker蓝鲸赫然列于首位呢:
那么究竟Nexus3是如何来支持Docker镜像的呢?我们迫不及待的打开控制页面的按钮,像部署一台Maven私服那样开始操作,在设置 Repositories 选项卡中中选择 Create repository。
令人激动的信息终于出现了,没有看错,Nexus3确实支持如此丰富的仓库类型:
我们比较关心的是Docker镜像仓库,这里我们可以看到三种类型,分别是docker(group),docker(hosted),docker(proxy)。其含义解释如下:
hosted : 本地存储,即同docker官方仓库一样提供本地私服功能
proxy : 提供代理其他仓库的类型,如docker中央仓库
group : 组类型,实质作用是组合多个仓库为一个地址
我们的目标是建立一个本地私服Docker镜像仓库,于是选择docker(hosted),填写仓库名称,端口例如8088等信息后点击Create repository创建即可。
只需要很短的时间,我们即可见到服务启动成功的信息:
部署过程到此为止结束,真的是非常的简单!下面我们来看看在docker客户端的镜像提交及下载过程吧:
(在我们的测试场景中并未为镜像仓库服务启用https证书,所以docker启动进程的参数还需要添加参数--inscure-registry=192.168.9.11:8088,具体方法依不同OS有所差异不再详述)
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就可以了:
创建group仓库(docker group)
group不提供具体存储服务,其主要作用就是类似一个前端反向代理,可以把多个仓库(比如hosted私服和 proxy)组合成一个地址提供访问,创建方法基本相同,主要是添加多个hosted或者proxy类型的其他仓库即可: