我们知道,构建企业内部私有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镜像,这样我们即可免除手动安装调试的麻烦。
[root@ecs-a30e-0002 ~]# yum install -y git # 必须先安装git
[root@ecs-a30e-0002 github]# git clone https://github.com/sonatype/docker-nexus3
[root@ecs-a30e-0002 github]# cd docker-nexus3/
[root@ecs-a30e-0002 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@ecs-a30e-0002 docker-nexus3]# docker build -t sonatype/nexus:3 .
Sending build context to Docker daemon 206.8kB
Step 1/20 : FROM centos:centos7
---> 5182e96772bf
# 漫长的等待...
Getting information for chef stable for el...
downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=&p=el&pv=7&m=x86_64
to file /tmp/install.sh.9/metadata.txt
trying curl...
sha1 569b671470a5a9e6ae2a0f759609c631a6a99931
sha256 f7fbef8594cade92bcc7e47cfa075bfec6a10b432ae901ae9e8a3f5c25702e29
url https://packages.chef.io/files/stable/chef/14.4.56/el/7/chef-14.4.56-1.el7.x86_64.rpm
version 14.4.56
downloaded metadata file looks valid...
downloading https://packages.chef.io/files/stable/chef/14.4.56/el/7/chef-14.4.56-1.el7.x86_64.rpm
to file /tmp/install.sh.9/chef-14.4.56-1.el7.x86_64.rpm
trying curl...
Comparing checksum with sha256sum...
# 漫长的等待...
Successfully built 2f3064f8f13e
Successfully tagged sonatype/nexus:3
[root@ecs-a30e-0002 rancher]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sonatype/nexus 3 687578d612b9 About a minute ago 505MB
sonatype/nexus3 latest 777b20c20405 2 weeks ago 505MB
rancher/server latest 38d4a75fa8f9 5 weeks ago 1.08GB
centos centos7 5182e96772bf 5 weeks ago 200MB
rancher/agent v1.2.11 1cc7591af4f5 7 weeks ago 243MB
rancher/net v0.13.17 f170c38e3763 7 weeks ago 311MB
rancher/dns v0.17.4 678bde0de4d2 2 months ago 249MB
rancher/scheduler v0.8.5 0a2bfb5d8831 2 months ago 248MB
rancher/healthcheck v0.3.8 ce78cf69cc0b 2 months ago 391MB
rancher/metadata v0.10.4 02104eb6e270 2 months ago 251MB
rancher/network-manager v0.7.22 13381626c510 2 months ago 256MB
sonatype/nexus latest 0bf093afada3 2 months ago 467MB
rancher/net holder 665d9f6e8cc1 17 months ago 267MB
注意:上面中的 第一条是我们自己打包的nexus的镜像,后面的Tag = 3 可以看出,其他的镜像是我从官方拉取的;另外可以参考官方镜像制作
创建nexus-data目录,并且设置用户 200 ,否则后面的服务启动不成功(查看日志就是提示对目录无权限操作)
[root@ecs-a30e-0002 rancher]# pwd
/home/rancher
[root@ecs-a30e-0002 rancher]# ll
total 4
drwxr-xr-x 15 200 root 4096 Sep 13 02:03 nexus-data
通过上面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目录下。
这里注意了,目录/home/rancher/nexus-data需要给用户200
好了,到这里就可以访问 http://ip:8081 了,等待一会儿,nexus初始化完成
一切都是如此的优雅简洁,不到一分钟时间,我们的Nexus3服务便已经启动正常了。点击应用栈里的8081端口链接,我们便打开了Nexus的登录窗口,输入默认用户名及密码admin/admin123:
噢,这里首先映入眼帘的就是一堆图标,像APT
、Composer
、Conan
、CPAN
、Docker
、ELPA
、GitLFS
、Helm
、Maven
、npm
、NuGet
、P2
、PyPI
、R
、Raw
、RubyGems
、Yum
。这么多私服都支持,还有什么是你不值得高兴的呢?
所有安装参考自这里,我是边安装边记录;我的本意其实是仅仅用Nexus搭建一个Maven的私服而已,只不过大神文章太好了,了解到Nexus3的强大之处。