一、Docker Harbor 概述
1.Harbor 简介
- Docker Harbor 能够提供可视化的 Web 管理界面,可以方便管理 Docker 镜像,而且提供了多个项目的镜像权限管理及控制功能(包括统计信息,比如镜像被下载了多少次,什么时候上传得)
- Harbor 是 VMware 公司开源的企业级 Docker Registry 项目
Registry:
1.Docker官方提供了Docker Hub来维护管理所有的镜像,只是对于免费用户而言,只能创建一个私有仓库,付费用户才能拥有更多私有仓库的权限
2.对此官方开源了Docker Registry的源代码,我们可以通过它在局域网内部搭建私有的镜像注册中心(私有仓库)
2.Harbor 的优势
- 基于角色控制:有管理员与普通用户,可赋权普通用户,比如只能上传和下载,可根据项目来进行操作和管理
- 基于镜像的复制策略:也与权限相关,比如有只一些用户与组才能对此项目进行相对应的操作
- 支持 LDAP/AD:域控制,比如南京去下载北京 harbor 私有仓库的镜像,两端打上局域网的地址,连接在一块,数据信息的传输通过一条隧道,会通过两层加密,第一层为隧道加密,第二层为数据加密,安全可靠
- 图像删除和垃圾收集:即回收站机制
- 图形 UI:具有统计功能,比如访问量与镜像下载热度
- 审计:日志,这里意义不大,主要还是借助于 ELK
- RESTful API:定义 Web 语言规范的格式,方便调用 Harbor 的接口,也便于二次开发
二、Harbor 的核心组件
1.Proxy
- 通过一个前置的反向代理统一接收浏览器、Docker 客户端的请
求,并将请求转发给后端不同的服务 - 这是一个反向代理组件
2.Registry
- 负责储存 Docker 镜像
- 处理 docker push/pull 命令来上传和下载
3.Core services
-
Harbor 的核心功能,包括UI、webhook、 token 服务
-
webhook:网站的一些服务功能
-
token:令牌,提供身份验证服务
4.Database
- 为 core services 提供数据库服务
- 数据库记录镜像的元信息及用户的身份信息
5.Log collector
- 负责收集其他组件的日志,以供然后进行分析
- 健康检查等
三、Docker Harbor 私有仓库架构拓扑
- 所有的请求或人为的操作都会首先交给 Proxy(反向代理)
- Proxy 会先将请求转发给后端 Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)
- 转发给 Registry(镜像存储),若需要下载镜像等权限操作,需要通过 Core services 中的 token 令牌的身份验证服务才行
- 每一次下载和上传都会产生操作记录,生成到日志,保存至 Database 中
- Database 记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作
四、Harbor 构建 Docker 私有仓库实战
1.案例环境
主机 | 操作系统 | 主机名/IP 地址 | 主要软件 |
---|---|---|---|
服务端 | CentOS 7 | harbor/192.168.126.16 | docker-ce、docker-compose、harbor-offline-installer |
客户端 | CentOS 7 | client/192.168.126.17 | docker-ce |
2.案例需求
- 通过 Harbor 创建 Docker 私有仓库
- 图形化管理 Docker 私有仓库镜像
3.部署步骤
①两台主机安装 docker-ce
提供一个一键部署在线 YUM 源及安装最新版本 docker-ce 的 shell 脚本
传送门:https://blog.csdn.net/weixin_51486343/article/details/115236678?spm=1001.2014.3001.5502
harbor 服务端还需要安装 docker-compose 容器编排工具
传送门:https://blog.csdn.net/weixin_51486343/article/details/115248105?spm=1001.2014.3001.5501
②启动 harbor 服务
1.下载harbor安装程序
[root@harbor ~]# cd /usr/local/
[root@harbor local]# rz -E '//将软件包传至该目录下'
rz waiting to receive.
[root@harbor local]# ls '//查看'
bin games include lib64 sbin src
etc harbor-offline-installer-v1.2.2.tgz lib libexec share
[root@harbor local]# tar zxvf harbor-offline-installer-v1.2.2.tgz '//在该目录下解压缩'
...
...
[root@harbor local]# ls '//多出来了harbor'
bin games harbor-offline-installer-v1.2.2.tgz lib libexec share
etc harbor include lib64 sbin src
--
2.配置harbor参数文件
[root@harbor local]# cd harbor/
[root@harbor harbor]# ls
common docker-compose.yml harbor.v1.2.2.tar.gz NOTICE
docker-compose.clair.yml harbor_1_1_0_template install.sh prepare
docker-compose.notary.yml harbor.cfg LICENSE upgrade
[root@harbor harbor]# vim harbor.cfg
5 hostname = 192.168.12