docker(四)使用篇二:docker 镜像

news2025/5/18 9:36:02

 在上一章中,我们介绍了 docker 镜像仓库,本文就来介绍 docker 镜像。

一、什么是镜像

docker 镜像本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。

我们可以把 Docker 镜像 理解成一个模板,通过这个模板,可以实例化出来很多容器

docker 镜像里面由一层层 Union FS(联合文件系统)组成

镜像生活案例

镜像相当于我们 java 或者 C++中的类,相当于一个模板,可以很方便的构建出来不同的对象。

docker 镜像的组合层核心:联合文件系统(Union FS)

联合文件系统可以将几层文件目录挂载到一起,形成一个虚拟文件系统。

每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。(PS:联合文件系统的读写速度都比较慢)

构建镜像的时候,会从一个最基本的操作系统开始构建;每个构建的操作都相当于做一层文件目录的修改,即增加了一层文件系统。

一层层往上叠加,上层的修改会覆盖底层该位置的可见性。这也很容易理解,就像上层把底层遮住了一样。当使用的时候,只会看到一个完全的整体,不知道里面有几层,也不清楚每一层所做的修改是什么。

联合文件系统使得容器可以拥有自己的文件视图(即容器层),同时共享宿主机或者其他容器的基础镜像层(只读层)。这种方式不仅减少了存储空间的使用,而且提高了容器启动速度,因为只需要复制必要的镜像即可创建新的容器

联合文件系统镜像分层生活案例

我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这些层一般是不可修改的。

最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。

二、为什么需要镜像

1、通过打包,解决环境不一致问题

在部署应用时,原先是通过手工 / 写一些脚本的方式进行部署。这样部署面临的最大问题就是云端和本地环境可能不一致。用户为每个应用打包过程比较繁琐,需要配置和修改等操作,非常费劲。 Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。

那么,读者可能会猜测 Docker 镜像就是个压缩包,是的,猜对了,它就像一个压缩包文件。那么它是如何解决 Paas 时代所面临的云端和本地一致性问题?

很简单,它是把一个镜像制作成一个完整的操作系统,有所有文件和对应的目录结构,这样的压缩包跟你本地和测试环境用的操作系统一摸一样。

2、减少空间占用,加速软件开发

docker 最大的贡献就是定义了容器镜像的分层的存储格式docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。

docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,也可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。

三、核心:镜像相关命令

命令清单

命令别名功能备注
docker pulldocker image pull从镜像仓库中拉取镜像和镜像仓库命令相同,亦可以归类为镜像命令
docker pushdocker image push推送镜像到仓库和镜像仓库命令相同,亦可以归类为镜像命令
docker images
docker image
ls / docker
image list
列出本地镜像必须掌握
docker tagdocker image tag给本地某个镜像打标签(标记版本),在推送镜像到仓库时比较有用必须掌握
docker rmi
docker image
rm / docker
image remove
删除本地某个镜像必须掌握
docker builddocker image build通过 dockerfile 制作镜像必须掌握
docker savedocker image save把制定镜像保存成 tar 格式的归档文件必须掌握
docker loaddocker image load导入使用 docker save 保存的 tar 格式的镜像文件必须掌握
docker image inspect查看镜像的详细信息必须掌握
docker history
docker image
history
查看镜像历史
docker import
docker image
import
从归档文件 docker export 中创建镜像。 (与容器 docker export 对应,在下一章容器章节讲解)
docker prune
删除不使用的镜像

 1、docker images

# RESPOSITORY 指的是镜像所在仓库名
docker images [关键参数] [RESPOSITORY[:TAG]]

关键参数

无参情况:列出本地所有镜像

-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

--digests:显示镜像的摘要信息;

-f:显示满足条件的镜像;

--format:指定返回值的模板文件;

--no-trunc:显示完整的镜像信息;

-q :只显示镜像 ID

功能: 列出本地镜像

# 列出本地全部镜像
docker images
# 列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu

2、docker tag

# SOURCE_IMAGE:原镜像名
# TARGET_IMAGE:目标镜像名(可以加上仓库地址,就可以归入某一仓库)
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

功能: 给本地镜像打标签,并归入某一仓库(目的通常为推送做准备)

可以看见,给 nginx 镜像打了个标签,仓库中会多出一个相同镜像ID不同 REPOSITORY 的镜像,这个镜像就可以作为推送到仓库的一个版本

 3、docker rmi

# 可以同时删除多个镜像
docker rim [关键参数] 镜像名....

关键参数

-f:强制删除;

--no-prune:不移除该镜像的过程镜像,默认移除;

 功能:删除指定镜像

(PS:删除前需要把引用了该镜像的容器删掉之后才能删除镜像;由于是比较暴力的删除镜像,用的较少,一般使用 docker rm 删除容器)

成功删除

4、docker save

# 可以同时把多个镜像归档到一个文件
docker save [关键参数] 镜像名...

 功能:把指定的镜像保存成 tar 归档文件,便于在各个服务器上分发

关键参数

-o:把镜像保存到哪一个文件中,(可以同时写上路径,就保存在那个路径中;只写文件名则是默认保存在当前文件夹中) 

成功归档

 5、docker load

docker load [关键参数]

功能:把 tar 文件再加载成镜像

关键参数

--input , -i : 导入的文件的文件名,代替 STDIN

--quiet , -q : 精简输出信息。(默认是一层层导入的,会全部展示)

 

可以发现精简了很多

6、docker image inspect

# 可以同时查看多个镜像
docker image inspect [关键参数] 镜像名...

 功能:查看镜像的详细信息

(PS:如果是 docker inspect 的话,docker 会自动判断是镜像还是容器,然后显示信息)

查看详细信息

7、docker history

docker history [关键参数] 镜像名

功能:显示镜像的历史 

关键参数:

-H , --human:大小和日期采用人容易读的格式展现

--no-trunc:显示全部信息,不要隔断(不截断的话像 ID 等都会很长)

-q, --quiet:只显示镜像 id 信息

从左往右每一列的意义依次是:镜像名、镜像创建时间、通过什么命令创建(dockerfile 命令,后文会说)、镜像大小、注释

8、docker import

其与容器 docker export 对应,二者搭配使用,因此将在下一章容器进行讲解

9、docker image prune

docker image prune [关键参数]

功能:删除当前未使用的镜像

(PS:无参的话,会删除虚悬镜像,即那些既没有标签又被没有任何容器引用的镜像)

关键参数:

-a , --all:删除全部不使用的镜像(只要没有容器使用,就被视作未使用镜像,比较危险,慎用) 

--filter filter:指定过滤条件;

-f, --force:不提示是否删除;

无参情况,删除虚悬镜像;加上 -a ,会把所有未被容器使用的镜像删除,比较危险!

 

10、docker build

docker build [关键参数] PATH | URL | -

功能:用于使用 dockfile 创建镜像(会在 dockerfile 制作镜像章节详细讲解)

关键参数:

--build-arg=[] :设置镜像创建时的变量;

-f :指定要使用的 Dockerfile 路径;

--label=[] :设置镜像使用的元数据;

--no-cache :创建镜像的过程不使用缓存;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构

建中为一个镜像设置多个标签。

--network: 默认 default。在构建期间设置 RUN 指令的网络模式

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

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

相关文章

AXI4总线协议 ------ AXI_LITE协议

一、AXI 相关知识介绍 https://download.csdn.net/download/mvpkuku/90841873 AXI_LITE 选出部分重点,详细文档见上面链接。 1.AXI4 协议类型 2.握手机制 二、AXI_LITE 协议的实现 1. AXI_LITE 通道及各通道端口功能介绍 2.实现思路及框架 2.1 总体框架 2.2 …

Ubuntu24.04 安装 5080显卡驱动以及cuda

前言 之前使用Ubuntu22.04版本一直报错,然后换了24.04版本才能正常安装 一. 配置基础环境 Linux系统进行环境开发环境配置-CSDN博客 二. 安装显卡驱动 1.安装驱动 按以下步骤来: sudo apt update && sudo apt upgrade -y#下载最新内核并安装 sudo add…

SpringAI-RC1正式发布:移除千帆大模型!

续 Spring AI M8 版本之后(5.1 发布),前几日 Spring AI 悄悄的发布了最新版 Spring AI 1.0.0 RC1(5.13 发布),此版本也将是 GA(Generally Available,正式版)发布前的最后…

操作系统之进程和线程听课笔记

计算机的上电运行就是构建进程树,进程调度就是在进程树节点进程进行切换 进程间通信的好处 经典模型 生产者和消费者 进程和线程的区别 线程引入带来的问题线程的优势 由于unix70年代产生,90年代有线程,当时数据库系统操作需要线程,操作系统没有来得及重造,出现了用户态线…

COMSOL随机参数化表面流体流动模拟

基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害(如滑坡)等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌,并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…

JavaSwing中的容器之--JScrollPane

JavaSwing中的容器之–JScrollPane 在Java Swing中,容器是用于容纳其他组件(如按钮、标签等)的组件。Swing提供了多种容器,它们可以嵌套使用以创建复杂的用户界面。 JScrollPane是一个轻量级组件,提供可滚动视图。JSc…

使用 Cookie 实现认证跳转功能

使用 Cookie 实现认证跳转功能的实践与解析 在 Web 开发中,用户身份认证是一个基础而关键的功能点。本文将通过一个简单的前后端示例系统,介绍如何基于 Cookie 实现 Token 保存与自动跳转认证的功能,并结合 Cookie 与 Header 的区别、使用场…

LED接口设计

一个LED灯有3种控制状态,常亮、常灭和闪烁,要做到这种控制最简单的一种方法是使用任何一款处理器的普通IO去控制。 用IO控制方式有两种,一种是高有效,如下图1所示IO口为高电平时LED亮,IO为低电平时LED不亮。IO口出一个…

SpringBoot项目使用POI-TL动态生成Word文档

近期项目工作需要动态生成Word文档的需求,特意调研了动态生成Word的技术方案。主要有以下两种: 第一种是FreeMarker模板来进行填充;第二种是POI-TL技术使用Word模板来进行填充; 以下是关于POI-TL的官方介绍 重点关注&#xff1…

YOLOv3深度解析:多尺度特征融合与实时检测的里程碑

一、YOLOv3的诞生:继承与突破的起点 YOLOv3作为YOLO系列的第三代算法,于2018年由Joseph Redmon等人提出。它在YOLOv2的基础上,针对小目标检测精度低、多类别标签预测受限等问题进行了系统性改进。通过引入多尺度特征图检测、残差网络架构和独…

uniapp-商城-60-后台 新增商品(属性的选中和页面显示)

前面添加了属性,添加属性的子级项目。也分析了如何回显,但是在添加新的商品的时,我们也同样需要进行选择,还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…

虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现

汽车零部件测试领域对操作的便捷性要求越来越高,虹科Baby-LIN-RC系列产品为这一需求提供了完美的解决方案。从基础的按键设置到高级的Shift键应用,本文将一步步引导您了解虹科Baby-LIN-RC系列产品的智能控制之道。 虹科Baby-LIN-3-RC 想象一下&#xff0…

单片机ESP32天气日历闹铃语音播报

自制Arduino Esp32 单片机 可以整点语音播报,闹铃语音播报,农历显示,白天晚上天气,硬件有 Esp32,ST7789显示屏,Max98357 喇叭驱动,小喇叭一枚。有需要源码的私信我。#单片机 #闹钟 #嵌入式 #智能…

如何解决LCMS 液质联用液相进样器定量环漏液问题

以下是解决安捷伦1260液相色谱仪为例的进样器定量环漏液问题的一些方法:视频操作 检查相关部件 检查定量环本身:观察定量环是否有破损、裂纹或变形等情况。如果发现定量环损坏,需及时更换。检查密封垫:查看进样阀的转子密封垫、计…

服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问

要通过 iptables 将容器中的特定端口请求转发到特定服务器,你需要设置 DNAT(目标地址转换)规则。以下是详细步骤: 假设场景 容器端口: 8080(容器内服务监听的端口)目标服务器: 192.168.1.100(请…

PCIe Switch 问题点

系列文章目录 文章目录 系列文章目录完善PCIe Retimer Overview Document OutlineSwitch 维度BroadComMicroChipAsmedia 祥硕Cyan其他 完善 Functional block diagram,功能框图Key Features and Benefits,主要功能和优点Fabric 链路Multi-root PCIe Re…

开源轻量级地图解决方案leaflet

Leaflet 地图:开源轻量级地图解决方案 Leaflet 是一个开源的 JavaScript 库,用于在网页中嵌入交互式地图。它以轻量级、灵活性和易用性著称,适用于需要快速集成地图功能的项目。以下是关于 Leaflet 的详细介绍和使用指南。 1. Leaflet 的核心…

Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件

目录 1. 创建Flutter项目 1.1使用Android Studio创建Flutter项目 1.2 使用命令行创建Flutter项目 2. Flutter项目介绍 2.1所有代码都在lib目录下编写 2.1 pubspec.yaml 依赖库/图片的引用 ​编辑 3. 运行项目 4. 编写mian.dart文件 4.1 使用MaterialApp 和 Scaffold两个组件…

如何实现金蝶云星空到MySQL的数据高效集成

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化建设中,数据的高效流动和准确处理是关键。本文将聚焦于一个具体的系统对接集成案例:金蝶云星空的数据集成到MySQL,方案名称为“xsck-2金蝶销售出库-->mysql”。通过这一案例&#x…

院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法

一、1911反转公约数 1.题目描述 2.解题思路 两个关键点:1.如何把数字反转,2.如何求最大公约数。 反转:用字符串形式存储,定义一个新的字符串倒序存储反转之后的字符串,将字符串按位转换位数字。 求最大公约数&…