云原生之Docker镜像仓库

1. 前言

        同为虚拟化技术,Docker相对于VMWare有什么特点,或者最吸引我的特点?我认为最主要的是Docker Image技术,它让我们非常方便地把应用程序包和其依赖环境打包成一个Docker镜像文件,而且这个文件相对来说还非常小,一般就是几M到几十M,然后不管是开发环境、测试环境、预发布环境还是各个线上环境,只要环境里安装了Docker Engine就可以行为一致地运行起来,不需要去考虑烦人的目标系统的依赖问题。

        那么这个Docker镜像文件怎么管理?是不是手工直接放到文件系统里,每个环境的每台Linux服务器都去scp上传一次,如果这么做,运维人员就有巨大工作量了,所以需要一个集中存储镜像文件的系统,以及很方便的访问API接口服务,一次push推送进镜像管理系统,其它任何Linux服务器按API接口进行pull拉取即可。

        这样的系统叫作Docker镜像仓库,一般有公有仓库和私有仓库两种。

2. 公有仓库Docker Hub

        Docker Hub是Docker提供的一项服务,我们可以查找一般的公共容器镜像,比如基础的Linux系统镜像,这种镜像我们没有必要自己来制作。

        Docker Hub是世界上最大的容器镜像存储库,拥有一系列内容源,包括容器社区开发人员、开放源代码项目和独立软件供应商(ISV)在容器中构建和分发代码。

        官网:https://hub.docker.com/

        我们可以访问免费的公共存储库来存储和共享镜像,也可以为私有存储库选择订阅计划。

        Docker Hub提供以下主要功能:

  1. 仓库:推拉容器镜像。
  2. 团队和组织:管理对容器映像的私有存储库的访问。
  3. 官方镜像:提取并使用Docker提供的高质量容器镜像。
  4. Publisher-Images:拉取并使用外部供应商提供的高质量容器镜像。
  5. 构建:从GitHub和Bitbucket自动构建容器镜像,并将它们推送到Docker Hub。
  6. Webhooks:成功推送到存储库后触发操作,以将Docker Hub与其他服务集成。

        从仓库下载一个镜像:

 docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

        向仓库上传一个镜像:

docker image push [OPTIONS] NAME[:TAG] 

        如果我们在配置image参数时不设置域名和端口,则默认从Docker Hub上拉取镜像。当然互联网上还有一些其它镜像仓库可供使用,可以自己去搜索一下。 

3. 私有仓库Docker Registry

        基础镜像从Docker Hub拉取非常方便,但是我们自己业务系统构建生成的镜像文件,推送到Docker Hub存储起来供我们使用,有几个问题:

  1.  访问慢:毕竟是国外的服务,push和pull肯定不是每时每刻都速度快;
  2.  安全问题:企业的业务系统镜像文件,不可能推送到公共镜像仓库里去;
  3.  内网问题:如果是安全性要求高的内网环境,无法访问互联网,所以访问Docker Hub无从谈起。

        因此,我们需要自己建立一个镜像仓库,在自己的机房环境里,专门供自己业务平台使用,这就是私有仓库。

        Docker Hub上已经制作好了它的镜像registry和docker-registry-web,一个是私有镜像系统本身,一个是它的web管理系统。

        我们可以编写一个docker-compose.yaml来编排这两个服务进行安装和管理:

version: '3'services:api:image: registry:2.7.1restart: alwaysvolumes:- /data/registry:/var/lib/registryports:- 5000:5000web:image: hyper/docker-registry-web:v0.1.2restart: alwaysports:- 8080:8080environment:- REGISTRY_URL=http://api:5000/v2- REGISTRY_NAME=192.168.1.100:5000- REGISTRY_READONLY=false

        服务安装执行:

docker-compose up -d 

         docker push和docker pull默认是访问https协议的,我们内网一般采用http即可,需要修改/etc/docker/daemon.json:

{                                              
  "insecure-registries" : ["registry:5000"]  
}                                              

        修改配置文件之后,需要重启docker daemon:

sudo systemctl restart docker 

        上面用到了registry域名,我们需要在每个docker swarm节点上/etc/hosts设置域名指向192.168.1.100,或者使用CoreDNS进行配置就更好。 

        一切都准备好之后,我们就可以push和pull镜像文件到我们自己的私有镜像仓库了,只要在docker-compose.yml或其它命令参数里指定registry:5000,如:

image: registry:5000/backend-api:${VERSION}

        最后我们可以访问registry web进行查看和管理我们推送的镜像文件了:http://192.168.1.100:8080/

        界面实在是太简陋,就是显示出镜像文件列表和详情,就不截图说明了。

4. 私有仓库Harbor

        如果嫌弃Docker registry太简陋,需要更强大的管理能力,那就使用CNCF的Harbor系统,CNCF说明参见:Harbor | CNCF,Harbor官网:Harbor,具体的架构分析和安装使用,我们在另外单独的文章中再叙述。

5. 总结

        Docker镜像仓库是Docker镜像文件集中存储和管理的系统,我们发布的镜像文件可以很方便地push进镜像仓库,而容器集群任何节点都可以很方便地pull镜像仓库里的镜像文件下来进行部署。如果你的系统环境很小很简单,使用Docker registry就足够了,不然则使用Harbor吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套

随着城市化进程的加速,人们对城市生活质量的要求也越来越高。作为智慧城市建设的一项重要组成部分,多功能城市智慧驿站应运而生。它集合了信息技术、设计美学、结构工艺、系统集成、环保节能等多个亮点,将现代科技与城市生活相融合&#xff0…

qt for python创建UI界面

现在很多库都有用到python,又想使用QT creater创作界面,来使用。 1.使用的版本 使用虚拟机安装Ubuntu22.04,Ubuntu使用命令行安装qt,默认安装的是QT5,不用来回调了,就用系统默认的吧,不然安装工具都要费不少事情。pyt…

SimpleDateFormat为什么是线程不安全的?

目录 在日常开发中,Date工具类使用频率相对较高,大家通常都会这样写:这很简单啊,有什么争议吗?格式化后出现的时间错乱。看看Java 8是如何解决时区问题的:在处理带时区的国际化时间问题,推荐使用…

[力扣 Hot100]Day30 两两交换链表中的节点

题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 出处 思路 前两个结点先偷一手用交换val做,从链表第1…

vDPA资料/文档/博客 链接

virtio规范 https://docs.oasis-open.org/virtio/virtio/v1.1/virtio-v1.1.pdf https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/virtio-v1.1-cs01.html 文档 https://events19.linuxfoundation.org/wp-content/uploads/2017/12/Cunming-Liang-Intel-KVM-Forum-2018-V…

34 join优化

对性能影响比较大的是SQL的扫描行数和与MYSQL交互次数 NLJ过程 被驱动表的索引可以被用上 select * from t1 straight_join t2 on (t1.at2.a);t1和t2表a字段都有索引,执行过程如下,这里的扫描指的是引擎从磁盘读取记录数据 1.从t1表读取一行&#xf…

算法面试八股文『 模型详解篇 』

说在前面 这是本系列的第二篇博客,主要是整理了一些经典模型的原理和结构,面试有时候也会问到这些模型的细节,因此都是需要十分熟悉的。光看原理还不够,最好是能用代码试着复现,可以看看李沐老师深度学习的教材&#…

沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数

使用外部时钟模式2采集脉冲计数 使用外部触发模式 2 能在外部时钟引脚输入的每一个上升沿或下降沿计数。将 ECE 位置位时,将使用外部时钟源模式 2。使用外部时钟源模式 2 时,ETRF 被选定为 CK_PSC。ETR 引脚经过可选的反相器(ETP),分频器(ETPS)后成为 ETRP,再经过滤波…

自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类 文章目录 LTDMC.dll下载LTDMC.cs LTDMC.dll C#调用封装下载ICard.cs 运动控制卡接口Card.cs 运动控制卡抽象类CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类CardList.cs 总线卡列表封装 LTDMC.dll下载 最新…

人工智能|机器学习——基于机器学习的舌苔检测

代码下载: 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔…

C# 菜鸟级别有关于redis的使用

public IActionResult Index() { ConnectionMultiplexer _conn ConnectionMultiplexer.Connect("127.0.0.1:6379");//初始化 var database _conn.GetDatabase(7);//指定连接的库 0 RedisHelper redisHelper new Redi…

【react】react中和vue中的provide/inject、context写法示例

react写法 在 React 中,provide和inject的功能类似于 Vue.js 中的 provide和inject。它们都是用于跨组件层次传递数据的。 在 React 中,没有内置的 provide 和 inject 函数。但是,你可以使用 React 的 Context 来实现类似的功能。 Context…

基于STM32F407的coreJSON使用教程

目录 概述 工程建立 代码集成 函数介绍 使用示例 概述 coreJSON是FreeRTOS中的一个组件库,支持key查找的解析器,他只是一个解析器,不能生成json数据。同时严格执行 ECMA-404 JSON 标准。该库用 C 语言编写,设计符合 ISO C90…

grpc-go通过context传递额外数据

使用 ctx.Value 从 context 读取数据 // ValueFromIncomingContext returns the metadata value corresponding to the metadata // key from the incoming metadata if it exists. Key must be lower-case. // // # Experimental // // Notice: This API is EXPERIMENTAL and…

基于Java SSM框架实现生鲜食品o2o商城系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现生鲜食品o2o商城系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 生鲜食品o2o商城系统,主要的模块包括查看管理员;首页、个人中心、用户…

数学建模:BP神经网络(含python实现)

原理 BP 神经网络,也称为多层感知机(Multilayer Perceptron,MLP),是一种常见的神经网络模型,用于解决各种机器学习问题,包括分类和回归。BP 代表“反向传播”(Backpropagation&#…

领域驱动设计(Domain Driven Design)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、场景和要求二、领域模型关键词1.领域2.子域3.通用语言4.限界上下文5.领域模型6.实体和值对象7.聚合根8.领域服务9.领域事件 总结 前言 Domain Driven Desi…

备战蓝桥杯---动态规划(应用1)

话不多说,直接看题: 首先我们考虑暴力,用二维前缀和即可,复杂度为o(n^4). 其实,我们不妨枚举任意2行,枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来,相当于把一个矩阵压缩成…

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 上面是涉及到的源代码,而这次需要分析的就是78、79行的两个中断。首先,需要确认NVIC_SYSPRI2寄存器的作用。 进一…

阿里云香港服务器是cn2吗?怎么测试?

阿里云服务器是CN2线路吗?云服务器BGP多线精品网络线路是cn2,香港轻量应用服务器不是cn2。 如何测试是不是中国电信cn2网络线路?可以本地公网 mtr 该公网IP地址看下是否走的CN2线路: 163骨干网出国的最后一跳IP开头是202.97CN2 …