目录
6.5 在 Harbor 界面 xkq 目录下可看见此镜像及相关信息
7.5 刷新 Harbor 的 Web 管理界面进行查看,会发现xkq项目里面有两个镜像
5、移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移
前言
云原生技术的兴起为企业数字化转型带来新的可能。作为云原生的要素之一,带来更为轻量级虚拟化的容器技术具有举足轻重的推动作用。Docker 的出现和兴起彻底带火了容器。其关键因素是 Docker 提供了使用容器的完整工具链,使得容器的上手和使用变得非常简单。工具链中的一个关键,就是定义了新的软件打包格式-容器镜像。镜像包含了软件运行所需要的包含基础 OS 在内的所有依赖,推送至运行时可直接启动。从镜像构建环境到运行环境,镜像的快速分发成为硬需求。同时,大量构建以及依赖的镜像的出现,也给镜像的维护管理带来挑战。镜像仓库的出现成为必然。
镜像构建之后可以推送至仓库储存和管理,运行时环境在有应用运行需求时,从仓库拉取特定的应用镜像来运行。镜像仓库作为镜像的分发媒介,可以实现特定的管理和访问控制机制。仓库作为镜像传输流动的主要媒介,成为云原生应用平台运转的核心要件。Docker 开源了其 registry 实现, 目前已经成为 CNCF 的沙箱项目Distribution。不过,Distribution 项目仅仅实现了对镜像存储的支持,对企业级的一些管理诉求并无法提供支持。
为了实现企业级镜像仓库的支持,Harbor 项目应运而生
一、Harbor的介绍
1、Harbor简介
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。
2、Harbor的特性
- 基于角色控制: 用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限
- 基于镜像的复制策略: 镜像可以在多个Harbor实例之间进行复制(同步)
- 支持LDAP/AD: Harbor 可以集成企业内部有的AD/LDAP (类似数据库的一-张表),用于对已经存在的用户认证和管理
- 镜像删除和垃圾回收: 镜像可以被删除,也可以回收镜像占用的空间
- 图形化用户界面: 用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理
- 审计管理: 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
- 支持RESTful API: RESTful API提供给管理员对于Harbor 更多的操控,使得与其它管理软件集成变得更容易
- Harbor 和docker registry的 关系: Harbor实质 上是对docker registry做 了封装,扩展了自己的业务模板
3、Harbor的构成
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。
3.1 六个组件的详细介绍
●Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
●Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。(存储镜像,进行验证)
●Core services: Harbor的核心功能,主要提供以下3个服务:
- UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
- WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
- Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。
●Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
●Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
●Log collector(harbor-log): 负责收集其他组件的日志到一个地方。
3.2 六个组件的简单介绍
(1)Proxy
- 通过一个前置的反向代理统一接收浏览器、Docker 客户端的请
求,并将请求转发给后端不同的服务 - 这是一个反向代理组件
(2)Registry
- 负责储存 Docker 镜像
- 处理 docker push/pull 命令来上传和下载
(3)Core services
- Harbor 的核心功能,包括UI、webhook、 token 服务
- UI(harbor-ui): 提供图形化界面
- webhook:网站的一些服务功能
- token:令牌,提供身份验证服务
(4)Database
- 为 core services 提供数据库服务
- 数据库记录镜像的元信息及用户的身份信息
(5)Log collector
- 负责收集其他组件的日志,以供然后进行分析
- 健康检查等
Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。