05 docker 镜像

目录

1. 镜像

2. 联合文件系统

3. docker镜像加载原理

4. 镜像分层

@ 镜像分层的优势

5. 容器层


1. 镜像

  • 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好行程一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。(只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)

2. 联合文件系统

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

继承和制作:基础镜像(没有父镜像的镜像)可以作为其他镜像的基础层,在其上添加新的层,创建各种具体的应用镜像。例如,一个基础的 Ubuntu 镜像可以作为基础,在其上添加 Apache、MySQL 等,生成一个 Web 服务器镜像

假设我们有一个基础镜像 ubuntu,我们希望在其上创建一个包含 nginx 的新镜像:

  1. 基础层:ubuntu 镜像
  2. 新层:在 ubuntu 镜像上安装 nginx

通过 UnionFS,这两个层会合并成一个虚拟文件系统。当我们运行这个新镜像时,看到的是一个包含 nginx 的完整系统。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

3. docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

q:平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??

a:对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接使用Host的Kernel,自己只需要提供rootfs就可以。所以,对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,不同的发行版可以共用bootfs。

bootfs和rootfs

  1. bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader主要是引导加载 kernel,Linux刚启动时会加载bootfs文件系统。
  2. 在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已经由 bootfs 转交给内核,此时系统也会卸载 bootfs。
  3. rootfs(root file system),在bootfs之上,包含的就是典型Linux系统中的 /dev/proc/bin/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、CentOS等。

docker镜像底层层次:

有差别的rootfs:

4. 镜像分层

以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载

Docker支持扩展现有镜像,创建新的镜像。新镜像是从base镜像一层一层叠加生成的。

案列见 04 Docker 常用镜像命令 docker commit

例如:

# Version: 0.0.1
FROM debian  # 直接在debain base镜像上构建
MAINTAINER mylinux
RUN apt-get update && apt-get install -y emacs # 安装emacs
RUN apt-get install -y apache2 # 安装apache2
CMD ["/bin/bash"] # 容器启动时运行bash

镜像创建过程:

  • Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
  • 新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层

@ 镜像分层的优势

镜像分层的一个最大好处就是共享资源,方便复制迁移,方便复用。

Docker 镜像采用分层结构有以下几个重要原因:

1. 高效存储:分层结构允许 Docker 仅存储变化的部分,而不是整个镜像的所有内容。每一层代表一次文件系统的变更(例如,添加一个文件或安装一个软件包)。这些层可以共享,避免重复存储,从而显著减少磁盘空间的占用。

2. 快速构建:由于 Docker 使用分层结构,每次构建镜像时,只需要构建或重新构建那些有变化的层。未改变的层可以直接复用。这样,可以大大加快镜像的构建速度,因为不必每次都从头开始。

3. 镜像重用:多个镜像可以共享相同的基础层。例如,如果两个不同的应用都基于相同的操作系统镜像,那么这个操作系统镜像层只需存储一次,并且在两个应用镜像中共享。这不仅节省了存储空间,还减少了下载和传输的时间。

4. 镜像版本管理:每一层实际上是一个只读快照,所有的层叠加在一起形成最终的文件系统。通过分层结构,可以更容易地管理和回滚镜像的版本。例如,如果一个镜像的新版本有问题,可以迅速回滚到前一个版本。

5. 缓存机制:Docker 在构建镜像时,会利用缓存机制来加快构建过程。分层结构使得 Docker 可以对每一步的构建进行缓存,如果某一层没有改变,Docker 会直接使用缓存的层,而不是重新执行命令。这大大提高了镜像构建的效率。

6. 便于分发和传输:由于镜像是分层的,当推送或拉取镜像时,只需要传输发生变化的层。这样可以减少网络传输量,提高传输速度。

5. 容器层

当容器启动时,一个新的可写层将被加载到镜像的顶部,这一层通常被称为容器层,容器层之下的都叫镜像层

所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。

只有容器层是可写的,容器层下面的所有镜像层都是只读的。

如图:

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

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

相关文章

AMEYA360代理:海凌科60G客流量统计雷达模块 4T4R出入口绊数计数

数字化时代,不管是大型商城还是各种连锁店,客流统计分析都可以帮助企业更加精准地了解顾客需求和消费行为。 海凌科推出一款专用于客流量统计的60G雷达模块,4T4R,可以实时进行固定范围内的人体运动轨迹检测,根据人体的…

聊一聊领域驱动和贫血

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角…

亚马逊跟卖僵尸选品采集,批量多站点,多关键词同时采集获取!

今天给卖家分享下亚马逊跟卖选择僵尸链接,现在很多卖家,找僵尸链接是不是都是通过亚马逊前端页面找或者是通过搜索,这样不但费时费力,还找不出几个僵尸链接,而且就算是找到了,也需要各种检查,非…

Electron、Win11静默打印与PowerShell:技术融合与应用探索

Electron、Win11静默打印与PowerShell:技术融合与应用探索 在现代软件开发与办公环境中,技术的融合与创新不断推动着工作效率的提升和用户体验的优化。本文将深入探讨Electron框架、Windows 11(Win11)静默打印技术以及PowerShell…

java版本工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统

工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的…

【操作系统期末速成】 EP03 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点五:进程的概念及特征2.1 考点六:进程的状态与切换 一、前言🚀🚀🚀 ☀️ 回报不在行动之后,回报在行动…

linux内核编译流程、驱动加载顺序

内核编译 根据顶层Makefile找到vmlinux目标开始分析: vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE$(call if_changed,link-vmlinux)vmlinux-deps : $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) 根据这个展开 …

GCN结合Transformer炸场!性能暴涨74%,效率翻3倍

最近发现了两篇效果很妙的GCN结合Transformer的最新工作,分享给大家: MP-GT:通过结合GCN和Transformer方法来增强App使用预测的准确性,实现了74.02%的性能提升,且训练时间减少了79.47%。 MotionAGFormer:结…

MySQL 图形化界面

填完信息之后,圆圈处可以验证是否可以连接数据库 展示所有数据库(因为有的可能连上,却没有数据库显示)

“小红书、B站崩了”,背后的阿里云怎么了?

导语:阿里云不能承受之重 文 | 魏强 7月2日,“小红书崩了”、“B站崩了”等话题登上了热搜。 据第一财经、财联社等报道,7月2日,用户在B站App无法使用浏览历史关注等内容,消息界面、更新界面、客服界面均不可用&…

【python】PyQt5事件机制、定时器原理分析和实战演练

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

2025秋招NLP算法面试真题(十四)-RoBERTa-Bert的改进

RoBERTa:更大更多更强 今天分享一个Bert的改进工作RoBERTa。RoBERTa是训练充分的Bert。 主要掌握以下几点,与Bert相比较,RoBERTa预训练的时候: 动态掩码:comparable or slightly better去掉NSP任务并且更改数据输入格式为全部填充可以跨越多个文档更多数据,更大bsz,更…

《浔川AI社 AI 产品上线公告》——浔川总社(浔川周报第一期 24.7.2pm)

《浔川 Python 社 AI 产品上线公告》 尊敬的用户: 您好! 我们非常高兴地向您宣布,浔川 AI 社经过不懈的努力和创新,现已成功上线 3 款令人瞩目的 AI 产品! 这 3 款 AI 产品分别是: 浔川AI翻译v3.0&#xff…

Qt时间日期处理与定时器使用总结

一、日期时间数据 1.QTime 用于存储和操作时间数据的类,其中包括小时(h)、分钟(m)、秒(s)、毫秒(ms)。函数定义如下: //注:秒(s)和毫秒(ms)有默认值0 QTime::QTime(int h, int m, int s 0, int ms 0) 若无须初始化时间数据,可…

redis 消息订阅命令

在 Redis 中,消息订阅和发布是一种用于实现消息传递的机制。主要命令包括 SUBSCRIBE、UNSUBSCRIBE、PUBLISH 和 PSUBSCRIBE 等。下面是如何使用这些命令的详细说明和示例。 1. SUBSCRIBE 命令 SUBSCRIBE 命令用于订阅一个或多个频道,以接收这些频道发布…

常见sql语句练习

Tips:之前查看网上的文章感觉太乱了,所以自己整理了一套sql语句来练习,主要也可以拿来应对面试,需要的可以自行下载练习 包含基本语句、聚合函数、模糊查询、范围查询、排序、聚合、分组、分页、子查询、索引和视图、左右连接、双…

无人值守过磅管理系统实现数据实时传递

依据为某公司信息化系统建设前提下,客商平台在线预约称重、车辆到场智能排队系统、空车入场取装车票装车、门岗智能管控系统、建设地磅无人值守、进出货场管理系统、手机APP远程派车、查询报表、查询实时过磅数据,集中式监控管理系统,配合无人…

分享快乐,分享5款我认为好用的软件

​ 分享是奉献的果实,分享是快乐的前提。每天给小伙伴们分享自己认可的软件,也是莫大的一种幸福,今天依然带来五款好用的软件。 1.文本编辑——Notepads ​ Notepads是一款简约高效的文本编辑器,专为Windows10及以上版本设计。它…

Debian linux安装最新版Cmake

直接sudo apt install camke不是最新版本 卸载cmake sudo apt autoremove cmake下载cmake cmake官网 最上面的是候选版本,往下滑是最新稳定版 解压(改成自己的包) tar -zxvf cmake-3.30.0-rc4.tar.gz进入解压后的文件夹 lscd cmake-3.3…

每天一个数据分析题(三百九十二)- 多元线性回归

多元线性回归的正规方程组中系数矩阵X’X的阶数等于?(p个变量,n个观测值) A. n B. p-1 C. p D. n-1 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Py…