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


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 这个镜像的历史记录

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

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

相关文章

玩转Docker(六):数据挂载与共享

文章目录 〇、Docker的两种存放数据的资源1.Storage Driver2.Data Volume3.使用场景 一、使用Data Volume1.-v <host_path>:<container_path>2.-v <container_path>挂载匿名卷 二、数据共享1.容器和主机之间共享2.容器之间共享(1)方法一&#xff1a;-v非匿名…

Mysql之Specified key was too long; max key length is xx bytes异常

问题原因&#xff1a;mysq索引的字段都太长了 767字节是 MySQL 版本5.6(以及以前版本)中 InnoDB 表的最大索引前缀长度限制&#xff0c;MyISAM 表的长度为1,000字节。在 MySQL 版本5.7及以上版本中&#xff0c;这个限制增加到了3072字节。 如果对 utf8mb4编码的 varchar 字段设…

第七节JavaScript Promise

一、JavaScript Promise 1、简介 Promise是一个ES6提供的类&#xff0c;目的是更加优雅地书写复杂的异步任务。 由于Promise是ES6新增的&#xff0c;所以一些旧的浏览器并不支持&#xff0c;苹果的Safari 10和Windows的Edge 14版本以上的浏览器才支持&#xff0c;这个需要注…

[AutoSar]基础部分 RTE 02 S/R Port 显式/隐式

目录 关键词平台说明一、显式&#xff08;Explicit&#xff09;和隐式&#xff08;Implicit&#xff09;1.1 显式模式1.1.1code 二、隐式模式2.1 code 三、区别 关键词 嵌入式、C语言、autosar、EcuM、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语…

Content-Type是什么

目录 Content-Type是什么 获取方式 设置方式 常见类型 application/x-www-form-urlencoded multipart/form-data application/json text/xml text/html text/plain Content-Type是什么 Content-Type出现在请求标头和响应标头中&#xff0c;意思是内容类型&#xff0…

Ubuntu如何安装KVM

环境&#xff1a; 联想E14笔记本 Ubuntu20.04 问题描述&#xff1a; Ubuntu如何安装KVM 解决方案&#xff1a; 1.验证CPU是否支持硬件虚拟化 rootst-ThinkPad-E14:~# grep -Eoc (vmx|svm) /proc/cpuinfo 162.检查 VT 是否在 BIOS 中启用 安装 apt install cpu-checker …

论文阅读——Painter

Images Speak in Images: A Generalist Painter for In-Context Visual Learning GitHub - baaivision/Painter: Painter & SegGPT Series: Vision Foundation Models from BAAI 可以做什么&#xff1a; 输入和输出都是图片&#xff0c;并且不同人物输出的图片格式相同&a…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍&#xff0c;作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

滴滴出行:驾龄不到一年有什么办法注册网约车?

驾龄不到一年有什么办法注册网约车&#xff1f;怎么解决网约车注册审核问题。我可以为您提供一些对于如何注册滴滴快车的信息。要注册为滴滴快车司机&#xff0c;你需要符合下列规范&#xff1a; 1.年龄在12-60岁左右&#xff0c;有C1或以上驾照&#xff0c;如果驾龄不够三年是…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象&#xff0c;需要被回收。 内存溢出和内存泄漏 内存溢出&#xff1a;经过垃圾回收之后&#xff0c;内存仍旧无法存储新创建的对象&#xff0c;内存不够溢出。 内存泄漏&#xff1a;又叫“存储泄漏”&#xff0…

【Leetcode】旋转矩阵

题目链接&#xff1a;https://leetcode.cn/problems/rotate-matrix-lcci/description/ 题目描述 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 …

cefsharp120.1.8(cef120.1.8,Chromium120.0.6099.109)版本升级测试,其他版本H264版本

此版本最新版cef120.1.8,Chromium120.0.6099.109 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明&#xff1a;本版本暂时不支持264&#xff0c;其他H264版本参考119,116&#xff0c;114&#xff0c;110&#xff0c;109等版本 c…

mysql innodb知识记录

官方文档 官网架构图 innodb 特性 内存 buffer pool 采用优化后的LRU算法&#xff0c; 3/8 of the buffer pool is devoted to the old sublist.The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.When In…

地牢边缘 DUNGEON LIMBUS中文免安装版

​《地牢边缘》是一款点阵图形式的像素风经典迷宫探索类游戏。玩家需要在游戏中收集多种装备&#xff0c;随机生成的无限地下城。在生死之际遇见的迷之铁匠和管理复活之村的年轻女性。为了找回遗失的记忆&#xff0c;进入更深的地下城。玩家还可以发展村落以及进化武器的多样化…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展&#xff0c;各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用&#xff0c;帮助构建协同共享、高效的统一智慧管理平台&#xff0c;为高速公路的…

javascript 数组处理的两个利器: `forEach` 和 `map`(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

算法学习——栈与队列

栈与队列 栈与队列理论基础用栈实现队列思路代码 用队列实现栈思路代码 删除字符串中的所有相邻重复项思路代码 有效的括号思路代码 逆波兰表达式求值思路代码 滑动窗口最大值思路代码未完待续 前 K 个高频元素思路代码拓展 总结栈在系统中的应用括号匹配问题字符串去重问题逆波…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

6.s081操作系统Lab4: trap

文章目录 chapter 4概览4.1 CPU trap流程使用寄存器如果cpu想处理1个trap 4.2 用户态引发的trap4.2.1 uservec4.2.2 usertrap4.2.3 usertrapret和userretusertrapretuserret Lab4Backtrace (moderate)Alarm (hard) chapter 4 概览 trap的场景&#xff1a;系统调用&#xff0c…