之前写过《搭建docker本地镜像仓库并提供权限校验及UI界面》文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大。于是抽时间研究了基于Harbor构建本地镜像仓库,感觉Harbor的确更简单同时功能更强大,再此感谢各位同仁的建议。下面将基于Harbor构建本地镜像仓库的步骤分享出来,再次欢迎各位同仁点评。
1、Harbor
Harbor是VMware公司开源了企业级Registry项目, 其的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:
- Cloud native registry:支持容器镜像和Helm Charts,为云原生环境提供服务
- Role based access control:基于角色的访问控制
- Policy based image replication:基于策略的镜像复制
- Vulnerability Scanning:镜像的漏洞扫描
- LDAP/AD support:AD/LDAP集成
- Image deletion & garbage collection:镜像的删除和空间清理
- Notary:可以保证镜像的真实性
- Graphical user portal:友好的管理UI
- Auditing:日志审计
- RESTful API:提供RESTfull接口易于与外部系统集成
- Easy deployment:部署简单
以上功能是将官网的内容做了简单翻译,如果大家想深层次了解一下,可以查看Harbor官网内容。
2、部署
部署Harbor前,首先得有docker环境、docker-compose的环境,如果大家没有docker环境,可以参考我之前的一篇文章《CentOS7离线部署docker》搭建环境,对于安装docker-compose是很简单,只如下操作:
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose
注意:如果运行环境不能直接联外网,则可以先下载二进制包,然后手动放置到相应目录,并授权即可。
有了docker环境、docker-compose的环境后,可以开始部署Harbor了,步骤如下:
(1)、到Github上下载目前Harbor的最新版本,它提供两种下载方式,一种是离线安装包和在线安装包,大家可以根据自己的情况下载,此处下载的是离线安装包
![4bfbc29e62e74bdc4c6f786c07be21e1.png](https://i-blog.csdnimg.cn/blog_migrate/79c20651e319afc5a827f7a842aaf6a4.jpeg)
(2)、下载后,将该文件解压到/opt/harbor目录下,当然大家也可以根据自己的使用情况放到相应的目录即可
(3)、此处要开启https访问,所以得生成证书(注意:如果不以https访问,这一个步骤就是不需要的),操作如下:
mkdir /opt/harbor/certscd /opt/harbor/certsopenssl req -new -newkey rsa:4096 -days 365 -subj "/CN=192.168.208.147" -nodes -x509 -keyout auth.key -out auth.cert
注意:此处的ip地址192.168.208.147,是搭建Harbor服务所在的ip地址
(4)、修改harbor.cfg配置文件信息,分别修改以下配置信息:
# 主机名改成本服务器的iphostname = 192.168.208.147# 访问的协议httpsui_url_protocol = https# 由于前一步我们自己生成了证书,所以该值改为offcustomize_crt = off# ssl证书的路径ssl_cert = /opt/harbor/certs/auth.cert# ssl密钥的路径ssl_cert_key = /opt/harbor/certs/auth.key# 设置ui系统的admin账号的密码,默认为Harbor12345harbor_admin_password = Adminjgyw
(5)、安装,执行:
./install.sh
(6)、执行上面的安装脚本,实质是执行docker compose来部署应用的,所以可以通过docker compose命令查看服务信息:
docker-compose ps
结果为:
![99c174ab9847063fe21b1e1806edbd58.png](https://i-blog.csdnimg.cn/blog_migrate/b98a0c5ad2bdf60c791b51f3fc8face8.jpeg)
(7)、访问https://192.168.208.147,如果如下:
![e0d5061d9ac131385bf98725fee2b553.png](https://i-blog.csdnimg.cn/blog_migrate/67baba46044277509a356f66c899eedf.jpeg)
3、测试
部署完成之后,测试一下镜像的pull和push功能,首先将admin账号登录,并创建jgyw项目,即:
(1)、点击“新建项目”
![b5e32d6aa3f916cb19a8a4ede91a3cd3.png](https://i-blog.csdnimg.cn/blog_migrate/c65561594f3800ff581842b614d0d261.jpeg)
(2)、填写项目信息,名称为jgyw,访问级别为公开,即所有人都可以pull镜像下来,即:
![a5558c53d18ae869eb713c9f90b91512.png](https://i-blog.csdnimg.cn/blog_migrate/644e60552d44952c9ef6be5d2b91b5f6.jpeg)
(3)、创建用户
![2179292440e94d3beb390d976a30b11e.png](https://i-blog.csdnimg.cn/blog_migrate/5db9dfa3d343398527cb86fb63bc269a.jpeg)
(3)、为jgyw项目添加成员,同时角色为开发人员,这样可以将镜像push到该项目中,即:
![cb438ba17159d405f83c959beb32ce89.png](https://i-blog.csdnimg.cn/blog_migrate/f46a3d8393825b55ae147aaa0a1489a7.jpeg)
(4)、push镜像
docker login 192.168.208.147# 输入上面新建的jgyw用户名和密码即可登录
如果此处发生如下错误:
Error response from daemon: Get https://192.168.208.147/v1/users/: x509: cannot validate certificate for 192.168.208.147 because it doesn't contain any IP SANs
则需要将/usr/lib/systemd/system/docker.service文件中ExecStart值修改为如下形式,即:
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.208.147
测试openzipkin/zipkin:2.12.1镜像
将openzipkin/zipkin:2.12.1镜像打上标签,即:
docker tag openzipkin/zipkin:2.12.1 192.168.208.147/jgyw/zipkin:2.12.1
然后执行push命令:
docker push 192.168.208.147/jgyw/zipkin:2.12.1
执行完成后,可以查到jgyw项目中就有了该镜像,即:
![5eaad58f52a30a5be867c17e15aa44e0.png](https://i-blog.csdnimg.cn/blog_migrate/64e3364a3d5fe8c6f012f826d3aa5cd4.jpeg)
(5)、pull镜像
首先将本机的192.168.208.147/jgyw/zipkin:2.12.1镜像删除掉,即:
docker rmi 192.168.208.147/jgyw/zipkin:2.12.1
然后执行pull命令,即:
docker pull 192.168.208.147/jgyw/zipkin:2.12.1
镜像就拉取下来了。