您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

图解DockerRegistry与CharMuseum

时间:2022-06-30 10:44:58  来源:  作者:程序员柒叔

前言

在裸机和虚机时代,(linux上)我们会使用yum+rpm来管理软件的安装包。到了云原生时代,我们使用“制品库+镜像库”来管理软件。区别在于前者直接安装在裸机或虚机上,而后者是运行在一个个容器中。

什么是镜像库?什么是制品库?

通常我们将应用制作成镜像,然后以容器的方式运行,这里的镜像类似于应用的“模板”,容器就是镜像的“运行实例”,要统一管理这些镜像,就需要“镜像仓库”。一个完整的应用或系统可以由多个基础容器组成(一般都会有前台应用、后端服务和底层关系型数据库),我们将这些基础容器的编排过程抽象成一批yaml文件,然后打包成“制品”,然后由K8S调度。要管理这些制品,就需要制品库。

镜像库和制品库,以及他们与K8S是什么关系呢?先看下方图片:

图解DockerRegistry与CharMuseum

图1 镜像库&制品库与K8S的关系

下面我们逐个分析图中的组件。

镜像仓库

镜像仓库分为2种:本地仓库和云仓库。

本地仓库(图1中local)

如果想把应用限制在公司内部使用,可以将这些镜像存储在本地仓库中。“本地仓库”这个概念是相对于云仓库的。

我们通过“Docker pull”拉取过来的镜像默认存放在本机的/var/lib/docker路径(可在配置文件中修改)下,但这并不是“本地仓库”,因为你pull过来的镜像还不能被其他节点共享。想要被共享,就需要创建本地仓库。我们可以使用docker官方提供的registry搭建本地仓库,搭建过程比较简单,拿来测试非常方便。

如果是企业级仓库,或者是对权限有要求的场景,可以使用 Habor 搭建本地仓库。它包含了registry,提供了Web管理界面(HaborUI),也集成了LDAP、定时调度等组件,功能全面,但是部署相对复杂,需要专业人士维护。这里给大家一张 Harbor架构 - 简书 图,其中的Docker Distribution就是registry。

图解DockerRegistry与CharMuseum

图2 Habor2.0架构

本地仓库搭建好后,需要在内网环境中每个节点上的/etc/docker/daemon.json中配置好仓库地址,就可以通过“docker pull”命令拉取本地仓库的镜像了。同样,开发人员编写好Dockerfile、生成镜像之后,就可以将镜像push到本地仓库local中(图1中上方“docker push”环节)。

 

云仓库(图1中Cloud Registry)

当我们的镜像可以对外公开时,就可以选择存储到云仓库中,如DockerHub、阿里云镜像仓库,等等。我们也可以从这些可信源拉取镜像到本地运行。这些仓库一般都是由专业公司维护的,随取随用。我们可以在本地仓库中进行设置,定期将云仓库中的镜像同步到本地仓库中。

如果想自己建立“云仓库”,与互联网上所有开发者共享,就可以在“本地仓库”基础上暴露服务端口即可。

注意:云仓库对安全性要求较高,要做好相应的安全、审核策略。

制品库

“制品”这个概念,我们可以理解为是一系列应用或组件的组合,是能支撑某个业务目标的完整解决方案。如前面提到的Habor,除了包含registry组件外,还包含了redis、Postgre、HaborUI等等组件,如果我们一个个组件单独部署,势必会存在一些集成问题,部署效率也低。在K8S时代,就为我们提供了相应的解决方案:使用K8S专用的包管理工具helm,就可以完成Habor的一键部署。简单来说 ,helm包是由一堆yaml文件组成,作用是以模板+参数的方式将K8S的各种资源和容器镜像进行编排,然后提交给K8S进行调度。当helm包很多时,就需要仓库对这些包进行管理。目前常用的helm仓库是chartmuseum,部署也很方便,在docker环境下一条指令即可完成部署,如:

docker run -d 
  --restart=always 
  --name helmRegistry 
  -p 8899:8080 
  -e DEBUG=1 
  -e STORAGE=local 
  -e STORAGE_LOCAL_ROOTDIR=/charts 
  -v /home/charts:/charts 
  chartmuseum/chartmuseum:latest

说明:建议参考专业的文档来完成部署,本文不赘述。

在实践中是如何使用的呢?

如图1所示(左下角“helm package”分支),当各组件的镜像都制作完成之后,开发人员就可以编写Chart.yaml和Value.yaml等文件,执行“helm package”生成Helm包 xxx.tgz。随后执行“helm cm-push”(也有helm push,这个是插件需要自己安装)将这个包推送到chartmuseum 中。此后,这个包就可以被多个K8S集群中共享。如Harbor的例子,集群A要安装Harbor,只需要在集群A的某个节点上执行“helm install”(前提是配置了helm仓库),这是节点就会到仓库中先拉取helm包,由K8S解析,根据这个包中指定的镜像信息,再到docker本地仓库中拉取镜像、启动。

这里给出Habor的helm包结构,帮助大家理解:

图解DockerRegistry与CharMuseum

harbor-helm-1.8.0

说明:

一些常用的开源组件都有helm包,不需要我们自行编写。

我们在项目中只需要仿照这些开源组件的helm包,编写业务应用的helm。

图中所示helm有v2和v3两个版本,区别是v2版本多了个Tiller服务端,由它负责与K8S进行交互。由于这种方式存在种种弊端,Helm3应运而生。它去掉了Tiller,由helm通过http协议直接与K8S的ApiServer交互,实现资源的调度。

HaborUI

最后再聊聊图1中的HaborUI。这是Habor自带的Web端,我们可以在这上面配置docker的镜像仓库和helm仓库,实现对镜像和制品库的展示和管理。

最后

阅读本文之后,你是否对镜像库和制品库,以及他们跟K8S之间的关系有了更深入的了解?



Tags:DockerRegistry   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
图解DockerRegistry与CharMuseum
前言在裸机和虚机时代,(Linux上)我们会使用yum+rpm来管理软件的安装包。到了云原生时代,我们使用“制品库+镜像库”来管理软件。区别在于前者直接安装在裸机或虚机上,而后者是运...【详细内容】
2022-06-30  Search: DockerRegistry  点击:(384)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(3)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(3)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(9)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(14)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条