p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么

镜像其实就是一种轻量级的,可执行的一种软件包,用来打包基于环境开发的软件,里面可以包括代码,环境,数据库,配置文件等信息

如何得到镜像?

  1. 可以从镜像仓库下载比方说dockerhub 比方说harbor镜像仓库等等
  2. 通过自己手动写dockerfile来自己制作镜像
  3. 别人给你

docker镜像加载原理

这里先引用一波老师的笔记
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面是我自己对于这里的理解--------------------------
Docker 和联合文件系统之间的关系主要体现在分层存储和资源复用上。以安装 MySQL 为例,假设你需要安装两个不同版本的 MySQL:MySQL 5.7 和 MySQL 8.0。每个版本的 MySQL 都需要一些基础文件,但这些文件在不同版本之间可能存在重叠。

  1. 初始安装 MySQL 5.7
  • 假设 MySQL 5.7 需要文件 a、b、c 和 d。
  • 这些文件会被存储在一个基础镜像层中。
  1. 安装 MySQL 8.0
  • 假设 MySQL 8.0 需要文件 a、b、c 和 f。
  • 在安装过程中,Docker 会检查现有的镜像层,发现已经存在文件 a、b 和 c。

因此,Docker 只需要下载并添加文件 f 到一个新的层中。
通过这种方式,Docker 利用联合文件系统的特性,实现了文件的复用,大大节省了存储空间。具体来说:

  • 分层存储:每个版本的 MySQL 都有自己的层,基础文件(如 a、b 和 c)被存储在共享的基础层中。
  • 资源复用:新的版本(如 MySQL 8.0)只需要下载和存储与现有版本不同的部分(如文件 f),而不需要重复下载和存储相同的文件。
  • 高效管理: 这种机制不仅节省了存储空间,还简化了镜像管理和更新过程,使得多版本共存变得更加容易和高效。

总结起来,Docker 通过联合文件系统实现了高效的分层存储和资源复用,从而显著提升了存储效率和管理便利性。

docker镜像和虚拟机之间的区别
Docker 镜像与虚拟机的区别

  1. 操作系统复用:
  • 虚拟机:每个虚拟机都有一个完整的操作系统实例,包括内核、系统库和应用程序。因此,虚拟机镜像通常较大,因为它们包含了整个操作系统的所有组件。
  • Docker 容器:Docker 容器共享宿主机的操作系统内核,而不是每个容器都运行一个独立的操作系统实例。这意味着容器只需要包含运行应用程序所需的库和依赖项,而不需要重复包含操作系统的核心组件。
  1. 分层存储:
  • Docker 镜像:Docker 镜像是由多个层组成的。每一层都是只读的,只有最顶层是可写的。这些层可以被多个容器共享,从而节省存储空间。例如,多个基于相同基础镜像(如 Ubuntu 或 Alpine Linux)的容器可以共享同一基础层。
    虚拟机:虚拟机镜像是一个完整的、独立的文件系统,每个虚拟机都需要自己的文件系统和操作系统实例,因此占用更多的存储空间。
    启动速度:
  • Docker 容器:由于容器共享宿主机的内核,启动速度非常快,通常只需几秒钟。
    虚拟机:虚拟机需要启动一个完整的操作系统实例,启动时间较长,通常需要几分钟。
  1. 资源隔离:
  • Docker 容器:使用命名空间和控制组(cgroups)来实现资源隔离和限制,确保每个容器只能访问分配给它的资源。
  • 虚拟机:通过硬件虚拟化技术实现更强的隔离,但这也带来了额外的开销。
  1. 具体例子
    假设有两个 Docker 容器,一个运行 MySQL 5.7,另一个运行 MySQL 8.0:
  • 基础镜像层:两个容器都可以使用同一个基础镜像(如 ubuntu:20.04),这个基础镜像包含了操作系统的基本文件和工具。
  • 中间层:这两个容器可能共享一些中间层,这些层包含了共同的依赖库和配置文件。
  • 特定层:每个容器的特定层包含了各自版本的 MySQL 及其特有的配置文件和数据。
    通过这种方式,Docker 镜像可以非常高效地利用存储空间,同时保持良好的隔离性和可移植性。

总结
Docker 镜像之所以较小,主要是因为它们共享宿主机的操作系统内核,并且通过分层存储机制复用了大量的基础文件和依赖项。这不仅节省了存储空间,还提高了启动速度和管理效率。相比之下,虚拟机需要为每个实例提供完整的操作系统环境,因此体积更大,启动时间更长。

Docker 镜像的分层结构

这里还是先引用老师的笔记
在这里插入图片描述
下面是我自己的理解

  1. 基础镜像:
    每个 Docker 镜像都始于一个基础镜像。基础镜像通常是一个最小化的操作系统环境,例如 CentOS、Ubuntu 或 Alpine Linux。
    基础镜像包含了操作系统的核心文件和必要的工具。
  2. 中间层:
    在基础镜像之上,可以通过添加新的层来安装软件、配置环境等。
    每个新的层都是基于前一层的,并且只包含新增或修改的部分。
  3. 最终层:
    最终层是你的应用程序或服务所在的层,包含了所有必要的文件和配置

这里注意一点docker的镜像都是只读的!!!
在这里插入图片描述

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

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

相关文章

jenkins分布式构建

Jenkins分布式构建是一种将构建任务分散到多个机器上的方法,以提高构建效率和并行处理能力 1. 架构 主节点(Master):负责管理构建任务、调度和监控所有从节点。从节点(Slave):实际执行构建任务…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

C++vector类的模拟实现

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟实现vector类 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前置说明 1. vecto…

密集行人数据集 CrowdHumanvoc和yolo两种格式,yolo可以直接使用train val test已经划分好有yolov8训练200轮模型

密集行人数据集 CrowdHuman voc和yolo两种格式,yolo可以直接使用 train val test已经划分好 有yolov8训练200轮模型。 CrowdHuman 密集行人检测数据集 数据集描述 CrowdHuman数据集是一个专为密集行人检测设计的数据集,旨在解决行人密集场景下的检测挑…

Redis的主从模式、哨兵模式、集群模式

最近学习了一下这三种架构模式,这里记录一下,仅供参考 目录 一、主从架构 1、搭建方式 2、同步原理 3、优化策略: 4、总结: 二、哨兵架构 1、搭建哨兵集群 2、RedisTemplate如何使用哨兵模式 三、分片集群架构 1&#…

SkyWalking 环境搭建部署

架构简介 skywalking agent : 和业务系统绑定在一起,负责收集各种监控数据skywalking oapservice : 是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapserv…

19_Python中的上下文管理器

Python中的上下文管理器 在Python中,上下文管理器(Context Manager)是一种用于资源管理的技术,它可以确保资源在使用后被正确释放,例如文件、网络连接或锁。 上下文管理器(Context Manager)是…

计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)

1,绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火,可有人提问,这么火的语言它的底层又是什么语言编写的呢? python是C语言编写的,它有很多包也是用C语言写的。 所以说,C语言还是很…

中间件:maxwell、canal

文章目录 1、底层原理:基于mysql的bin log日志实现的:把自己伪装成slave2、bin log 日志有三种模式:2.1、statement模式:2.2、row模式:2.3、mixed模式: 3、maxwell只支持 row 模式:4、maxwell介…

全栈开发(四):使用springBoot3+mybatis-plus+mysql开发restful的增删改查接口

1.创建user文件夹 作为增删改查的根包 路径 src/main/java/com.example.demo/user 2.文件夹里文件作用介绍 1.User(实体类) package com.example.demo.user; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.IdType; impo…

Web端云剪辑解决方案,BS架构私有化部署,安全可控

传统视频制作流程繁琐、耗时,且对专业设备和软件的高度依赖,常常让企业望而却步,美摄科技凭借其强大的技术实力和创新能力,推出了面向企业用户的Web端云剪辑解决方案,为企业提供一站式、高效、便捷的视频生产平台。 B…

【docker】在IDEA工具内,远程操作服务器上的docker

一,配置 在服务器上,对docker配置如下内容: vi /usr/lib/systemd/system/docker.service添加如下: -H tcp://0.0.0.0:2375重新加载,并重启docker: #重新加载配置 systemctl daemon-reload# 重启docker …

使用 IntelliJ IDEA 连接到达梦数据库(DM)

前言 达梦数据库是一款国产的关系型数据库管理系统,因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动: 访问达梦在线服务平台网站或通过其他官方渠道…

SkyWalking 持久化链路数据

默认持久化 H2 数据库config/application.yml storage:selector: ${SW_STORAGE:h2} MySQL持久化 修改配置 MySQL 数据库config/application.yml storage:selector: ${SW_STORAGE:h2}mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest&q…

基于yolov8的红外小目标无人机飞鸟检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的红外小目标无人机与飞鸟检测系统是一项集成了前沿技术的创新解决方案。该系统利用YOLOv8深度学习模型的强大目标检测能力,结合红外成像技术,实现了对小型无人机和飞鸟等低空飞行目标的快速、准确检测。 YOLOv8作为YOLO系列的…

Springboot与minio

一、介绍 Minio是一个简单易用的云存储服务,它让你可以轻松地把文件上传到互联网上,这样无论你在哪里,只要有网络,就能访问或分享这些文件。如果你想要从这个仓库里取出一张图片或一段视频,让网站的访客能看到或者下载…

How do you send files to the OpenAI API?

题意:你如何向 OpenAI API 发送文件 问题背景: For fun I wanted to try to make a tool to ask chatgpt to document rust files. I found an issue, in that the maximum message length the API allows seems to be 2048 characters. 为了好玩&…

【深度学习】(3)--损失函数

文章目录 损失函数一、L1Loss损失函数1. 定义2. 优缺点3. 应用 二、NLLLoss损失函数1. 定义与原理2. 优点与注意3. 应用 三、MSELoss损失函数1. 定义与原理2. 优点与注意3. 应用 四、BCELoss损失函数1. 定义与原理2. 优点与注意3. 应用 五、CrossEntropyLoss损失函数1. 定义与原…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下,有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet