运维云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不可上传dao共有镜像仓库)。可以创建私有镜像仓库的服务软件主要有这么几个:
- Docker Registry,Docker自建,使用最为简单,适合个人或者3-5人小团队。
- Harbor,基于Docker Registry开发,在之上加入了Nginx服务层,支持多租户、负载均衡、HA和WebUI,可以满足大型服务平台使用。功能强大,配置稍微复杂一些。
- Harbor原来由VMWare中国研究中心开发,2018年已经加入CNCF云原生基金会。
- Sonatype Nexus,就是那个以Maven库托管知名的Sonatype开发的,可以将各种开发组件库一锅端了。非常适合开发团队使用。
- SUSE Portus,简单易用,适合中等规模的生产级集群使用。
这里,主要介绍Nexus的使用。
1、快速安装
Nexus可以提供多种软件组件服务,这里我通过容器来提供Nexus服务。运行下面的命令:
docker run -d --name nexus -p 5000:5000 -p 8081:8081 sonatype/nexus3
说明:
- 这里的8081为nexus的管理端口。
- 5000为容器镜像服务使用的端口,留作后面创建容器镜像仓库服务使用。下面进一步说明。
- 上面的容器存储使用容器内的目录,当容器实例删除时将会丢失。
- 持久存储通过-v参数来定义。
2、登陆管理界面
上面的容器启动完毕后,在浏览器输入网址:
http://localhost:8081
将会显示Nexus主界面,点击“Sign in”登录(初始账号admin/admin123)。如下:
3、创建Docker仓库
点击齿轮图标进入设置界面,如下:
使用“Create Repository”创建容器镜像仓库,选择Docker(hosted)类型,设置服务http端口为5000。然后查看属性。
这里的端口5000是启动容器时就设好的。
- 在Nexus中每一个容器镜像服务仓库需要指定一个端口,而在容器中必须通过-p参数开放该端口,外部才可以访问。
4、授权沙盒设置
启动匿名访问。
5、启用授权沙盒
容器镜像服务需要单独启用授权沙盒,在Security-Realms页面中将Docker Bearer Token Realm加入到Active列表中。
- 默认安装中,没有启用Docker Bearer Token Realm,会导致docker login时连接被拒。
为了方便,上面使用的是http连接协议,不建议在外网使用。
外网服务应使用https连接,需要预留端口,以及创建ssl证书并使用“SSL Certificates”添加进来。
6、Docker 设置
为了方便,上面使用的是http连接协议,还需要在Docker客户机设置才能访问(默认为https)。
执行:
sudo gedit /etc/docker/daemon.json
在文件中添加"insecure-registries": ["http://10.1.1.184:5000"],如下:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["http://10.1.1.184:5000"]
}
说明:
- 这里的"exec-opts": ["native.cgroupdriver=systemd"]是为了运行Kubernetes,加起来就是上面的文件内容。
- 10.1.1.184为我的服务器地址,5000为上面Docker启动和 Repository的服务端口,必须一致。
然后,需要重新启动Docker:
sudo systemctl restart docker
查看一下信息:docker info,看是否出现insecure-registries的信息。
7、Docker login
使用下面的方式登录到容器镜像服务。
docker login 10.1.1.184:5000
8、开始使用
使用Docker Tag对容器打新的标,指向自建的仓库。
docker tag sonatype/nexus3 10.1.1.184:5000/openthings/nexus3
使用Docker push推送容器镜像。
docker push 10.1.1.184:5000/openthings/nexus3
使用Docker pull拉取镜像。
docker pull 10.1.1.184:5000/openthings/nexus3
使用者发现Nexus会出现错误,无法连接。使用下面的命令重启Nexus的容器服务,再重新登录就好了。
docker restart nexus
最后,简单说下体会,使用Nexus的最大好处是同时支持Maven等软件仓库,维护比较简单。其它方面如性能、容错、扩容等企业级功能相对是比较弱的,企业版里提供HA,是收费的Feature。
更多参考