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

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.mrgr.cn/news/34648.html

相关文章:

  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • 自动化运维:提升效率与可靠性的关键
  • 新日撸java三百行` 新手小白java学习记录 `Day1
  • Scala中的case class
  • 【go从零单排】Random Numbers、Number Parsing
  • 制作自己的刷题小题库,提高刷题效率
  • 栈的操作:进栈,出栈,读栈顶元素
  • 2024.9.23
  • 流域碳中和技术
  • spring boot文件上传之x-file-storage
  • Django 数据库配置以及字段设置详解
  • 计算机毕业设计之:基于微信小程序的疫苗预约系统的设计与实现(源码+文档+讲解)
  • 论文大杀器!分享4款ai论文写作工具软件
  • Dify创建自定义工具,调用ASP.NET Core WebAPI时的注意事项(出现错误:Reached maximum retries (3) for URL ...)
  • python爬虫案例——抓取链家租房信息
  • JSON合并工具
  • 苍穹外卖学习笔记(九)
  • 微信抢红包设计
  • Vue开发前端图片上传给java后端
  • 19_Python中的上下文管理器
  • QT中添加资源文件(一看就会)
  • Linux常用命令
  • 开关频率与谐振频率对应的模态图
  • 一行命令,一分钟轻松搞定SSL证书自动续期
  • 类中的特殊内容
  • 华为高级交换技术笔记 2024-2025