在实际生产运维中, 往往需要把镜像发布到几十, 上百台或更多的节点上. 这时单台 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://edu.51cto.com/course/14070.html
或者参考官方文档: 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 时是一样的.
来源: http://blog.51cto.com/lizhenliang/2421693