返回顶部
首页 > 资讯 > 服务器 >详解docker容器的层的概念
  • 338
分享到

详解docker容器的层的概念

2024-04-02 19:04:59 338人浏览 独家记忆
摘要

目录01 容器的一致性02 层的概念03 分层设计的优点    今天我们看看容器的层的概念。     上一节中,我们知道了

    今天我们看看容器的层的概念。

    上一节中,我们知道了,容器是一个进程,在这个进程的基础上,添加了下面3个部分:

1、启动linux Namespace的配置实现与物理机的隔离。

2、设置Cgroups参数限制容器的资源。

3、生成系统文件目录,也就是rootfs文件,也叫镜像文件

    这里需要备注的是:rootfs只是容器需要使用的基本文件的组合,并不包括操作系统内核,容器的操作系统内核依旧是使用宿主机的内核。当然,rootfs的存在,并不是没有意义,它的存在,使得容器拥有了一个最主要的性能:一致性。

01 容器的一致性

    容器的rootfs打包了操作系统的所有文件和目录,包含了所有的依赖,有了这个特性,就使得容器无论在本地、云端,用户只需要解压打包好的容器镜像,那么应用运行的环境就被搭建好了。

    这就是容器的一致性。

02 层的概念

    "我之所以看的远,是因为我站在巨人的肩膀上",牛顿曾经这句话在今天也依旧适用。"不要做重复造轮子的人",在我们开发应用的时候,我们只需要借助Linux操作系统去开发即可,我们不需要为了跑我们的应用,重新开发一个Linux系统。

     在容器的使用过程中,如果我们已经存在一个已有的Mysql容器镜像,里面有数据A;此时,其他人也想要一个mysql容器镜像,导入他们的数据B,这个时候,我们只需要在我们自己的Mysql容器删除数据A,再重新导入数据B即可。

      在上面描述的场景中,一旦删除数据A,导入数据B,那么这个容器我们自己就不能用了,因为数据A已经删除了。这显然不是我们想要的结果。很明显,数据集A和数据集B都需要的是一个安装了MySQL,但是没有数据的容器镜像(也就是rootfs)。

    Docker软件在设计的时候,引入了"层"的概念,很巧妙的解决了这个问题。

    "层"的概念是通过联合文件系统AuFS来实现的,全称是Advance UNIOnFS。它的概念不难理解,举例如下:

目录1包含文件a,文件c

目录2包含文件b,文件c

通过联合文件方式,将目录1和目录2挂在在目录3上,此时,目录3拥有文件a、b、c三个文件。

此时,如果在目录3中对文件a、b、c进行修改,对应的目录1和目录2也会生效。

     如何通过"联合文件系统"实现层,这个问题其实比较复杂,留给有兴趣读者自己思考吧,这里,我们只需要了解层的概念是通过联合文件系统实现的就行。

下面是一个mysql基础镜像的"层"的例子:


[root@VM-0-14-Centos ~]# docker image inspect docker.io/mysql 
[
    {
        "Id": "sha256:db2b37ec6181ee1f367363432f841bf3819d4a9f61d26e42ac16e5bd7ff2ec18",
        "RepoTags": [
            "docker.io/mysql:latest"
        ],
......
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c",
                "sha256:329fe06a30f03f9131ce8d9db2e8a9f725b18efe3457d6f015e1c4d8a3f41a0a",
                "sha256:ec8c80284c72bcf47ffedc0dde4d5792de761d52f974c30d37d52b9ac00e8a2a",
                "sha256:9dae2565e824235798981525d6ff9114817b7139c073e0d216b00ae9e58f74d0",
                "sha256:36b89ee4c647b9c21de8b5476b4922efc873aba69705c169e1a3edcf9128679b",
                "sha256:c21e35e55228365b268f57fac382a6e991db216cb03D9b7079496f5498956ab0",
                "sha256:15b463db445cb750fa6bc908a41fd18e38c4d2a02a978b66beb598c4f3f57b95",
                "sha256:7832ac00d41eda3a773a18408dea0b8e05ddbdd3a1e94afef3b6e3dc6444b7bb",
                "sha256:7f893b7c04ac2f939737d2da4e15af796c7acc0fd10c2951d9ae5bf33ceec2dc",
                "sha256:060fef62a228fff7e9dc3b7008bc9089e642ef29dc699f7e90c36ced5b2e75c6",
                "sha256:af6e790b82373cc65ca73efe5cc8945731525a9dcae6deeea2a5a5802561a72a",
                "sha256:9b0377a95c0e0bd5aa5b220449d17333faaa0e2bd7e8b93565beeadbf3906646"
            ]
        }
    }
]

可以看到,RootFS字样的就是容器的文件系统,Layers就是“层”。

那么一个docker容器镜像,分为哪些层呢???

按照功能的不同,主要分为只读层、init层和读写层。

只读层:

只读层的挂载方式都是只读的,这些层都是以增量的方式挂载了操作系统的一部分。

可读写层:

它是这个镜像的最顶层,它的挂载方式为读写,没有写入文件之前,这个目录是空的,而一旦在容器里面执行了写操作,你修改的内容就会通过增量的方式出现在这个层中。

init层:

init层是docker专门生成的一个内部层,主要是存放/etc/hosts、/etc/resolv.conf等文件的。

之所以存放这些特定文件,是因为这些文件本来是操作系统的一部分,但是用户的应用程序往往会修改这些文件,这些修改只对当前容器有效,我们不希望docker commit的时候,将这些改变同读写层一起提交掉。

几点注意:

1、用户执行docker commit的时候,只会提交读写层的内容。

2、如果我们要删除一个只读层文件a.txt,那么我们只需要在读写层写一个同名的文件.wh.a.txt,这样,a.txt这个文件就会被.wh.a.txt这个文件给遮挡起来,实现了删除的目的。

03 分层设计的优点

   通过分层设计,增量式数据操作,每次拉取、修改的内容,比完整的操作系统小;

   底层只读层的共享,让多个容器镜像使用的总空间,也比每个容器镜像的总和要小;

   同时,基于容器镜像的团队协作,可以将各个公司,不同领域的人联系起来,更加快速的迭代出新的功能。

以上就是详解docker容器的层的概念的详细内容,更多关于docker容器的层的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解docker容器的层的概念

本文链接: https://lsjlt.com/news/123934.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解docker容器的层的概念
    目录01 容器的一致性02 层的概念03 分层设计的优点    今天我们看看容器的层的概念。     上一节中,我们知道了...
    99+
    2024-04-02
  • Docker基本概念和底层原理解析
    目录1、Docker的底层原理2、Docker中常用的基本概念3、run命令的运行流程4、为什么Docker比VM快Docker架构图: 我们依照Docker架构图进行Docker基...
    99+
    2024-04-02
  • C++string容器基本概念详解
    string基本概念 本质: string是C++风格的字符串,而string本质上是一个类 string和char*区别: char*是一个指针 string是一...
    99+
    2024-04-02
  • springmvc分层领域模型概念详解
    目录1.为什么出现分层领域模型这个东西?2.分层领域模型有哪些?3.分层领域模型的简单理解3.1 VO和DTO的区别3.2BO和DTO的区别4.总结本文核心为分层领域模型(VO , ...
    99+
    2024-04-02
  • Docker的概念是什么
    这篇文章主要为大家展示了“Docker的概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Docker的概念是什么”这篇文章吧。Docker基本概念: 镜像(Image),容器(Conta...
    99+
    2023-06-02
  • Docker基本概念和底层原理的示例分析
    这篇文章将为大家详细讲解有关Docker基本概念和底层原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Docker架构图:我们依照Docker架构图进行Docker基础概念的说明。1、Dock...
    99+
    2023-06-29
  • Spring中的底层架构核心概念类型转换器详解
    目录1.类型转换器作用2.自定义类型转换器2.1.在spring中怎么用呢?2.1.1 用法2.1.2 解析3.ConditionalGenericConverter4.总结1.类型...
    99+
    2022-12-27
    Spring类型转换器 Spring底层架构
  • linux容器的概念是什么
    这篇文章主要讲解了“linux容器的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux容器的概念是什么”吧! l...
    99+
    2023-03-19
    linux
  • J2ME与JVM的概念详解
    这篇文章主要介绍“J2ME与JVM的概念详解”,在日常操作中,相信很多人在J2ME与JVM的概念详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”J2ME与JVM的概念详解”...
    99+
    2024-04-02
  • docker和jenkins的概念是什么
    这篇文章主要讲解了“docker和jenkins的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“docker和jenkins的概念是什么”吧! ...
    99+
    2024-04-02
  • laravel服务容器的概念是什么
    这篇文章主要介绍“laravel服务容器的概念是什么”,在日常操作中,相信很多人在laravel服务容器的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel服务容器的概念是什么”的疑惑有所...
    99+
    2023-06-29
  • C++容器适配器的概念与示例
    目录一. 什么是适配器与容器适配器二. 理解容器适配器stack的模拟实现queue的模拟实现一. 什么是适配器与容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的,多数人...
    99+
    2023-01-14
    C++容器适配器 C++适配器
  • CSS 中层叠概念的示例分析
    这篇文章将为大家详细讲解有关CSS 中层叠概念的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。屏幕是一个二维平面,然而HTML元素却是排列在三维坐标系中,x为水平...
    99+
    2024-04-02
  • Node.js的4个基本概念详解
    本篇内容主要讲解“Node.js的4个基本概念详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的4个基本概念详解”吧!1.非阻塞或异步I/O由于...
    99+
    2024-04-02
  • Spring之底层架构核心概念Environment及用法详解
    目录1.Environment作用2.用法2.1 systemEnvironment 和 systemProperties2.2 MutablePropertySources3.实际...
    99+
    2022-12-27
    Spring底层架构Environment Spring Environment Spring底层架构
  • HTTP链路层,网络层,传输层和应用层的概念是什么
    这篇文章主要介绍“HTTP链路层,网络层,传输层和应用层的概念是什么”,在日常操作中,相信很多人在HTTP链路层,网络层,传输层和应用层的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • ASP.NET数据访问层的概念是什么
    本篇内容主要讲解“ASP.NET数据访问层的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET数据访问层的概念是什么”吧!如果不使用ASP.NET数据访问层,那么你的代码里会...
    99+
    2023-06-17
  • Python 二叉树的概念案例详解
    二叉树简介 关于树的介绍,请参考:https://www.jb51.net/article/222488.htm 一、二叉树简介 二叉树是每个节点最多有两个子树的树结构,是一种特殊的...
    99+
    2024-04-02
  • 详解Vue input model的概念和用法
    Vue.js是一种流行的JavaScript框架,它提供了许多方便的功能来简化前端开发。其中,Vue的input model是一种非常方便的方法,可以允许您跟踪输入字段的状态,并使其更容易进行验证。在本文中,我们将介绍Vue input m...
    99+
    2023-05-14
  • 基于java中集合的概念(详解)
    集合是储存对象的,长度可变,可以封装不同的对象迭代器: 其实就是取出元素的方式(只能判断,取出,移除,无法增加)就是把取出方式定义在集合内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类.二每一个容器的数据结构不...
    99+
    2023-05-31
    java 集合 概念
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作