kubernetes入门到进阶(5)

目录

镜像仓库:怎么用好docker hub这个宝藏

什么是镜像仓库(Registry)

什么是docker hub

如何在docker hub上挑选镜像

docker hub上进行概念股命名规则是什么

该怎么上传自己的镜像

离线环境该怎么办

小结


镜像仓库:怎么用好docker hub这个宝藏

好,我们继续来说一下往后的章节,上章节里面呢,我们学习了dockerfile和docker build的用法,知道了如何创建自己的镜像,那么镜像文件应该如何管理呢,具体来说,应该如何存储,检索,分发,共享镜像呢?不解决这些问题,我们容器化应用还是无法顺利地实施。

今天,我们来谈一下这个话题,聊聊什么是镜像仓库,还有该怎么用好镜像仓库。

什么是镜像仓库(Registry)

之前我们已经用过docker pull命令拉取镜像,也说过有一个镜像仓库(Registry)的概念,那到底什么是镜像仓库呢?

还是来看看docker的官方架构图:

图里右边的区域就是镜像仓库,术语叫Registry,直译是所有镜像的Repository都在这里登记保管,就像是一个巨大的档案馆。

然后我们再来看看左边的docker pull,虚线显示了它的工作流程,先到docker daemon,再到Registry,只有当Registry里存有镜像才能真正把他下载到本地。

当然了,拉取镜像只是镜像仓库最基本的一个功能,他还会提供更多的功能,比如上传,查询,删除等等,是一个全面的镜像管理服务站点。

你也可以把镜像仓库比成手机上的应用商店,里面分门别类放了许多容器化的应用,需要什么去找一下就行了,有了它,我们使用镜像才能免除后顾之忧。

什么是docker hub

不过,你应该没有注意到,在使用docker pull 获取镜像的时候我们并没有明确指定镜像仓库,在这种情况下,动车可就会使用一个默认的镜像仓库,也就是大名鼎鼎的docker hub 

https://hub.docker.com

docker hub是docker公司搭建的官方registry服务,创立于2014年6月,和docker 1.0同时发布,他号称是世界上最大的镜像仓库,和Git hub一样,几乎成为了容器世界的基础设施。

docker hub里面不仅有docker自己打包的镜像,而且还对公众免费开放,任何人都可以上传自己的作品,经过这8年的发展,docker hub已经不再是一个单纯的镜像仓库了,更应该说是一个丰富而繁荣的容器社区

你可以看看下面的这张截图,里面列出的都是下载量超过十亿次的最受欢迎的应用程序,比如nginx,MongoDB,node.js,Redis,openJDK,等等,显然,把这些容器化的应用引入到我们自己的系统里,就像是站在了巨人的肩膀上,一开始就会有一个高水平的起点

但和Github,App Store一样,面向所有人公开的docker hub也有一个不可避免的缺点,就是良莠不齐。

在docker hub搜索框里输入关键字,比如NGINX,MySQL,她立即就会给出几百上千个搜索结果,有点乱花迷人眼的感觉,这么多镜像,应该如何挑选出最适合自己的呢?下面我们来说说自己在这方面的一些经验。

如何在docker hub上挑选镜像

首先,你应该知道,在docker hub上有官方镜像,认证镜像,和非官镜像的区别

官方镜像是指docker公司官方提供的高质量镜像,GitHub - docker-library/official-images: Primary source of truth for the Docker "Official Images" program

都经过了严格的漏洞扫描和安全检查,支持x86,arm64等多种硬件架构,还具有清晰易读的文档,一般来说使我们构建镜像的首选,也是我们编写dockerfile的最佳范例

官方镜像目前大概100多个,基本上囊括了现在的各种流行技术,下面就是官方的nginx镜像网页截图:

你会看到,官方镜像会有一个特殊的Official image的标记,这就表示这个镜像经过了docker公司的认证,有专门的团队负责审核,发布,更新,质量上绝对可以放心。

第二类是认证镜像,标记是Verified publisher,也就是认证发行商,比如Bitnami,Rancher,ubuntu等,他们都是颇具规模的大公司,具有不逊于docker公司的实力,所以就在docker hub上开了个认证账号,发布自己打包的镜像,有点类似我们微博上的大V。

这些镜像有公司背书,当然也很值得信赖,不过他们难免会有戴上一些各自公司的烙印,比如Bitnami的镜像就统一以minideb为基础,灵活性上比docker官方镜像略差,有的时候也许会不符合我们的需求。

除了官方镜像和认证镜像,剩下的就都属于非官方镜像了,不过这里面也可以分出两类。

第一类是“半官网”镜像,因为成为Verified publisher 是要给docker公司交钱的,而很多公司不想花这个冤枉钱,所以只在docker hub上开了公司账号,但并不加入认证

这里我以openresty为例,看一下它的docker hub页面,可以看到显示的是openresty官方发布的,但并没有经过docker正式认证,所以难免就会存在一些风险,有被冒名顶替的可能,需要我们在使用的时候留心鉴别一下,不过一般来说,这种办官方镜像也是比较可靠的

第二类就是纯粹的民间镜像了,通常是个人上传到docker hub的,因为条件有限,测试不完全甚至没有测试,质量上难得以保证,下载的时候需要小心谨慎。

除了查看镜像是否为官方认证,我们还可以再结合其他的条件来判断镜像质量是否足够好,做法和GitHub差不多,就是看它的下载量,星数,还有更新历史,简单的来说就是好评数量

一般来说下载量是最重要的参考依据,好的镜像下载量通常都在百万级别(超过1M)而有的镜像虽然也是官方认证,但缺乏维护,更新不及时,用的人很少,星数,下载数都寥寥无几,那么还是应该选择下载量最多的镜像,通俗来说就是随大流

下面这张截图就是openresty在docker hub上的搜索结果,可以看到,有两个认证发行商的镜像(Bitnami , IBM),但是下载量都很少,还有一个民间镜像下载量虽然超过了1M,但更新时间是三年前,所以毫无疑问,我们应该选择排在前三位,但下载量超过10m,有360多个星的半官方镜像

看了这么多docker hub上的镜像,你一定注意到了,应用都是一样的名字,比如都是NGINX,redis,openresty,该怎么区分不同作者打包出的镜像呢?

如果你很熟悉GitHub,就会发现docker hub也使用了同样的规则,就是用户名/应用名的形式,比如bitnami/nginx、ubuntu/nginx、rancher/nginx等等

所以,我们在使用docker pull下载这些非官方镜像的时候,就必须把用户名也带上,否则默认就会使用官方镜像:

docker pull bitnami/nginx

docker pull ubuntu/nginx 

docker hub上进行概念股命名规则是什么

确定了这个镜像还不够,因为镜像还会有许多不同的版本,也就是标签(tag)

直接使用默认的latest虽然简单方便,但在生产环境里是一种非常不负责任的做法,会导致版本不可控,所以我们还需要理解dockerhub标签命名的含义,才能挑选出最适合我们自己的镜像版本。

下面我就那官方的redis镜像作为例子,解释一下这些标签都是什么意思

通常来说,镜像标签的格式是应用的版本号加上操作系统,

版本号你应该比较了解吧,及把他那都是主版本号+次版本号+补丁号的形式,有的还会在正式发布前出rc版(候选版本,release candidate),而操作系统的情况略微复杂一些,应为各个Linux发型版的命名方式太多了

alpine,centos的命令比较简单明了,就是数字的版本号,像这里的alpine3.15.而ubuntu、Debian则才用了代号的形式,比如ubuntu.18.04是bionic,ubuntu20.04是focal,Debian9是stretch,Debian10是buster,Debian11是bullseye

另外,有的标签还会加上slim,fat,来进一步表示这个镜像的内容是经过精简的,还是包含了较多的辅助工具,通常slim镜像会比较小。运行效率高,而fat镜像会比较大,适合用来开发调试

下面我就列出几个标签的例子来说明一下。

- nginx:1.21.6-alpine,表示版本号是1.21.6,基础镜像是最新的Alpine。

- redis:7.0-rc-bullseye,表示版本号是7.0候选版,基础镜像是Debian 11。

- node:17-buster-slim,表示版本号是17,基础镜像是精简的Debian 10。

该怎么上传自己的镜像

现在,我想你应该对如何在docker hub上选择镜像有了比较全面的了解,那么接下来的问题就是我们用dockerfile创建的镜像该如何上传到docker hub上呢?

这件事其实一点也不难,只需要4个步骤就能完成

第一步,你需要在docker hub上注册一个用户,这个就不必再多说了

第二步,你需要在本机上使用docker login命令,用刚才注册的用户名和密码认证身份登录,像这里就用了我的用户名chronolaw

第三步很关键,需要使用docker tag 命令,给镜像改成带用户名的完整名字,表示镜像是属于还整个用户的,或者简单一点,直接用docker build -t在创建镜像的时候就起好名字,这里我就用上次章节里的ngx-app作为例子,给他改名成chronolaw/ngx-app:1.0

docker tag ngx-app chronolaw/ngx-app:1.0

第四步,用docker push 把这个镜像推上去,我们的镜像发布工作就大功告成了:

docker push chronolaw/ngx-app:1.0

你还可以登录docker hub网站验证一下镜像发布的效果,可以看到他会自动为我们生成一个页面模板。,里面还可以进一步丰富完善,比如添加描述信息,使用说明等等;

现在你就可以把这个镜像的名字(用户名/应用名:标签)告诉你的同事,让他去用docker pull 下载部署了

离线环境该怎么办

使用docke hub来管理镜像的确是非常方便,不过有一种场景它却是无法发挥作用,那就是企业内网的离线环境,连不上外网,自然也就不能使用docker push。docker pull来同送拉取镜像了

那这种情况有没有解决办法呢?

方法当然有,而且有很多,最佳的方法就是在内网环境里仿造docker hub,创建一个自己的私有registry服务,有他来管理我们的镜像,就想我们自己搭建gitlab做版本管理一样

自建registry已经有很多成熟的解决方案,比如docker registry,还有CNCF Harbor,不用使用他们还需要一些目前没有讲到的知识,步骤也有点繁琐,所以我会在后续的章节里再介绍

下面我们说一说存储,分发镜像的一种笨方法,虽然比较原始,但简单易行,可以作为临时的应急手段

docker提供了save和load这两个镜像归档命令,可以把镜像导出成压缩包,或者从压缩包导入docker,而压缩包是非常容易保管和传输的,可以联机拷贝,FTP共享,甚至存在U盘上随身携带

需要注意的是,这两个命令默认使用标准流作为输入输出(为了方便linux管道操作)所以一般会用-o、-i参数来使用文件的形式,例如:

docker save ngx-app:latest -o ngx.tar

docker load -i ngx.tar

小结

好了,今天我们一起学习了镜像仓库,了解了docker hub的使用方法,整理一下要点方便你加深理解:

1-镜像仓库(registry)是一个提供综合镜像服务的网站,最基本的功能是长传和下载

2-docker hub是目前最大的镜像仓库,拥有很多高质量的镜像和,尚明的镜像非常多,选择的标准有官方认证,下载量,星数等,需要综合评估

3-镜像也有很多版本,应该根据版本号和操作系统仔细确认合适的标签

4-在docker hub注册之后就可以上传自己的镜像,用docker tag打上标签再用docker push推送

5-离线环境可以自己搭建私有镜像仓库,或者使用docker save把镜像存成压缩包,再用docker load从压缩包恢复成镜像

最后我还是提问几个问题,留给大家来思考:

1-很多应用,比如nginx,redis,go,都已经有了docker官方镜像,为什么其他公司(Bitnami,Rancher)还要重复劳动,发布自己打包的镜像呢?

2-你能否对比一下GitHub和docker hub,说说他们两个在功能,服务对象,影响范围,等方面的异同点呢?

记得在留言区参与讨论哦,我看到后会第一时间回复,我们下个章节再见~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端素材】bootstrap4实现在线蛋糕甜品店网页Tehzeeb

一、需求分析 在线蛋糕甜品店的网站通常包含以下几个方面的内容和功能: 主页:网站的主页是用户进入网站的第一个页面,通常会展示一些精选蛋糕和甜品的图片和介绍,以吸引用户的注意力。主页还可能包含一些特别促销或最新的产品信息…

开源拖拽表单设计器好用吗?

很多客户朋友会对开源拖拽表单设计器产生浓厚兴趣,因为不知道它是怎么用的,好不好用,所以经常会有粉丝朋友询问我们关于开源拖拽表单设计器的功能、作用以及优势特点。在现代化职场办公中,传统的表单制作存在一定的缺点和遗憾&…

VBA技术资料MF105:添加一系列新的工作表

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

海外社媒运营为什么需要选择优质IP代理?

跨境电商卖家尤其需要关注海外社媒运营,想要更好地运营Instagram、Facebook、TikTok 或 Twitter等,挖掘社媒潜力需要采取战略方法,而社交媒体IP代理在这一活动中发挥着至关重要的作用,下面为你详细介绍。 一、社交媒体代理IP及其运…

基于WebRTC技术的EasyRTC视频云服务系统在线视频客服解决方案

一、需求分析 随着互联网技术的发展,视频客服也成为服务行业的标配体验,基于WebRTC实时通信技术,客服人员与用户可以建立实时双向的视频交互与沟通。借助视频客服功能可以更加直观地了解用户的需求,提高沟通效率,并帮…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法,它在程序控制流图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…

小梅哥Xilinx FPGA学习笔记22——ip核之FIFO

目录 一:章节说明 1.1 FIFO IP简介 1.2 FIFO Generato IP 核信号框图 1.3 实验任务 二:FIFO 写模块设计 2.1 简介 2.2 模块框图 2.3 模块端口与功能描述 2.4 写模块代码 三 FIFO 读模块设计 3.1 简介 3.2 模块框图 3.3 模块端口与功…

STM32-04-STM32时钟树

STM32时钟树 什么是时钟? 时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。(时钟是单片机的脉搏,搞懂时钟走向及关系,对单片机使用至关重要)。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

Go采集1688网站数据对比商品价格

最近看了下多多和1688的一些商品价格,发现好多店铺都是无货源拿货一件发货,这就导致层层叠加价格翻了不知道几倍,真所谓多花钱办的事还是一样,因此,今天我就通过一个爬虫程序监控对应商品价格,了解行业龙头…

Python从入门到网络爬虫(OS模块详解)

前言 本章介绍python自带模块os,os为操作系统 operating system 的简写,意为python与电脑的交互。os 模块提供了非常丰富的方法用来处理文件和目录。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强…

HCIA-Datacom题库(自己整理分类的)_15_VRP平台多选【9道题】

1.VRP操作平台存在哪些命令行视图? 用户视图 接口视图 协议视图 系统视图 2.以下哪些存储介质是华为路由器常用的存储介质 SDRAM NVRAM Flash Hard Disk SD Card 解析:Hard Disk是硬盘,一般网络设备没有。 3.VRP支持通过哪几种方式对路由器…

Influxdb2修改管理员密码

通过恢复管理员令牌来重置InfluxDB2管理员的密码 1.找到数据库的配置文件 一般为config.json 2.配置文件的的blod文件配置 3.在这个混合文本和二进制json文件中搜索已知的用户名或token之类的字符串。 例如: "id":"0bd73badf2941000","…

DES算法(Python实现)

一、具体描述 基于计算机高级语言(如C语言)实现DES算法 二、名词术语与相关知识 DES算法 DES(Data Encryption Standard)是一种对称加密算法,被广泛应用于数据加密领域。它使用64位密钥和64位明文,通过…

2707. 字符串中的额外字符

牛客网:https://leetcode.cn/problems/extra-characters-in-a-string/description/?envTypedaily-question&envId2024-01-09 官方解题思路为动态规划或字典数优化; 这里引入Up主的解题思路(递归) 哔哩哔哩:https…

【书影观后感 十五】被讨厌的勇气

年底的闲暇时间阅读了此书,书虽然是老婆买的,但她也是一页没看,便宜我了。都说哲学是用来回答人生问题的,我想慢慢的是有了一些这方面的体悟了。这里摘一些书中的经典观点吧,大多数中国90后的一代可能都遇到过类似的问…

c++实现支持动态扩容的栈(stack)

1.在栈容量满时自动扩容: 支持自动扩容栈实现: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_hpp #include <stdio.h> #include <string.h> //栈实现 //1.入栈 //2.出栈 //3.空栈 //4.满栈 …

Python算法例34 寻找丢失的数

1. 问题描述 给一个由1~n的整数随机组成的一个字符串序列&#xff0c;其中丢失了一个整数&#xff0c;本例将找到它。 2. 问题示例 给出n20&#xff0c;str19201234567891011121314151618&#xff0c;丢失的数是17。 3. 代码实现 def find_missing_number(n, string):nums…

PLSQL启动错误,缺失oci.dll文件如何解决

Oracle数据库启动的时候报错&#xff0c;无法打开 报错显示缺失dll文件 第一步&#xff1a;在网上找到可靠的下载文件地址&#xff1a; 官方网站下载对应版本的oci.dll 链接如下&#xff1a;https://www.oracle.com/database/technologies/instant-client/winx64-64-downloa…

2023年,To B资本航船走向哪了?

国内To B领域在去掉泡沫、结束资本狂欢之后&#xff0c;投资决策愈加理性。但与此同时&#xff0c;下滑的步伐正在放慢&#xff0c;交易数量和金额的降低逐渐放缓&#xff0c;市场逐渐走向稳定。 作者|斗斗 编辑|皮爷 出品|产业家 2023年&#xff0c;在一众业内人士的眼中&…

Java后端开发——SSM整合实验

文章目录 Java后端开发——SSM整合实验一、常用方式整合SSM框架二、纯注解方式整合SSM框架 Java后端开发——SSM整合实验 一、常用方式整合SSM框架 1.搭建数据库环境&#xff1a;MySQL数据库中创建一个名称为ssm的数据库&#xff0c;在该数据库中创建一个名称为tb_book的表 …