4.docker镜像及相关命令

目录

1  查看所有镜像 docker images

1.1  基本用法

1.2  docker images -q 只显示所有镜像ID

1.3  docker images -f [筛选条件] -q 只显示符合条件的所有镜像ID

1.4  docker images --no-trunc 显示完整的IMAGE ID

1.5  docker images --format [模板] 使用模板

2  从源拉取镜像 docker pull

3  从源查找镜像 docker search

4  移除本地镜像 docker rmi

4.1  基本使用

4.2  强制删除 -f

5  将镜像保存为tar文件 docker save

6  将docker save生成的tar文件加载为镜像 docker load

7  查看镜像的元数据 docker inspect

8  查询镜像的多架构信息 docker manifest inspect

9  查看镜像历史记录(分层) docker history

10  通过dockerfile构建镜像 docker build

11  给镜像贴标签 docker tag


docker的镜像体积比较小,我们以mysql为例,在docker中mysql仅有516M。你正常安装一个mysql是要大于516M的

docker镜像可以分为4类

  • Docker Official Image :docker官方镜像。镜像的名称就是软件的名称,比如redis就叫redis
  • Verified Publish :已验证发布者发布的镜像。这种镜像不是docker自己做的,但是也是比较重量级的作者做的,比如阿里,华为这种。镜像的名称是 作者/软件的名称 比如 ubuntu/nginx
  • Sponsored OSS:由docker公司赞助的作者开发的仓库。oss的意思是open source software 镜像的名称是 作者/软件的名称 比如 linuxserver/nginx
  • 无认证仓库,这种仓库实际上就是我们自己写的仓库

可以使用第三方的镜像中心,我们在公司自己开发镜像的时候不会把资源发到官方的镜像中心中,而是会自己整一个。在第三方的镜像中心中镜像的命名一般为 域名(或IP)/上传镜像人的名字/软件的名称

docker镜像有一些松耦合(相互的关联性不强)的只读镜像层组成,Docker Daemon负责堆叠这些镜像层并将它们关联为一个统一的整体。

每个分层都是只读的,对分层的修改都是以新分层的形式出现,并不会破坏原分层内容。每个分层只记录变更内容,有利于节省储存空间。

采用分层可以实现不同镜像间的资源共享。比如redis与mysql可能都有A层。如果pull完redis再pull mysql的时候就不用再下载A层了(pull的时候会显示Already exists)。同时存储也只存储一个A层,这个A层既可以给redis使用也可以给mysql

每个镜像层由 镜像文件系统与镜像json文件 构成。镜像的文件系统(file system简称fs)由多个只读的镜像层组成,每层都完成了特定的功能,根据位置与功能可以分为基础镜像层与扩展镜像层

所有镜像的最下层都由一个基础镜像层,这个基础镜像层的文件系统称为根文件系统rootfs。rootfs是建立在Linux系统的文件引导系统bootfs之上(无论你的宿主机是什么,docker的容器都是linux系统,如果是非linux系统安装docker可以理解为宿主先虚拟出一个linux然后给docker的容器用)

基础镜像层之上的镜像层称为扩展镜像层。在Dockerfile中,每条指令都会生成一个扩展镜像层,所以尽可能在把多个指令合成一个指令来写

容器是 基础镜像层与扩展镜像层 之上可读写的容器层,对文件的任何更改只存在于容器层而不会影响镜像本身。如果你像修改镜像层的东西,那么会首先从镜像层复制一份到容器层,然后改复制后的东西。如果容器层与镜像层存储的内容发生冲突,容器层的内容会覆盖镜像层的内容

很多镜像都是多架构(比如amd,arm)的,以便能在多个架构中运行,比如redis。镜像中的部分层是专门处理架构的,在拉取镜像的时候,架构的信息会自动发送给镜像中心,镜像中心根据不同的架构给你返回不同的镜像,如果没有你正在使用的架构那么就会拉取失败

1  查看所有镜像 docker images

1.1  基本用法

如果没有下载过镜像就是这样的

加载过就像就会把相关的信息显示出来

  • 如果一个镜像没有REPOSITORY与TAG我们称这个镜像为虚悬镜像(Dangling Image)
  • 镜像默认是按照 镜像作者的创建时间(不是你拉取的时间)排序的

可以追加名称筛选出想要的信息,比如我想在只想看mysql相关的信息,那么就写 docker images mysql

docker images可以配合参数,应用场景常为批量处理镜像的时候,比如我现在想删除所有的镜像我可以输入 docker rmi $(docker images -q)

$(docker images -q)作为一个变量,意思是全部镜像的ID

1.2  docker images -q 只显示所有镜像ID

1.3  docker images -f [筛选条件] -q 只显示符合条件的所有镜像ID

比如 docker images -f since=mysql:latest -q 筛选出晚于 mysql:latest的CREATED 的镜像ID

-f可以跟的筛选条件常用的有

  • dangling=true 筛选出所有虚悬镜像
  • since=mysql:latest 筛选出晚于 mysql:latest的CREATED 的镜像。比如镜像A的CREATED的创建时间是1 months ago,镜像B:latest的CREATED的创建时间是2 months ago,镜像C的CREATED的创建时间是3 months ago,如果写 since=B:latest 那么就会只显示A镜像(不会显示B,也不会显示C)
  • before=mysql:latest 筛选出早于 mysql:latest的CREATED 的镜像。比如镜像A的CREATED的创建时间是1 months ago,镜像B:latest的CREATED的创建时间是2 months ago,镜像C的CREATED的创建时间是3 months ago,如果写 before=B:latest 那么就会只显示C镜像(不会显示B,也不会显示A)

reference也是-f的筛选条件这个参数只会查官方的镜像,所以这个命令应用不多

  • reference=*:latest 可以查到所有tag为latest的镜像
  • reference=*llo* 可以查看 RESPOSITORY或TAG中含有llo的镜像

1.4  docker images --no-trunc 显示完整的IMAGE ID

IMAGE ID实际上就是digest

1.5  docker images --format [模板] 使用模板

比如 docker images --format {{.Repository}} 就是只显示Repository这一列

我们再做个例子 docker images --format {{.Repository}}:{{.Tag}}:{{.Size}}

2  从源拉取镜像 docker pull

比如我想从源拉一个最新的mysql,那你就输入docker pull mysql 拉取的过程是这样的

  • 默认拉取latest版本
  • 如果你要拉取指定的版本,那你就写 docker pull mysql:[指定的版本]
  • 对于非官方镜像也可以带用户名比如 docker pull suyu/mysql:[指定的版本]
  • 也可以使用digest值 比如 docker pull openanolis/mysql@sha256:78b2c0e8da2a374094d20aa521ca483c5b7c41de4b6f62fecf67f7582e9aa7d7 用digest值下载之后的镜像默认情况下没有tag
  • 如果要拉取的镜像在源上没有会响应not found

拉下来之后是这样的

  • Digest表示的是镜像的摘要,在下载之前会将要下载的内容与之前下载的内容进行比对(如果之前下载过)。如果比对结果相同就不进行下载,如果比对结果不同再进行下载。digest实际上就是IMAGE ID。每一个镜像都有一个长度为64位的16进制字符串摘要。本质上摘要是一个哈希值,具体来说是Content Hash(内容散列)。只要镜像内容发生了变更,digest也会发生改变。Docker默认采用的Hash算法是SHA256,SHA的意思是 Secure Hash Algorihm 安全哈希算法。SHA256本身是一个256位的二进制值,在Docker中改为了16进制表示,就变成了长度为64位的字符串
  • Digeset可以让客户端与镜像中心传递镜像的时候可以放置信息丢失。比如A的镜像digist是123,那么客户端会先把123发给镜像中心,之后再把镜像传给镜像中心,之后镜像中心会校验一遍传过来的镜像,如果校验结果是123证明镜像没有信息丢失,如果不是123,那么会自动重新传输
  • 为了节省带宽,pull或push的时候镜像会被压缩,之后传输。压缩后的镜像与压缩前的镜像digist是不同的。为了解决这个问题Docker采用了分发散列值(Distribution Hash),分发散列值在镜像压缩后立即计算。客户端与镜像中心使用分发散列值校验镜像

每一个pull complete代表这个镜像的每一个层,每一次下载的时候层都是有顺序的,第一层是72a6,第二层是9361。它是一层一层压上去,层太多了我就不每个都画上了,我们可以大概像下面图一样理解,一层一层往上盖,e043是最后一层

查看镜像列表可以发现mysql

可以追加一些参数,比如

  • docker pull -a zookeeper 这个就是把zookeeper镜像的所有版本都拉到你本地
  • docker pull -q zookeeper 这个是静默模式,静默模式就是在终端上不打印任何的东西

比如说我想找 redis 这个镜像,排序是根据综合得分排序的

  • NAME 镜像名称
  • DESCRIPTION 镜像描述
  • STARS 收藏数
  • OFFICIAL 写了OK的是官方的镜像
  • AUTOMATED 写了OK的是通过dockerfile自动构建的镜像。如果dockerfile有变动AUTOMATED为OK的镜像也会变动。AUTOMATED写了OK的可以理解为也是可以被信任的镜像,但不是官方自己做的

docker search可以配合参数比如-f是筛选

  • docker search -f is-official=true redis 这个可以筛选出redis的官方镜像
  • docker search -f is-automated=true redis 这个可以筛选出redis通过dockfile自动化构建的镜像
  • docker search -f stars=100 redis 这个可以筛选出redis的stars值大于100的镜像

--limit 是显示多少条数据,默认为25

  • docker search --limit=5 redis 只显示redis的前5条数据

--no-trunc 是不删减显示的信息,基本上只有描述比较长,会被删减一点

  • docker search --no-trunc redis 显示每一个redis的完整信息

--format 是按照模板显示

  • docker search --format {{.Name}} 只显示redis这一列

4  移除本地镜像 docker rmi

4.1  基本使用

比如我想删除mysql:latest这个镜像,那么就输入 docker rmi mysql:latest

  • 如果不写tag默认是latest,删除的时候建议写全了
  • 也可以写IMAGE ID,比如 docker rmi 3218b38490ce

4.2  强制删除 -f

如果你有容器正在使用镜像,你只写rmi是删除不了的

加上 -f 就能删了

镜像没有了,但是容器还有

5  将镜像保存为tar文件 docker save

保存可以保存一个或者多个,我们目前有两个镜像

我们可以将这两个镜像保存为一个tar文件,输入 docker save -o /home/suyu/my.tar mysql:latest hello-world:latest

  • 也可以分开保存

也可以这样写,效果与上面的命令相同

tar文件大小与所保存的镜像大小之和基本一致

6  将docker save生成的tar文件加载为镜像 docker load

我首先把这两个镜像存为了tar文件

然后我删掉这两个镜像

之后我进行加载,输入 docker load -i my.tar

加载完成后是这样的

我们查询所有镜像,发现与保存前一致(包括镜像ID)

也可以这样加载 docker load < my.tar 效果一样

7  查看镜像的元数据 docker inspect

比如docker inspect mysql

8  查询镜像的多架构信息 docker manifest inspect

比如 docker manifest inspect redis

  • 这个是从源查询的,所以查的时候会慢一些
  • manifest本身一个文件,如果这个镜像不支持多架构就没有这个文件,没有这个文件执行 docker manifest inspect 就查不了。有的镜像支持多架构,但也没有manifest这个文件,那也查不了。

9  查看镜像历史记录(分层) docker history

比如我现在要查看 a7c6 这个镜像的历史记录

10  通过dockerfile构建镜像 docker build

我在/home/suyu下有Dockerfile这个文件,还有一个可执行文件hello,可执行文件在终端执行后会打印hello world

  • 可执行文件是通过gcc的静态编译编译出来的

内容如下

之后进入Dockerfile所在的目录,执行 docker build -t [镜像名] .

  • 注意最后有个点儿,这个点儿代表的就是Dockerfile
  • 如果不写tag默认为latest

之后执行docker images就可以看到构建的镜像了

运行这个镜像可以成功执行hello

11  给镜像贴标签 docker tag

比如我现在想把 suyu_hello_world:latest 改为 111:222

那么我可以执行 docker tag suyu_hello_world:latest 111:222

添加完 111:222 之后发现之前的 suyu_hello_world:latest 还在,这个时候我们删掉它就可以了

  • 注意不要用ID删除

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

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

相关文章

十问ByteHouse:如何基于ClickHouse玩转向量检索?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 向量检索被广泛使用于以图搜图、内容推荐以及大模型推理等场景。随着业务升级与 AI 技术的广泛使用&#xff0c;用户期望处理的向量数据规模越来越大&#xff0c;对…

Java智慧工地数字化云平台源码(SaaS模式)

智慧工地是智慧城市理念在建筑工程行业的具体体现&#xff0c;智慧工地解决方案是建立在高度信息化基础上一种支持人事物全面感知、施工技术全面智能、工作互通互联、信息协同共享、决策科学分析、风险智慧预控的新型信息化手段。围绕人、机、料、法、环等关键要素&#xff0c;…

056:vue工具 --- CSS在线格式化

第056个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

SimpleFOC核心代码,解决Id一直为正 无法控为0

注&#xff1a;&#xff08;我这个是用simulink仿真做的SimpleFOC&#xff0c;因此代码是m语言的&#xff0c;在stm32可以改成C的&#xff0c;这两种基本差不多&#xff0c;搭建的SimpleFOC仿真下载链接&#xff1a;https://download.csdn.net/download/qq_35239859/88642607?…

虚幻学习笔记18—C++委托(多播)和事件

一、前言 委托分单播和多播&#xff0c;多播就是可以绑定多个回调函数&#xff0c;然后一次性执行。这样也可以理解为啥多播没有返回值&#xff0c;多个回调函数执行后返回哪一个都是问题啊。而事件呢官方官方文档说法是“对于事件而言&#xff0c;只有定义事件的类才能调用 Br…

用python编写一个对列表降序排列的方法。 定义函数des(),该函数接收一个整数列表作为参数。 在函数内部,实现降序排序。

编写一个对列表降序排列的方法。 定义函数des()&#xff0c;该函数接收一个整数列表作为参数。 在函数内部&#xff0c;实现降序排序。 然后&#xff0c;返回排序后的列表。 最后&#xff0c;在函数外部打印排序后的列表。 以下是一个使用Python编写的对列表降序排列的方法的示…

后端笔记之gin框架学习

gin框架学习 1. 使用脚手架搭建gin框架2. 应用框架3. 路由管理4.自定义中间件的使用5. 通过中间件设置路由权限校验1. 自定义校验2. 配置跨域3. 使用jwt进行tokn校验 6. 接口入参获取和绑定2. 参数校验3. protobuf 7. 集成mysql数据库1. gorm使用 1. 使用脚手架搭建gin框架 gi…

MapReduce和Yarn部署+入门

看的黑马视频记的笔记 目录 1.入门知识点 分布式计算&#xff1a; 概念&#xff1a; 两种模式&#xff1a; MapReduce&#xff08;分布式计算&#xff0c;分散汇总模式&#xff09; 概念 执行原理 注&#xff1a; Yarn&#xff08;分布式资源调度&#xff09; 概述 Y…

VS Code配置Go语言开发环境

提示&#xff1a;首先这是一个新型语言&#xff0c;最好把vscode更新到最新版。 1&#xff1a;去官网下载Go语言编译器&#xff0c;之后配置到系统环境中&#xff0c;能看到版本就行。 2&#xff1a;创建一个文件夹&#xff0c;存放go的工具文件&#xff0c;我的在D:\GoFile\G…

【数据分析之Numpy】Numpy中复制函数numpy.repeat()与numpy.tile()的使用方法及区别

一、简介 numpy.repeat()与numpy.tile()都是Numpy库中的复制函数&#xff0c;用于将数组中的元素重复指定的次数。 numpy.repeat()函数接受三个参数&#xff1a;要重复的数组、重复的次数和重复的轴。 numpy.tile()函数接受两个参数&#xff1a;要重复的数组和重复的次数。 二…

elasticsearch简单相关操作

查看索引 GET _cat/indices //获取所有的index GET account发送post不带id新建数据 POST user/_doc/ {"name":"bobby","compamy":"imooc" }如果post带id就和put一样的操作了&#xff0c; put是不允许不带id的 post _create 没有就…

【前端】vscode 相关插件

一 插件&#xff1a; 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码&#xff0c;如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…

干涉光学测试导论

1.用于光学测试的基本干涉仪 2。相移干涉术 3。专业光学测试 4。长波长干涉术 5。非球面试验 6。表面微观结构的测量 7。绝对测量 8。结束语 第1部分-光学测试用基本干涉仪 (1)双光束干涉 (2)菲佐干涉仪和特维曼-格林干涉仪 (3)测试平面和球面的基本技术 (4)球面的基本…

maui中实现加载更多 RefreshView跟ListView(2)

一个类似商品例表的下拉效果&#xff1a; 代码 新增个类为商品商体类 public class ProductItem{public string ImageSource { get; set; }public string ProductName { get; set; }public string Price { get; set; }}界面代码&#xff1a; <?xml version"1.0&quo…

通过费用流中的贪心来保证计数正确性:P4249剪刀石头布

https://vj.imken.moe/contest/598718#problem/K 三元环数量尽量多&#xff0c;也就是非三元环数量尽可能少。非三元环的充要条件是存在一个点度数为2&#xff0c;而每条边可以给一个点一个度数&#xff0c;然后就变成了经典网络流问题。 但是&#xff0c;对于一个点&#xf…

计算机与自动医疗检查仓:技术革新引领医疗未来

计算机与自动医疗检查仓&#xff1a;技术革新引领医疗未来 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;已经成为现代社会不可或缺的一部分。它们的应用领域日益扩展&#xff0c;从简单的日常任务到复杂…

数据结构--图

树具有灵活性&#xff0c;并且存在许多不同的树的应用&#xff0c;但是就树本身而言有一定的局限性&#xff0c;树只能表示层次关系&#xff0c;比如父子关系。而其他的比如兄弟关系只能够间接表示。 推广--- 图 图形结构中&#xff0c;数据元素之间的关系是任意的。 一、图…

基于ssm的航班订票管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对航班订票信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

基于PaddleOCR一键搭建文字识别和身份证识别web api接口

前言 通过这篇文章【基于PaddleOCR的DBNet神经网络实现全网最快最准的身份证识别模型】开发的身份证识别模型&#xff0c;还无法进行部署应用&#xff0c;这篇文章就已经开发好的代码如何部署&#xff0c;并如何通过api的接口进行访问进行讲解。 项目部署 以windows系统为例&…