当前位置: 首页 > news >正文

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,说说他们两个在功能,服务对象,影响范围,等方面的异同点呢?

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

相关文章:

kubernetes入门到进阶(5)

目录 镜像仓库:怎么用好docker hub这个宝藏 什么是镜像仓库(Registry) 什么是docker hub 如何在docker hub上挑选镜像 docker hub上进行概念股命名规则是什么 该怎么上传自己的镜像 离线环境该怎么办 小结 镜像仓库:怎么用好docke…...

【字典树Trie】LeetCode-139. 单词拆分

139. 单词拆分。 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode&q…...

pytest常用的第三方插件介绍

本节介绍了如何安装和使用第三方插件。如果你想要编写自己的插件,请参阅“编写插件”。 通过pip可以轻松安装第三方插件: pip install pytest-NAME pip uninstall pytest-NAME如果已经安装了插件,pytest会自动找到并集成它,无需手…...

【经验】VSCode连接远程服务器(可以使用git管理、方便查看和编辑Linux源码)

1、查看OpenSSH Windows10通常自带OpenSSH不需要安装。 Windows10下检查是否已经安装OpenSSH的方法: 1)按下快捷键Win + X,选择Windows PoweShell(管理员) 2)输入以下指令: Get-WindowsCapability -Online | ? Name -like ‘OpenSSH*’ 3)如果电脑未安装OpenSSH,…...

机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?

一、 引言 乳腺癌是女性最常见的恶性肿瘤之一,也是全球范围内女性死亡率最高的癌症之一。据统计,每年全球有超过200万人被诊断为乳腺癌,其中约60万人死于该疾病。因此,乳腺癌的早期诊断和风险评估对于预防和治疗乳腺癌具有非常重要…...

MySQL学习笔记1: 数据库的简单介绍

目录 1. 数据库是什么2. 数据库这一类软件中的一些典型代表2.1. Oracle2.2. MySQL2.3. SQL Server2.4. SQLite (lite 轻量版) 3. 数据库的类型3.1. 关系型数据库3.2. 非关系型数据库 4. 总结 1. 数据库是什么 数据库是一类软件,这一类软件可以用来管理数据&#xf…...

【Docker】安装ELK(Docker Compose)

一、创建挂载目录 mkdir -p /docker/elk/elasticsearch/{plugins,data} mkdir -p /docker/elk/logstash 二、给目录授权 chmod 777 /docker/elk/elasticsearch/data 创建logstash配置文件 vim /docker/elk/logstash/logstash.conf input {tcp {mode => "server" h…...

【机器学习:欧氏距离 】机器学习中欧氏距离的理解和应用

【机器学习:欧氏距离 】机器学习中欧氏距离的理解和应用 距离公式二维更高的维度点以外的物体属性欧几里得距离的平方概括历史 在数学中,欧氏距离’是指欧氏空间中任意两点之间的直线距离。这种距离可以通过应用勾股定理来计算,利用两点的笛卡…...

系统安全及应用

1、基本安全措施 1.1、系统账号清理 在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生产的其他大量账号。除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允…...

Danil Pristupov Fork(强大而易用的Git客户端) for Mac/Windows

在当今软件开发领域,团队协作和版本控制是非常重要的方面。在这个过程中,Git成为了最受欢迎的版本控制工具之一。然而,对于Git的使用,一个好的客户端是至关重要的。 今天,我们要为大家介绍一款强大而易用的Git客户端—…...

最新GPT4.0使用教程,AI绘画,ChatFile文档对话总结+GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…...

【ARM 嵌入式 编译系列 7.2 -- GCC 链接脚本中 DEFINED 函数与 “AT>“ 符号详细介绍】

文章目录 GCC 链接脚本中 DEFINED 函数DEFINED() 函数> (放置在哪个区域)AT> (加载地址) (填充字节) 在链接脚本中,组合示例 GCC 链接脚本中 DEFINED 函数 在 ARM GCC 链接脚本(.ld 文件)中,DEFINED() 是一种内置函数&…...

Linux基础——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …...

国科大图像处理2024速通期末——汇总2017-2019、2023回忆

国科大2023.12.28图像处理0854期末重点 图像处理 王伟强 作业 课件 资料 一、填空 一个阴极射线管它的输入与输出满足 s r 2 sr^{2} sr2&#xff0c;这将使得显示系统产生比希望的效果更暗的图像&#xff0c;此时伽马校正通常在信号进入显示器前被进行预处理&#xff0c;令p…...

编程笔记 html5cssjs 026 HTML输入类型(2/2)

编程笔记 html5&css&js 026 HTML输入类型&#xff08;2/2&#xff09; 输入类型&#xff1a;date输入类型&#xff1a;color输入类型&#xff1a;range输入类型&#xff1a;month输入类型&#xff1a;week输入类型&#xff1a;time输入类型&#xff1a;datetime输入类型…...

Vue2 - 数据响应式原理

目录 1&#xff0c;总览2&#xff0c;Observer3&#xff0c;Dep4&#xff0c;Watcher5&#xff0c;Schedule 1&#xff0c;总览 vue2官网参考 简单介绍下上图流程&#xff1a;以 Data 为中心来说&#xff0c; Vue 会将传递给 Vue 实例的 data 选项&#xff08;普通 js 对象&a…...

基于华为云解析服务实现网站区域封禁

前言 中国大陆以外的网络攻击不断&#xff0c;个人博客时常遭受不明个人或组织的攻击&#xff0c;给网站的安全运行带来了巨大的风险&#xff0c;同时DDoS、CC攻击等还会消耗服务器的资源&#xff0c;站长可能需要因此支付高昂的服务器、CDN的流量费用。 因此&#xff0c;如果…...

在 Docker 中配置 MySQL 数据库并初始化 Project 项目

1. 文件准备 1.1. 添加 SQL 文件头部内容 每个 SQL 文件的头部需要添加以下内容&#xff1a; DROP DATABASE IF EXISTS xx_..; CREATE DATABASE xx_..; USE xx_..;1.2. 修改 AUTO_INCREMENT 在每个 SQL 文件中&#xff0c;将 AUTO_INCREMENT 修改为 1。 1.3. 插入机型 在 SQL…...

生活中的物理3——神奇陷阱(随机倒下的抽屉柜门)

1实验 材料&#xff1a;大自然&#xff08;风&#xff09;、抽屉门松掉的抽屉 实验 1、找一个大风的日子&#xff0c;打开窗户&#xff08;不要找下雨天&#xff0c;不然你会被你亲爱的嫲嫲KO&#xff09; 2、让风在抽屉面前刮过 3、你发现了什么&#xff1f;&#xff1f;&…...

数模学习day08-拟合算法

这里拟合算法可以和差值算法对比 引入 插值和拟合的区别 与插值问题不同&#xff0c;在拟合问题中不需要曲线一定经过给定的点。拟 合问题的目标是寻求一个函数&#xff08;曲线&#xff09;&#xff0c;使得该曲线在某种准则下与所 有的数据点最为接近&#xff0c;即曲线拟…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...