共计 1985 个字符,预计需要花费 5 分钟才能阅读完成。
在实际生产运维中,往往需要把镜像发布到几十、上百台或更多的节点上。这时单台 Docker 主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台 Docker 主机上是不行的,我们需要一个像 Git 仓库一样系统来统一管理镜像。这里介绍的是一个企业级镜像仓库 Harbor,将作为我们容器云平台的镜像仓库中心。
Habor 是由 VMWare 公司开源的容器镜像仓库。 事实上,Habor 是在 Docker Registry 上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括: 管理用户界面,基于角色的访问控制,AD/LDAP 集成以及审计日志等,足以满足基本企业需求。
官方地址:https://vmware.github.io
Github:https://github.com/goharbor/harbor
1、Harbor 主要功能
基于角色访问控制(RBAC)
在企业中,通常有不同的开发团队负责不同的项目,镜像像代码一样,每个人角色不同需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。
例如,开发人员需要对项目构建这就用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经理具有所有权限。镜像复制
可以将仓库中的镜像同步到远程的 Harbor,类似于 MySQL 主从同步功能。
LDAP
Harbor 支持 LDAP 认证,可以很轻易接入已有的 LDAP。
镜像删除和空间回收
Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间。
图形页面管理
用户很方面搜索镜像及项目管理。
审计
对仓库的所有操作都有记录。
REST API
完整的 API,方便与外部集成。
2、Harbor 组件
组件 | 功能 |
harbor-adminserver | 配置管理中心 |
harbor-db | Mysql 数据库 |
harbor-jobservice | 负责镜像复制 |
harbor-log | 记录操作日志 |
harbor-ui | Web 管理页面和 API |
nginx | 前端代理,负责前端页面和镜像上传 / 下载转发 |
redis | 会话 |
registry | 镜像存储 |
3、Harbor 部署
环境要求:
Harbor 安装有 3 种方式:
在线安装:从 Docker Hub 下载 Harbor 相关镜像,因此安装软件包非常小
离线安装:安装包包含部署的相关镜像,因此安装包比较大
OVA 安装程序:当用户具有 vCenter 环境时,使用此安装程序,在部署 OVA 后启动 Harbor
我们采用离线安装,首先下载离线安装包:https://github.com/vmware/harbor/releases
HTTP 方式部署
基本配置:
准备配置文件:
# ./prepare
安装并启动 Harbor:
# ./install.sh
查看运行状态:
部署完成,是不是很简单呢!
如果有非 Up 状态,先看日志:
# ls /var/log/harbor/
adminserver.log jobservice.log mysql.log proxy.log redis.log registry.log ui.log
HTTPS 方式部署:
如果想以 https 加密方式提供服务可以参考这个免费的视频教程:https://ke.qq.com/course/311382
或者参考官方文档:https://github.com/vmware/harbor/blob/master/docs/configure_https.md
4、登录 Web 页面
浏览器输入:http://10.206.240.188
账号:admin
密码:Harbor12345
这里有 4 个项目,library 是默认自带的,通常用这个存储一些公共的镜像,这个项目下镜像谁都可以 pull,但不能 push,push 需要先登录。其他 3 个项目是我自己创建的,请忽略。
5、library 项目赋予新用户 push 权限
先创建一个用户:
进入 library 项目,将用户加入这个成员:
这样 lizhenliang 用户就具备了对这个 library 项目的 push 权限。
注:创建新项目赋予用户权限同等方式。
7、上传镜像
接下来将刚才构建的镜像推送到 Harbor 仓库,先看看我们要推送的镜像:
在推送之前,需要注意第一列,这个完整格式是:
如果镜像只放在本地存储 REPOSITORY 写什么都可以,但推送到镜像仓库就必须指定仓库中心地址。
所以,先打重命名 REPOSITORY,其实就是引用源镜像标记了一个目标镜像:
访问拒绝,刚说过,push 需先登录:
8、下载镜像
其他 Docker 主机怎么下载刚推送的镜像呢?
由于我们搭建的 Harbor 是以 HTTP 提供服务的,而 Docker CLI 默认以 HTTPS 访问仓库,所以要先配置可信任,否则 pull 镜像仓库失败。如果是 HTTPS 提供服务就不用配置这一步了。
pull 的地址跟 push 时是一样的。
说说