docker的联合文件系统

author author     2023-03-03     651

关键词:

参考技术A Devicemapper 是 Linux 内核提供的框架,从 Linux 内核 2.6.9 版本开始引入,Devicemapper 与 AUFS 不同,AUFS 是一种文件系统,而Devicemapper 是一种映射块设备的技术框架。

Devicemapper 提供了一种将物理块设备映射到虚拟块设备的机制,目前 Linux 下比较流行的 LVM (Logical Volume Manager 是 Linux 下对磁盘分区进行管理的一种机制)和软件磁盘阵列(将多个较小的磁盘整合成为一个较大的磁盘设备用于扩大磁盘存储和提供数据可用性)都是基于 Devicemapper 机制实现的。

Devicemapper是如何数据存储的?
当 Docker 使用 Devicemapper 作为文件存储驱动时,Docker 将镜像和容器的文件存储在瘦供给池(thinpool)中,并将这些内容挂载在 /var/lib/docker/devicemapper/` 目录下。
这些目录储存 Docker 的容器和镜像相关数据,目录的数据内容和功能说明如下:

Docker 的 Devicemapper 模式有两种:第一种是 loop-lvm 模式,该模式主要用来开发和测试使用;第二种是 direct-lvm 模式,该模式推荐在生产环境中使用。
默认使用 loop-lvm 模式。

1.使用以下命令停止已经运行的 Docker:

2.编辑 /etc/docker/daemon.json 文件,如果该文件不存在,则创建该文件,并添加以下配置:

其中 directlvm_device 指定需要用作 Docker 存储的磁盘路径,Docker 会动态为我们创建对应的存储池。例如这里我想把 /dev/xdf 设备作为我的 Docker 存储盘,directlvm_device 则配置为 /dev/xdf。
3.启动 Docker:

4.验证 Docker 的文件驱动模式:
使用 docker info 查看,当看到 Storage Driver 为 devicemapper,并且 Pool Name 为 docker-thinpool 时,这表示 Devicemapper 的 direct-lvm 模式已经配置成功。

overlay2 是目前Docker 官方推荐的文件系统,也是目前安装 Docker 时默认的文件系统。

overlay2 和 AUFS 类似,它将所有目录称之为层(layer),overlay2 的目录是镜像和容器分层的基础,而把这些层统一展现到同一的目录下的过程称为联合挂载(union mount)。overlay2 把目录的下一层叫作lowerdir,上一层叫作upperdir,联合挂载后的结果叫作merged。

l目录包含缩短的层标识符作为符号链接。这些标识符用于避免达到mount命令参数的长度限制。

镜像层的 link 文件内容为该镜像层的短 ID,diff 文件夹为该镜像层的改动内容,lower 文件为该层的所有父层镜像的短 ID。diff 目录为容器的读写层,容器内修改的文件都会在 diff 中出现,merged 目录为分层文件联合挂载后的结果,也是容器内的工作目录。

通过 docker image inspect 命令来查看某个镜像的层级关系

使用 docker inspect 命令来查看容器的工作目录:

overlay2 的工作过程中对文件的操作分为读取文件和修改文件。
容器内进程读取文件分为以下三种情况。

overlay2 对文件的修改采用的是写时复制的工作机制,这种工作机制可以最大程度节省存储空间。具体的文件操作机制如下。

如何清理docker呢?由于版本较古老,没有 prune 命令。使用以下脚本来清理:

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主机上的两个目录合成一个目录,这些目录称为层,统一过程被称为联合挂载... 查看详情

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

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

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

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

docker镜像讲解(代码片段)

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

docker镜像讲解(代码片段)

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

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

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

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

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

02docker镜像(代码片段)

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

dockerstoragedriveroverlayfs

...文件系统,与AUFS的实现类似但是比AUFS的存储速度更快。docker基于OverlayFS提供两种存储驱动:overlay和更加新的稳定的overlay2.推荐使用overlay2,因为overlay2更加高效。1.停止Docker服务2.备份docker存储的文件3.如果要使用与/var/lib/所使用... 查看详情