Docker骚操作五十七话之docker镜像分层

Docker(四)进阶:Docker镜像概述和分层原理 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时的库、环境变量和配置文件。镜像是一个只读模板,带有创建Docker容器的说明。通常,一个镜像基于另一个镜像,并带有一些额外的定制。例如,您可以构建一个基于ubuntu镜像镜像,但是要安装Apache web服务器和您的应用程序,以及运行应用程序所需的配置细节。........................ 阅读详情

一、docker镜像分层

Dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层镜像在生成的过程中是以分层的方式生成的

  1. Dockerfile 中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)
  2. 镜像层将被缓存和复用(后续的镜像层将基于前面的一层,每一层都会有下几层的缓存)
  3. 当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(就会自动销毁)
  4. 某一层的镜像缓存失效之后,它之后的镜像层缓存就都会失效(第一层不成功,那么第二层也就再成功,相当于地基)
  5. 容器的修改并不会影响镜像,如果在某一层中添加一个文件,在下一层中删除它,镜像中依然会包含该文件

在这里插入图片描述

二、Docker容器创建方法

1、基于dockerfile创建重点

1.1、概述

Dockerfile 是由一组指令组成的文件,其中每条指令对应 Linux 中的一条命令,Docker 程序将读取 Dockerfile 中的指令生成指定镜像 Dockerfile 结构大致分为四个部分: 基础镜像信息(Linux发行版:centos ubantu suse redhat)维护者信息(docker search可查看)镜像操作指令(tar yum make)容器启动时执行指令(CMD["/root/run.sh"] ENTYPOINT都是系统启动时,第一个加载的程序/脚本/命令) Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持以“#”为开头的注释

1.2、操作指令

在这里插入图片描述

三、dockerfile分层原理

1、docker镜像分层(基于AUFS构建)docker镜像位于bootfs之上每一层镜像的下一层成为父镜像第一层镜像成为base image(操作系统环境镜像)容器层(可读可写),在最顶层(writable)容器层以下都是readonly

在这里插入图片描述
LXC:是内核中容器技术/驱动;功能是:将资源容器化(虚拟化)是早期docker的依赖组件,目前docker拥有自己的libcontianer库,可以实现容器虚拟化的功能,所以对LXC的依赖性大大降低

2、涉及技术

①bootfs (boot file system)内核空间

2.1、主要包含bootloader和kernel
2.2、bootloader主要是引导加载kernel, Linux刚启 动时会加载bootfs文件系统,在Docker 镜像的最底层是bootfs
2.3、这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs
2.4、在1inux操作系统中(不同版本的linux发行版本),linux加 载bootfs时会将rootfs设置为read-only,系统自检后会将只读改为读写,让我们可以在操作系统中进行操作

②rootfs (boot file system) 内核空间

2.5、在bootfs之上(base images, 例如centos、ubuntu)
2.6、包含的就是典型Linux 系统中的/dev, /proc, /bin, /etc 等标准目录和文件
2.7、rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等

总结

1、容器之间相互通信的方式

docker 0 、 数据卷容器 、 --link 隧道 、 contarnial 模式(直连接口,同一个network namespaces里,通过同一个网卡的方式,在同一个名称空间里 共有一个IP,通过localhost交互/自己的ip或端口交互)

2、ADD和COPY区别

Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的
2.1、copy只能用于复制(节省资源)
2.2、ADD复制的同时,如果复制的对象时压缩包,ADD还可以解压(消耗资源)
2.3、COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中
2.4、满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩

3、CMD和entrypoint区别

一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数

4、为什么docker的centos镜像只有200m多一点

bootfs + rootfs : 作用是加载、引导内核程序 + 挂载使用linux操作系统(centos ubantu )等一些关键的目录文件bootsfs用内核的,rootfs用自己的

5、Dockerfile镜像分层的原理

用overlay2存储引擎的方式叠加上去,最上面是容器层是可读可写的,其他镜像是可读的,他们是共用的内核资源,共用的是操作系统里所必须的引导程序,挂载,系统之间的文件,这些文件跟内核之间共享,所以他比实际的centos要小

Docker基础教程(五十七)基本操作之删除镜像docker rmi命令:无情分手大师:Docker RMI命令的删除艺术与求生指南 Docker rmi命令看似简单,实则是容器世界的"无情分手大师"。本文深度解析docker rmi的删除哲学,从基础单删到强制分手,从清理悬空镜像到解决依赖冲突。附完整实战示例,教你如何优雅删除镜像而不误伤"无辜",避免存储空间爆炸的惨剧。256字掌握镜像删除的终极奥义,让容器世界整洁如新! 阅读详情

相关推荐

大模型Agent驱动的学术论文自动化翻译流水线

学术论文翻译并非简单语言转换,而是融合术语一致性、公式保真、引用链维护与结构化沉淀的复合型信息处理任务。其底层依赖Agent架构对任务进行状态化分解与协同调度,通过角色化智能体(如术语锚定Agent、公式保真Agent)实现可审计、可复用、可降级的工程化流程。相比单一大模型调用,Agent方案显著提升专业文本的语义准确率与系统鲁棒性,广泛适用于研究生文献精读、高校教学材料生成及企业技术情报分析等真实科研场景。本文详解基于CrewAI构建的第57版生产级论文处理流水线,覆盖从邮箱订阅、网页清洗、多阶段翻译到N

weixin_30423977的博客 363

滚雪球学Ubuntu全方位学习指南:从基础到高级,2026年度必备教程 (已完结)

我是 bug菌:全栈工程师,长期专注于 Ubuntu 环境搭建、Linux 服务器运维、安全加固、性能优化与自动化实践 。本专栏以 Ubuntu 20.04 实战环境为主线,采用“滚雪球式学习法”,从基础概念逐步扩展到系统管理、开发环境、网络配置、安全防护、性能调优与云服务器部署,帮助你系统掌握 Ubuntu 与 Linux 高阶应用能力。

**My Coding Family** 2374

机器学习模型不是黑箱:可理解、可调试、可复现的工程化实践

机器学习模型本质上是受约束的函数逼近过程,其核心在于输入与输出之间的数学映射关系,而非玄学调参。理解模型需从函数空间、损失函数和泛化保障三要素切入,技术价值体现在对业务目标的精准翻译能力——如将风控代价转化为加权损失,将医生决策需求映射为概率校准输出。典型应用场景包括电商销量预测、设备故障预警、慢病风险分层等需强解释性与鲁棒性的工业级任务。本文聚焦真实项目中模型从数据契约建立、特征工程设计到部署监控的全链路工程实践,强调‘模型即产品’的落地逻辑,尤其突出SHAP解释性与PSI数据漂移监控等关键能力。

hideto 434

Docker学习:理论基础之Docker镜像分层 | 容器和镜像的关系 | 写时复制与用时分配

古代的码头是不是要手挑肩扛,把货物一件件往小船上运?弊端很明显:工人可以多少私吞一点,效率也比较低。 现在呢?都是一个大大的集装箱,一个大大的货轮。好处也很明显:效率高、集装箱货物之间彼此相互不影响。 反思:码头上,每个集装箱,可以把他们理解为单独的一个镜像,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。无论这个镜像有多少层,对内每层的中间镜像都是各自独立的,对外他们又是一个统一的整体。...

血煞长虹 的专栏 4786

Docker-镜像分层结构/镜像构建

通过以上这种打包镜像的方法,可以将我们在容器镜像内修改的数据得以保存,但是这种方法不推荐,因为将数据存到镜像层里面,它的文件系统读取速度都效率非常低。 所以呢要将数据存储到宿主机的物理磁盘中,这样会更加高效,不管是从存储速度还是文件的读取速度来说。.........

weixin_66461008的博客 2565

docker系列】镜像分层原理及容器层写时复制

本文核心内容:docker镜像分层与容器层介绍、为什么会产生镜像分层?、什么是写时复制?

字母哥博客 1万+

DockerFile创建Docker镜像并启动服务

1.新建文件夹用来存放dockerfile文件 : mkdir dockerfiles 2.新建dockerfile文件 :touch Dockerfile 3.编写dockerfile文件并保存:viDockerfile FROM nginx RUN echo 'hello nginx ' > /usr/share/nginx/html/index.html FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。 ...

bird_tp的博客 3389

从零开始学Linux(第五十七期)

Linux 容器技术从早期的概念萌芽,经过多年的技术积累和创新发展,已经成为现代信息技术领域的重要基石。从 Chroot 机制到 Namespace 和 Cgroups 技术的出现,为容器技术提供了底层支撑;Docker 的崛起引发了容器技术的革命,推动了容器生态的繁荣;Kubernetes 等容器编排工具的兴起,实现了容器集群的高效管理和大规模应用。如今,容器技术在云计算、微服务、CI/CD、边缘计算等领域发挥着重要作用,并朝着更安全、智能化、标准化的方向不断发展。

2501_90727259的博客 782

转转前端周刊第五十七

转转前端周刊本刊意在将整理业界精华文章给大家,期望大家一起打开视野如果你有发现一些精华文章想和更多人分享,可以点击我们的公众号名称,将文章链接和你的解读文案发给我们!我们会对内容进行筛选和审核,保留你的推荐人署名,分享给更多的人1、一名业务前端的这8年本人自 14 年校招加入淘宝 UED(淘系前端前身)后,一直从事淘宝的业务前端开发工作,至今已有 8 年多。一直想对自己已经度过的四分之一职业生涯(...

大转转FE 277

尚品汇-Jenkins部署构建服务模块、Linux快照备份(五十七

这个时候就可以访问service-product里面的接口了:可以直接访问内部的接口。通过前面的网关80访问这个 service-product内部接口,网关进行了过滤。注:其他模块构建方式一样,可选择“复制”上一个模块构建,修改配置即可,如图。复制之后,会把server-gateway的构建步骤拿过来,进行修改即可。通过不备份快照,来防止我们把环境搞错了,搞错后直接回复到正常的快照。注意:手动触发构建的时间与自动定时构建的时间互不影响。黄色:不确定,可能构建成功,但包含错误;如上显示蓝色,表示构建成功。

dengfengling999的博客 1223

学术论文自动化处理系统:Agent驱动的知识操作系统

学术论文处理并非简单的文本翻译,而是一个涉及公式解析、引用保真、术语消歧与版本追踪的复合型知识工程任务。其核心在于将模糊的阅读认知过程,转化为可测量、可调试、可复用的结构化工作流。大模型Agent通过角色分工、契约化输入输出与失败回退机制,实现LaTeX公式语义锚定、跨论文引用图谱构建、上下文敏感术语映射等关键技术能力。该范式显著降低科研人员在注意力、语义与上下文三重维度上的认知损耗,广泛应用于arXiv论文消化、个人知识库构建及研究缺口探测等真实场景。本文聚焦本地化部署实践,详解基于Ollama与Crew

weixin_34080571的博客 409

k8s面试题大全,保姆级的攻略哦(二)

不会。在pod中定义的command参数用于指定容器的启动命令列表,如果不指定,则默认使用Dockerfile打包时的启动命令,args参数用于容器的启动命令需要的参数列表;特别说明:kubernetes中的command、args其实是实现覆盖dockerfile中的ENTRYPOINT的功能的。1、如果command和args均没有写,那么使用Dockerfile的配置;

zzzxxx520369的博客 1593

Qwen3-ASR-1.7B实战:中英文混合语音识别效果实测

本文介绍了如何在星图GPU平台上自动化部署🎙️ Qwen3-ASR-1.7B 高精度语音识别工具镜像,实现本地化、高可靠性的中英文混合语音转写。无需联网或上传数据,用户可在单卡RTX 4090上快速完成会议录音、技术课程视频等场景的精准文字转录,显著提升内容整理与字幕制作效率。

weixin_42360733的博客 142

Docker的基本操作镜像、容器、数据卷)

*数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了。

豆恭梓的博客 281

docker容器的依赖关系怎么查

我整理的一些关于【Docker】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnNDocker容器的依赖关系怎么查 在微服务架构和容器化应用程序中,了解Docker容器的依赖关系非常重要。通过查阅和管理这些依赖关系,开发人员和运维人员能够更有效地构建、调试和维护应用...

weixin_40431265的博客 695

docker查看镜像基本使用

docker查看镜像删除镜像基本使用

loulita的博客 2002

Docker狂神说

Docker 视频地址 Docker学习 Docker概述 Docker安装 Docker命令 镜像命令 容器命令 操作命令 … Docker镜像 容器的数据卷 DockerFIle Docker网络原理 IDEA整合Docker Docker Compose Docker Swarm CI\CD jenkins Docker概述 Docker为什么会出现? 一款产品:开发-上线 两套环境,应用配置! 开发 — 运维 问题: 项目在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考

weixin_44502509的博客 4926

Docker完全解析 二、Docker镜像

Docker镜像可以理解为运行在Docker容器中的一个组件,本节将会带领大家学会Docker镜像的下载、搜索、查看、添加删除等一系列操作Docker在运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试从默认的远程仓库Docker Hub下载。 一、获取镜像:  1、Docker从网络上下载镜像的格式为:     docker pull [NAME]:[TAG]

HappyHeng的博客 1512
上一篇: Docker骚操作五十六话之docker网络模式、数据卷、日志等
下一篇: python之骚操作第一话走近python基础语法之变量及运算符篇
林暗森鹿
博客等级 码龄5年 2100粉丝 · 95原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值