docker官方的镜像仓库方案docker registry,权限控制和UI都没有,不太适合生产环境。这里介绍一个开源的解决方案-harbor,由VMware公司中国团队为企业用户设计的Registry server开源项目,支持功能有:
UI支持,还有中文
日志审计
基于角色的权限控制
支持注册、多项目
镜像复制,可以解决高可用问题
目前没有发现很突出的缺点
harbor项目地址:https://github.com/goharbor/harbor
官方安装说明:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
生产环境需要重点考虑几个问题:
频繁地大文件传输,单台server肯定是无法胜任的,需要把镜像复制到多台节点,好在harbor已经支持镜像复制;
高可用的问题,一个镜像节点挂了不影响整个集群服务
访问权限的控制
根据需要是否开启https
maybe else...
harbor的部署
环境准备
系统:CentOS Linux release 7.4.1708
Docker 17.12.0-ce ,Docker Compose
python2
IP:192.168.10.95
域名:harbor.pyops.net,此域名需要dns 解析到198.13.48.154 作为私有仓库地址
1. 先安装docker-compose
因为harbor项目是通过docker-compose来编排的,项目的启动、配置变更等都依赖它。
2. harbor安装
启动/停止harbor:
cd /usr/local/harbor # 进入harbor目录 docker-compose start # 启动harbor容器 docker-compose stop # 停止harbor容器 docker-compose down # 停止harbor容器并将容器删除 docker-compose up -d # 第一次启动使用,如果容器已经存在了,直接使用start来启动
docker-compose.yml配置里的一些路径、名称可以根据实际情况进行修改。比如:
volumes定义的宿主机的目录等等
服务起来后,可以尝试在浏览器中打开harbor ui地址:192.168.10.95
先创建一个项目如proj1[后面镜像上传和下载演示会用到],项目地址格式为:192.168.10.95/proj1/
项目访问级别:[公开]其实就是匿名访问权限,无需账号密码直接可以pull;
以上为harbor服务器端的安装步骤,可以正常启动服务了。而其他需要上传、下载harbor镜像的节点,需要有下面几个工作:
1. 上传镜像前需要给镜像重新打上特殊标签[带harbor服务器地址与路径]
2. docker启动服务脚本添加harbor服务器地址/usr/lib/systemd/system/docker.service
3. 上传镜像docker push ...
3. 在启动脚本中添加镜像服务器地址
--insecure-registry $harbor_srv
/usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.10.95 systemctl daemon-reload systemctl restart docker # 重启后通过命令行登录验证: docker login 192.168.10.95 [root@node1 ~]# docker login 192.168.10.95 Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
登录过一次之后就会保存在这个文件中,之后再登录不用输入用户密码了
4. 打标签docker tag
[root@node2 ~]# docker tag sshd-base:latest 192.168.10.95/proj1/sshd-base:latest [root@node2 ~]# docker push 192.168.10.95/proj1/sshd-base:latest 注意push的ip或者名称要与安装harbor时harbor.cfg里的hostname一致,否则无法上传.上传后检测如果正常可以把刚刚新建标签的镜像删除。
在另外一个节点上测试刚刚上传的镜像:
[root@node1 ~]# docker pull 192.168.10.95/proj1/sshd-base [root@node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.10.95/proj1/sshd-base latest 4729bcdfafc6 2 weeks ago 479MB
进阶
habor仓库镜像复制
复制是针对项目的,所以一定要先手动创建项目名称再去设置复制规则,harbor不会将项目名称进行复制,它只复制项目下面的镜像。
harbor02上添加目标如下
启动参数:--insecure-registry=$ip
[root@node1 ~]# cat /usr/lib/systemd/system/docker.service|grep ExecStart ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry=192.168.10.95 --insecure-registry=192.168.10.97 systemctl daemon-reload systemctl restart docker
配置完后在node1上进行测验,上传一个镜像到其中一台harbor上,然后到另外一台harbor上看看是否同步镜像。
habor高可用部署
两台镜像server设置镜像同步后,可以根据需要是否分离push/pull,或者两台server同时都支持push/pull。然后结合LVS/HAPROXY实现负载均衡,基本上一个高可用的镜像仓库方案就实现了。
限于篇幅,对于如何结合LVS/HAPROXY/keepalived实现整个集群的负载均衡及高可用,还有harbor开启https跟kubernetes证书认证相结合,可以Google,也可以私信我。
还没有评论,来说两句吧...