docker联合文件系统

author author     2023-03-03     724

关键词:

参考技术A (Union filesystem)联合文件系统允许我们把多个文件系统逻辑上合并成一个文件系统,组成Union filesystem的文件系统不必相同(它们可以是ext2/3/4,vfat,ntfs,jffs...)。overlay是联合文件系统的一种(aufs...),overlay文件系统构建于其他文件系统之上,overlay其实更像是个挂载系统(mount system),功能是把不同的文件系统挂载到统一的路径。

overlay是个分层的文件系统,底层文件系统通常叫 lower ,顶层文件系统系统通常叫 upper ,两者通常合并挂载到 merged 目录,最终用户看到的就是 merged 中的文件。

lower 文件系统是readonly,对 merged 中所有的修改都只对 upper 操作,记住这点很重要。下面我们在linux上创建一个overlay文件系统,用以说明overlay文件系统挂载,文件读写,文件新增和删除。

创建 lower upper merged work 目录,把 lower和upper 挂载到 merged , work 是空目录,必须和 merged 的文件系统类型一样。

挂载: sudo mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work merged/ ,挂载后 merged 目录结构如下:

可以看到 lower 和 upper 中的文件合并到了 merged 中,当 lower 和 upper 有相同路径的文件时, merged 中只显示 upper 中的。也就是说 upper 会遮住 lower 中同名的文件(同路径下)。

overlay提供了对只读文件系统的读写功能,适合用在需要维持一个只读镜像,又需要提供读写功能的系统中,比如openwrt和docker,下面我们介绍docker中overlay的应用。

docker的基础镜像其实就是个readonly的根文件系统,从基础镜像构建的镜像其实都只是把修改部分和基础镜像合并重新打包,我们从ubuntu镜像构建一个具有golang环境的镜像,用来说明overlay在docker中的应用。
Dockerfile 如下:

构建镜像

启动容器

查看容器

查看GraphDriver

从上面可以看到docker采用的是overlay2文件系统,LowerDir有多层。

/var/lib/docker/overlay2/1d65e86e54373a5b01afe28d0878a953fa2e9eb7cd14552a17d4a8628b476978/diff

/var/lib/docker/overlay2/b56e1dd54abdf8300b2f9726e3e92d3b32b78c8bf5b5cd807e27be78c671af40/diff

/var/lib/docker/overlay2/44c045232b8f3510d28965fbebcaad458263855785cc38e1a784a6731df7433d/diff

为什么会有这么多层,其实很好理解,查看Dockerfile中写了哪些规则:

现在我们核对下最地城镜像是否是ubuntu的镜像文件:

ubuntu是基础镜像,没有LowerDir, UpperDir就是我新建ubuntu:golang镜像LowerDir的最底层文件系统

docker02:docker核心技术探索分层联合文件系统(代码片段)

众多周知,Docker容器的文件系统可以由Linux的各种分层联合文件系统提供底层支撑,这种分层联合文件系统通常在一些处于低层的只读文件系统之上叠加一个处于高层的可读写文件系统。下面结合Docker的镜像和容器的相关概念,... 查看详情

docker命名空间控制组及联合文件系统概念

基本架构命名空间控制组联合文件系统 docker底层依赖的核心技术主要包括操作系统的命名空间(Namespace)、控制组(ControlGroups)、联合文件系统(UnionFileSystems)和linux虚拟网络支持。 基本架构docker采用标准的c/s架构,... 查看详情

docker联合文件系统

参考技术A(Unionfilesystem)联合文件系统允许我们把多个文件系统逻辑上合并成一个文件系统,组成Unionfilesystem的文件系统不必相同(它们可以是ext2/3/4,vfat,ntfs,jffs...)。overlay是联合文件系统的一种(aufs...),overlay文件系统构建于其他文... 查看详情

docker的联合文件系统

...于Devicemapper机制实现的。Devicemapper是如何数据存储的?当Docker使用Devicemapper作为文件存储驱动时,Docker将镜像和容器的文件存储在瘦供给池(thinpool)中,并将这些内容挂载在/var/lib/docker/devicemapper/`目录下。这些目录储存Docker的... 查看详情

docker镜像

...uniteseveraldirectoriesintoasinglevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只... 查看详情

docker-4-镜像

...uniteseveraldirectoriesintoasinglevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 特性:一次同时加载多个文件系统,但从外面看起来... 查看详情

docker镜像加载原理

...uniteseveraldirectoriesintoasinglevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只能看... 查看详情

docker系列-第四篇docker镜像(代码片段)

...uniteseveraldirectoriesintoasinglevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只... 查看详情

如何查看dockerhub的所有镜像

参考技术A让我们通过进一步学习Docker镜像来继续我们的Docker之旅。Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导文件系统有什么交... 查看详情

docker入门之镜像管理基础(代码片段)

docker镜像管理基础首发:arppinging一、镜像概述1.1联合挂载在之前的文章我们提到过,容器是基于镜像启动的,镜像的存储驱动是overlay2overlayFS将单个Linux主机上的两个目录合成一个目录,这些目录称为层,统一过程被称为联合挂载... 查看详情

docker镜像讲解(代码片段)

...容,包括代码、运行时、库、环境变量和配置文件。Docker镜像加载原理UnionFS(联合文件系统)UnionFS(联合文件系统):Union文件系统( 查看详情

docker镜像讲解(代码片段)

...容,包括代码、运行时、库、环境变量和配置文件。Docker镜像加载原理UnionFS(联合文件系统)UnionFS(联合文件系统):Union文件系统( 查看详情

docker&kubernetes❀dockerimage镜像原理解析与分层理论说明(代码片段)

文章目录1、联合文件系统-UnionFS2、Docker镜像加载原理2.1Bootfs2.2Rootfs3、分层的镜像3.1容器服务特点4、Commit操作补充镜像Image是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含... 查看详情

docker004镜像和仓库(代码片段)

 Docker004镜像和仓库docker镜像是用来启动容器的构建基石。docker镜像是什么我们先来看一张图:如上图所示,docker镜像采用了分层构建机制:第一层:最底层是一个引导文件系统bootfs,类似于Linux的引导文件系统,用户几乎不... 查看详情

docker-04-镜像(代码片段)

文章目录一、镜像是什么1、unionFs联合文件系统2、Docker镜像加载原理3、分层的镜像4、为啥使用分层的镜像5、docker镜像的特点二、docker镜像的commit操作1、操作解释2、案例演示1、pulltomcat镜像并运行2、做一些修改,该为我们... 查看详情

根据联合文件系统,图像实际上是不是包含另一个图像?

...个图像?【发布时间】:2018-06-0510:13:08【问题描述】:在Docker中,图像是只读图像层的堆栈。我们也知道图像共享图层或其他图像。我的问题是关于这种共享机制的工作原理。图像是否具 查看详情

docker镜像管理基础与基于容器的镜像制作示例(代码片段)

一、Docker镜像  Docker镜像是启动Docker容器的一个非常重要的组件。Docker各组件之间的关系如图:  Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建并启动容器。并且Docker镜像是采用分层构建,联合... 查看详情

02docker镜像(代码片段)

Docker基础2(镜像)一、Docker镜像介绍1.1简介镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要... 查看详情