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

 

posted @ 2020-10-23 11:48  步绍训  阅读(1172)  评论(0)    收藏  举报