Harbor 容器镜像仓库
Harbor 简介
Harbor 是由 VMware 公司开源的容器镜像仓库, 它在 Docker Registry 的基础上进行了企业级扩展, 包括基于角色的权限控制、 AD/LDAP集成、
可视化管理界面、 日志审计等,它同 Docker Registry一 样提供容器镜像的存储及分发服务。
Harbor 与 Docker Registry 相比进行的优化和改进
- 传输效率优化: Harbor 根据容器镜像每层的UUID标识进行增量同步, 而不是全量同步, 减少带宽及其他资源占用。
- 镜像仓库水平扩展:由于上传、 下载镜像文件涉及大量的耗时1/0操作, 当用户对性能有较高要求时, 需要创建多个Registry,通过负载均衡器将访问压力分发到不同的Registry,同 时多个Registry存储时进行镜像文件的同步,便于水平扩展。
- 用户认证:Harbor在DockerRegistry的基础上扩展了用户认证授权的功能,用户在Harbor中 进行访问需要携带token,以增强安全性。
- 镜像安全扫描:上传到Harbor上的镜像文件 能够通过clair的安全扫描,以发现镜像中存在的安全漏洞,并提高镜像文件的安全性。
- 提供Web界面以优化用户体验:Registry只提供命令行方式, 没有操作界面, 而Harbor提供用户界面,可以支持登录、 搜索功能,镜像分类管理包括区分 公有、 私有镜像等功能,优化了用户管理及操作体验。
Harbor 架构
架构图:

Proxy
Proxy是镜像仓库核心服务(Registry、UI、token等)的前端访问代理, 通过这个代理可统 一 接收客户端发送来的请求,并将此请求转发给后端不同的服务进行处理。
Registry
负责存储docker镜像,处理上传/下载命令。对用户进行访问控制,它指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token,registry会通过公钥对token进行解密验证。
Core service:Harbor的核心功能
- UI:图形界面
- Webhook:及时获取registry上image状态变化情况,在registry上配置 webhook,把状态变化传递给UI模块。
- Token服务:复杂根据用户权限给每个docker push/p/ull命令签发token。Docker客户端向registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向registry进行请求。
Database
提供数据库服务,存储用户权限,审计日志,docker image分组信息等数据
Log collector
为了帮助监控harbor运行,复责收集其他组件的log,供日后进行分析
Harbor 部署
安装环境
- OS: Centos7
- software: docker docker-compose openssl (version: latest) #安装过程忽略
- open port: 443 4443 80
安装harbor
1. 下载离线安装包
2. 解压离线安装包并配置 harbor
tar xvf harbor-offline-installer-v2.0.5.tgz #解压后目录文件如下 common.sh harbor.v2.0.5.tar.gz harbor.yml.tmpl install.sh LICENSE prepare #准备 harbor 配置文件 cp harbor.yml.tmpl harbor.yml # 更改harbor配置文件,禁用 https 模块. 生产环境可以通过 nginx 反向代理实现 vim harbor.yml hostname: our ip # 改成自己服务器的IP # 安装 harbor sh install.sh # 安装完成后会提示 successfully, 同时生成 docker-compose 配置文件
访问harbor
username: admin
password: 在 harbor.yml 文件中,也可以在安装前修改,或者登录后修改。

维护 harbor
要想了解harbor,并很好的维护 harbor,我们需要查阅 docker-compose.yaml. docker 功底不够的请自行学习.
通过查阅 docker-compose.yaml 文件我们了解到如下信息:
日志文件挂载到主机的路径: /var/log/harbor
数据文件挂载到主机的路径:/data/
配置文件在harbor目录中:./harbor/common/config
知道了这些,如果要把harbor 作为一个生产系统来用,结合下图对于懂docker的人来说花费不了多长时间就可以搞明白业务逻辑了.

启动停止 harbor
#进入harbor 所在的目录 #启动 harbor,生成容器。 docker-compose up -d #停止 harbor,移除容器 docker-compose down #启动服务 docker-compose start #停止服务 docker-compose stop #重启服务 docker-compose restart #列出容器正在使用的镜像 docker-compose images
使用Harbor
 开启漏洞扫描功能
1. 安装时添加 --with-clair 参数
sh install.sh --with-clair # 安装后将会添加一个名叫 clair 的容器.
2. 安装后释放所有容器(通过docker-compose),重新生成配置文件
sh prepare --with-clair #重新生成 clair 的配置文件
上传下载镜像
Harbor 中有个项目菜单,
项目:Harbor中镜像仓库的分组管理单位,也被叫做命名空间.
新建项目:
访问级别公开:任何都可以读取此项目下的镜像,不需要 docker login 就能 pull 此项目下的镜像。
存储容量: -1 表示不限制容量

Push 镜像到 nginx 项目中
#由于我们搭建的harbor 未启用 https,所以需要在 /etc/docker/daemon.json 文件中添加如下的配置 "insecure-registries": [ "192.168.0.226"] #生成docker 验证配置文件 docker login -u 用户名 -p 密码 http://192.168.0.226 #配置文件保存在 /root/.docker/config.json 中, 也可以根据需要依据提示配置加密的 docker login http://192.168.0.226 Username: wpic Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store #上传一个 nginx 镜像到项目中 docker tag nginx 192.168.0.226/nginx/nginx:v1 docker push 192.168.0.226/nginx/nginx:v1
Pull 镜像到本地服务器
# 由于我们的nginx 项目设置的是公开,所以不需要登录即可在任意服务器上 pull 此项目中的镜像 docker pull 192.168.0.226/nginx/nginx:v1
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号