关于Harbor
Harbor is an an open source trusted cloud native registry project that stores, signs, and scans content. Harbor extends the open source Docker Distribution by adding the functionalities usually required by users such as security, identity and management. Having a registry closer to the build and run environment can improve the image transfer efficiency. Harbor supports replication of images between registries, and also offers advanced security features such as user management, access control and activity auditing.
Harbor是一个开源的可信云本机registry项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供高级安全功能,如用户管理,访问控制和活动审计。
Features 特性
Cloud native registry: With support for both container images and Helm charts, Harbor serves as registry for cloud native environments like container runtimes and orchestration platforms.
云本机registry:Harbour支持容器镜像和Helm图表,可用作云本机环境(如容器运行时和业务流程平台)的registry。
Role based access control: Users and repositories are organized via ‘projects’ and a user can have different permission for images under a project.
基于角色的访问控制:用户和存储库通过“项目”进行组织,用户可以对项目下的镜像拥有不同的权限。
Policy based image replication: Images can be replicated (synchronized) between multiple registry instances based on policies with multiple filters (repository, tag and label). Harbor will auto-retry to replicate if it encounters any errors. Great for load balancing, high availability, multi-datacenter, hybrid and multi-cloud scenarios.
基于策略的镜像复制:可以基于具有多个过滤器(存储库,标记和标签)的策略在多个registry实例之间复制(同步)镜像。如果遇到任何错误,Harbor将自动重试进行复制。非常适合负载平衡,高可用性,多数据中心,混合和多云场景。
Vulnerability Scanning: Harbor scans images regularly and warns users of vulnerabilities.
漏洞扫描:Harbor定期扫描镜像并警告用户漏洞。
LDAP/AD support: Harbor integrates with existing enterprise LDAP/AD for user authentication and management, and supports importing LDAP groups into Harbor and assigning proper project roles to them.
LDAP / AD支持:Harbor与现有企业LDAP / AD集成以进行用户身份验证和管理,并支持将LDAP组导入Harbor并为其分配适当的项目角色。
Image deletion & garbage collection: Images can be deleted and their space can be recycled.
图像删除和垃圾收集:可以删除镜像,并可以回收它们的空间。
Notary: Image authenticity can be ensured.
公证:可以确保镜像的真实性。
Graphical user portal: User can easily browse, search repositories and manage projects.
用户图形界面:用户可以轻松浏览,搜索存储库和管理项目。
Auditing: All the operations to the repositories are tracked.
审计:跟踪存储库的所有操作。
RESTful API: RESTful APIs for most administrative operations, easy to integrate with external systems.
RESTful API:适用于大多数管理操作的RESTful API,易于与外部系统集成。
Easy deployment: Provide both an online and offline installer.
易于部署:提供在线和离线安装程序。
企业级Registry项目Harbor是由Vmware公司开发的开源项目,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务。它以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker 容器的形式构建的,因此很自然地,我们使用Docker Compose来对它进行部署。在源代码中(https://github.com/vmware/harbor), 用于部署Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现Harbor由5个容器组成:
- proxy: 由Nginx 服务器构成的反向代理。
- registry:由Docker官方的开源registry 镜像构成的容器实例。
- ui: 即架构中的core services, 构成此容器的代码是Harbor项目的主体。
- mysql: 由官方MySql镜像构成的数据库容器。
- log: 运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志。
这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。(摘自 http://dockone.io/article/1179)
安装及配置
(参考 https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
下载harbor软件包:https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz
harbor软件包较大,建议科学上网
解压后如下
1 | [root@Web2 harbor]# ls |
1 | [root@Web2 ~]# yum info docker-compose |
还需要docker-compose 编排工具,该工具在epel源中提供,所以需要先配置epel源;然后再安装即可
1 | yum install epel-release |
python和openssl
1 | [root@Web2 ~]# openssl |
修改harbor配置文件
1 | [root@Web2 ~]# vim /usr/local/harbor/harbor.cfg |
Harbor has integrated with Notary and Clair (for vulnerability scanning). However, the default installation does not include Notary or Clair service.
Harbor已与Notary和Clair集成(用于漏洞扫描)。但是,默认安装不包括Notary或Clair服务。
1 | 执行脚本安装harbor |
在安装 脚本执行过程过程中看到下拉了很多镜像,Harbor的每个组件都是以Docker 容器的形式构建的。
1 | [root@Web2 ~]# docker images |
以admin/Harbor12345 默认登录名密码进行登录
将镜像推送至registry
Harbor的默认安装使用HTTP协议,需要将 –insecure-registry 参数添加进客户端的daemon.json 。
1 | root@ubuntu16:~# vim /etc/docker/daemon.json |
然后以admin身份登录
1 | root@ubuntu16:~# docker login 172.18.74.101 |
对镜像进行打标 ,使用docker tag 命令
1 | root@ubuntu16:~# docker tag alpine 172.18.74.101/library/alpine:latest |
推送镜像
1 | root@ubuntu16:~# docker push 172.18.74.101/library/alpine |
推送后在Harbor中即可看到alpine镜像
Harbor管理
使用docker-compose命令可以用来管理Harbor,但是必须与docker-compose.yml在同一目录中运行,否则报错如下。
1 | ERROR: |
使用 docker-compose stop 来关闭Harbor和docker-compose start 关闭后进行重启。
1 | [root@Web2 harbor]# docker-compose stop |
要更改Harbour的配置,要停止现有的Harbor实例并更新 harbor.cfg。然后运行 prepare 脚本以填充配置。最后重新创建并启动Harbor
1 | sudo docker-compose down -v |
默认情况下,注册表数据保留在主机的/data/目录中。即使Harbor的容器被移除和/或重新创建,此数据仍保持不变。
1 | [root@Web2 data]# ls |
此外,Harbor使用 rsyslog 来收集每个容器的日志。默认情况下,这些日志文件存储在/var/log/harbor/目标主机上的目录中以进行故障排除。
1 | [root@Web2 registry]# cd /var/log/harbor/ |
删除Harbor的容器,同时将图像数据和Harbor的数据库文件保存在文件系统上:
1 | sudo docker-compose down -v |
删除Harbor的数据库和图像数据(用于重新安装):
1 | rm -r / data / database |
自定义配置Harbor监听端口
1.修改docker-compose.yml
将默认的80:80 修改为8888:80,访问主机8888端口nginx容器就可以代理至harbor-portal容器的80端口
1 | proxy: |
2. 修改harbor.cfg
1 | hostname = 172.18.74.101:8888 |
3.重新部署Harbor
见上文