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

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

 在上一章中,我们介绍了 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 指令的网络模式

相关文章:

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

在上一章中,我们介绍了 docker 镜像仓库,本文就来介绍 docker 镜像。 一、什么是镜像 docker 镜像本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。 我们可以把…...

ms-swift 代码推理数据集

目前想要对SFT微调后的模型进行测试,看官方文档ms-swift中有eval的教程,但是从介绍来看,eval使用的是modelscope的评测内容。 评测 SWIFT支持了eval(评测)能力,用于对原始模型和训练后的模型给出标准化…...

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 …...

DATE_FORMAT可以接收date类型,也可以接收String类型!

DATE_FORMAT 是 SQL 函数,主要用于将日期/时间类型的字段按照指定格式转换成字符串。在 MyBatis 的 XML 动态 SQL 中,你看到的这段代码是为了比较数据库中的日期字段和传入参数的日期值,但会忽略时间部分,只比较年月日。 代码解释…...

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

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

华三H3C交换机配置NTP时钟步骤 示例

现场1台H3C 5110交换机 版本&#xff1a;Comware Software, Version 5.20.99, Release 1105 当前没有指定NTP&#xff0c; <H3C-5110>dis ntp-service status Clock status: unsynchronizedClock stratum: 16Reference clock ID: noneNominal frequency: 100.0000 HzAc…...

RKNN开发环境搭建(ubuntu22.04)

以下情况在RV1106G3的平台上验证正常。 1、conda安装 1&#xff09;conda --version//确认是否安装 2&#xff09;创建一个安装目录&#xff0c;进行下一步 3&#xff09;wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x…...

matlab多项式

1. 多项式表示 多项式用行向量表示&#xff0c;按降幂排列系数。例如&#xff0c;多项式 3x22x1 表示为 [3 2 1]。 2. 创建多项式 直接输入系数&#xff1a;如 p [1 -3 3 -1] 表示 x3−3x23x−1。由根创建&#xff1a;使用 poly 函数。例如&#xff0c;根为 [1, 1, 1]&…...

Sprnig MVC 如何统一异常处理 (Exception Handling)?

主要有以下几种方式来实现统一异常处理&#xff0c;其中 ControllerAdvice (或 RestControllerAdvice) 结合 ExceptionHandler 是最常用的方式。 1. ExceptionHandler 注解 作用&#xff1a; 用于标记一个方法&#xff0c;该方法将处理在同一个 Controller 类中抛出的特定类型…...

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

续 Spring AI M8 版本之后&#xff08;5.1 发布&#xff09;&#xff0c;前几日 Spring AI 悄悄的发布了最新版 Spring AI 1.0.0 RC1&#xff08;5.13 发布&#xff09;&#xff0c;此版本也将是 GA&#xff08;Generally Available&#xff0c;正式版&#xff09;发布前的最后…...

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

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

【vue】封装接口,全局字典,表格表头及使用

一、封装接口&#xff08;API请求&#xff09; 1. 创建axios实例 // src/utils/request.js import axios from axiosconst service axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 10000 })// 请求拦截器 service.interceptors.request.use(config > {co…...

深入解析ZAB协议:ZooKeeper的分布式一致性核心

引言 在分布式系统中&#xff0c;如何高效、可靠地实现多节点间的数据一致性是核心挑战之一。ZAB协议&#xff08;ZooKeeper Atomic Broadcast&#xff09;作为 ZooKeeper的核心算法&#xff0c;被广泛应用于分布式协调服务&#xff08;如Kafka、HBase、Dubbo等&#xff09;。…...

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

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

大模型笔记-“训练”和“推理”概念

在大模型&#xff08;如Transformer类模型、LLM&#xff09;的资源管理和开发流程中&#xff0c;“训练”和“推理”是两个核心概念&#xff0c;分别对应模型的构建和实际应用阶段&#xff1a; 训练是模型的“学习过程”&#xff0c;需要大量资源和时间。推理是模型的“应用过…...

JavaSwing中的容器之--JScrollPane

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

使用 Cookie 实现认证跳转功能

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

Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别

Reth&#xff08;Redundant Ethernet&#xff09;与Bridge-Aggregation是H3C设备中两种不同的接口技术&#xff0c;主要区别体现在工作原理、应用场景及配置特性上。以下是详细对比分析&#xff1a; 定义与类型 Reth&#xff08;冗余以太网接口&#xff09; 类型&#xff1a;…...

(面试)Android各版本新特性

Android 6.0 (Marshmallow, API 23) 运行时权限管理&#xff1a;用户可在应用运行时动态授予或拒绝权限&#xff0c;取代安装时统一授权4。Doze模式与应用待机&#xff1a;优化后台耗电&#xff0c;延长设备续航5。指纹识别支持&#xff1a;原生API支持指纹身份验证。 Android…...

算法基础 -- 小根堆构建的两种方式:上浮法与下沉法

小根堆构建的两种方式&#xff1a;上浮法与下沉法 在构建小根堆&#xff08;Min-Heap&#xff09;时&#xff0c;通常有两种常见的构建方式&#xff1a; 上浮建堆&#xff08;逐个插入&#xff0c;上浮调整&#xff09;下沉建堆&#xff08;Heapify 自底向上&#xff0c;下沉…...

LED接口设计

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

西安前端面试

面试1 1.vue2和vue3的原理及区别 2.伪数组 3.对箭头函数怎么理解的 4.vue父子组件传值的几种方式 5.对Promise的理解 面试2 1.两个升序数组实现合并升序排序 2.数组拍平[3, [[7, [1, 5]], 4], 8, [6]] 面试3 1.let var const的区别&#xff0c;什么时候const能改变 …...

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

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

java高效实现爬虫

一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…...

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

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

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

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

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

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

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

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

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

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

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

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