Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。
kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
Proxy:
他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。db:
负责储存用户权限、审计日志、Dockerimage分组信息等数据。UI:
提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。jobsevice:
jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。Adminserver:
是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。Registry:
镜像仓库,负责存储镜像文件。Log:
为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下:
hostname:
用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN)ui_url_protocol:
(http 或 https,默认为 http)用于访问 UImax_job_workers:
镜像复制作业线程。db_password:
用于db_auth 的MySQL数据库root 用户的密码。customize_crt:
该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。ssl_cert:
SSL 证书的路径,仅当协议设置为 https 时才应用。ssl_cert_key:
SSL 密钥的路径,仅当协议设置为 https 时才应用。secretkey_path:
用于在复制策略中加密或解密远程 register 密码的密钥路径。部署Docker-ce引擎docker引擎部署,点此跳
[root@harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@harbor ~]# chmod 755 docker-compose
[root@harbor ~]# cp -p docker-compose /usr/local/bin/
[root@harbor ~]# wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@harbor ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
[root@harbor ~]# vim /usr/local/harbor/harbor.cfg
###修改第五行为本机ip
hostname = 192.168.5.129
[root@harbor ~]# sh /usr/local/harbor/install.sh
Now you should be able to visit the admin portal at http://192.168.5.129.
For more details, please visit https://github.com/vmware/harbor .
添加项目并且填写项目名称
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下, Register 服务器在端口 80 上侦听。
[root@harbor harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
从公有仓库下载镜像然后上传到harbor私有仓库
##下载镜像
[root@harbor harbor]# docker pull httpd
##更改镜像标签
[root@harbor harbor]# docker tag httpd 127.0.0.1/myjob/httpd:v1
##查看镜像
[root@harbor harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1/myjob/httpd v1 b2c2ab6dcf2e 13 hours ago 166MB
httpd latest b2c2ab6dcf2e 13 hours ago 166MB
.......省略其它镜像信息
###上传镜像到harbor
[root@harbor harbor]# docker push 127.0.0.1/myjob/httpd:v1
节点服务器在登录Harbor仓库上进行传和下载时会报错,出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜 像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
root@client ~]# docker login -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.5.129/v2/: dial tcp 192.168.5.129:443: connect: connection refused
解决:
[root@client ~]# vim /usr/lib/systemd/system/docker.service
##修改14行
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.5.129 --containerd=/run/containerd/containerd.sock
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker
[root@client ~]# docker login -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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 ###可以成功登录
[root@client ~]# docker pull 192.168.5.129/myjob/httpd:v1
[root@client ~]# docker images ##镜像已成功下载
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.5.129/myjob/httpd v1 b2c2ab6dcf2e 14 hours ago 166MB
##注销登录
[root@client ~]# docker logout 192.168.5.129
Removing login credentials for 192.168.5.129
##使用abc账号登录
[root@client ~]# docker login 192.168.5.129
Username: abc
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