前一段时间写过一篇文章:[Kubernetes]CentOS7下搭建Harbor仓库,只是知道了如何搭建,但是对于背后的整体架构还不是太清楚,这篇文章就来讲讲.

默认情况下,Harbor运行起来后有如下容器:

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2ac87673c5b vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
0d0a8e9cf7f4 vmware/harbor-jobservice:v1.3.0 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-jobservice
bb3b83138017 vmware/harbor-ui:v1.3.0 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-ui
16f8eec3d78e vmware/harbor-adminserver:v1.3.0 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-adminserver
5063ea0d99d6 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 2 hours ago Up 2 hours (healthy) 5000/tcp registry
56f5a1077f3a vmware/harbor-db:v1.3.0 "/usr/local/bin/dock…" 2 hours ago Up 2 hours (healthy) 3306/tcp harbor-db
23bf25652305 vmware/harbor-log:v1.3.0 "/bin/sh -c /usr/loc…" 2 hours ago Up 2 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log

分别为nginx,harbor-jobservice,harbor-ui,harbor-adminserver,registry,harbor-db,harbor-log,由上我们可以得出下面的架构图:

各模块详解

Harbor是通过docker compose来部署的,这也是为什么在装Harbor之前,需要安装docker-compose.接下来讲一下上图中设计到的各个模块的详细部分.

  • Proxy:对应启动组件nginx,是一个nginx反向代理.Harbor的registry,UI,token services等组件,都处在一个反向代理后边,该代理负责将来自浏览器,docker clients的请求转发到后端服务上
  • Registry:对应启动组件registry.负责存储Docker镜像文件,以及处理Docker的push,pull等请求.Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull,push请求转发到token服务来获取有效的token.
  • Core services:Harbor的核心功能,主要包括3个服务:UI,Job services和Log collector.
    • UI:对应启动组件harbor-ui.以图像用户界面的方式,辅助用户管理镜像,我个人觉得这样使得使用Harbor时,更加友好.
    • Job services:对应启动组件harbor-jobservice,主要用于镜像复制,和registry通信,本地镜像可以push到Harbor镜像仓库中,同样也可以从Harbor镜像仓库中pull到本地,同时记录job_log.
    • Log collector:对应启动组件harbor-log.负责收集其他模块的日志到一个地方
  • Database:对应启动组件harbor-db.负责存储project,user,role,replication等的metadata数据.
  • adminserver:对应启动组件harbor-adminserver.是系统的配置管理中心,当ui和jobserver启动时,需要加载adminserver的配置
  • 大概就介绍到这里了,感谢您的阅读~

    最新文章

    1. 微信小程序(微信应用号)组件讲解
    2. css中的负边距
    3. 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象
    4. java使用sax解析xml
    5. java 静态方法和实例方法的区别(转)
    6. iOS 关于iphone6 和 iphone6 plus 的适配
    7. CF#335 Sorting Railway Cars
    8. SQL语句中如何把文件以二进制数组形式存入数据库
    9. [Java] 过滤流BufferedInputStream和BufferedOutputStream
    10. 4.C#基础篇-->变量
    11. linux C(hello world)
    12. ASP.NET项目从VS2008迁移至VS2010或2012编译不过的问题
    13. AJAX顺序输出
    14. hibernate 映射<三>一对一外键键关联
    15. nginx+uwsgi+flask搭建python-web应用程序
    16. 理解 Python 中的线程
    17. inform表单验证,正则表达式,用户名,身份证,密码,验证码
    18. C#:CsvReader读取.CSV文件并转换成DataTable
    19. “乐”动人心--2017年10款最佳音乐类APP设计盘点
    20. Raneto部署知识库平台&支持中文搜索

    热门文章

    1. java如何获取一个对象的大小【转】
    2. wps for linux显示系统缺失字体解决办法
    3. First ServiceStack Service
    4. linux java 和jmeter 环境变量配置文件笔记(原)
    5. Vue中Vuex的详解与使用(简洁易懂的入门小实例)
    6. Java基础:Java简介及安装配置(1)
    7. EntityFramework优化:第一次启动优化
    8. JDBC工具类完整版!
    9. Lodop打印表格带页头页尾 高度是否包含页头页尾
    10. cglib 代理实现