一、UnionFS Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 三、AUFS UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文件系统服务。 而 AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀的性能和效率。
这个就是我们要讲的联合文件系统(UnionFS)。 联合文件系统,可以把多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。 UnionFS允许只读和可读写目录并存,就是说可同时删除和增加内容。
AUFS 一开始叫 Another UnionFS,后来又叫 Alternative UnionFS,最后直接改为 Advance UnionFS。 它是对 Linux 原生 UnionFS 的重写和改进。但是无论怎么改,它就是进不了 Linux 的主线。但是,我们可以在 Ubuntu 和 Debian 这些发行版上使用它。 Docker 实现 Docker 的镜像就采用了 UnionFS 技术,从而实现了分层的镜像。 Overlay 和 AUFS 还有 DeviceMapper 都是 UnionFS,在细节上会有所不同,但是不影响理解。 所谓镜像其实就是文件系统,也就是一些目录和文件的组合。 总结 通过上述的方式,我们可以看到 Docker 对 overlay2 的使用其实和我们在 AUFS概念 中的使用是很像的,毕竟都是 UnionFS。
LXC的三大特色:cgroup,namespace和unionFS。 Linux操作系统到目前为止支持的六种namespace:unionFS顾名思义,unionFS可以把文件系统上多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。 要理解unionFS,我们首先要认识bootfs和rootfs。1.bootfilesystem(bootfs):包含操作系统bootloader和kernel。用户不会修改这个文件系统。 不同的Linux版本,实现unionFS的技术可能不一样,使用命令dockerinfo查看,比如我的机器上实现技术是overlay2:看个实际的例子。 这显然不合理;借助Linux的unionFS,宿主机只需要在磁盘上保存一份base镜像,内存中也只需要加载一份,就能被所有基于这个镜像的容器共享。
1 UnionFS综述 1.1 什么是 UnionFS 联合文件系统(Union File System),2004年由纽约州立大学开发,它可以把多个目录内容联合挂载到同一个目录下, AUFS在使用上全兼容UnionFS,而且比之前的UnionFS在稳定性和性能上都要好很多,后来的UnionFS 2.x开始抄AUFS中的功能。 参考链接 unionfs(联合文件系统)笔记-cudaer-ChinaUnix博客 Docker入门篇(三):Docker 镜像 & UnionFS-搜云库技术团队 UnionFS - 知乎 Docker 富士康质检员张全蛋的博客-CSDN博客_docker unionfs Docker之Linux UnionFS - 走看看 联合文件系统(UnionFS)和 镜像分层_途径日暮不赏丶的博客-CSDN博客 镜像分层原理-联合文件系统(UnionFS)_零否的博客-CSDN博客_docker unionfs
AUFS是一种Union File System,所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。 AUFS又叫Another UnionFS,后来叫Alternative UnionFS,后来可能觉得不够霸气,叫成Advance UnionFS。 AUFS在使用上全兼容UnionFS,而且比之前的UnionFS在稳定性和性能上都要好很多,后来的UnionFS 2.x开始抄AUFS中的功能。 那么,这种UnionFS有什么用? 现在当你看过了这个UnionFS的技术后,你是不是就明白了,你完全可以用UnionFS这样的技术做出分层的镜像来。
2.2、什么是`UnionFS` 2.3、各发行版 UnionFS 的实现 2.4、`AUFS`简介 3、参考 Docker 到底为什么这么快!? 哈,很多新名词,莫着急,我们下面会逐步了解 2.2、什么是UnionFS Union File System,简称UnionFS ,是一种为 Linux, FressBSD和NetBSD操作系统设计的, 2.3、各发行版 UnionFS 的实现 Linux各发行版实现的UnionFS各不相同,所以Docker在不同linux发行版中使用的也不同。 2.4、AUFS简介 如下内容摘自 COOLSHELL AUFS又叫Another UnionFS,后来叫Alternative UnionFS,后来可能觉得不够霸气,叫成Advance UnionFS AUFS在使用上全兼容UnionFS,而且比之前的UnionFS在稳定性和性能上都要好很多,后来的UnionFS 2.x开始抄AUFS中的功能。
Docker Engine uses UnionFS to provide the building blocks for containers. Docker Engine can use multiple UnionFS variants, including AUFS, btrfs, vfs, and DeviceMapper. Union文件系统(UnionFS)是通过创建层来操作的文件系统,使它们非常轻量级和快速。Docker引擎使用UnionFS为容器提供构建块。 Docker引擎可以使用多种UnionFS变体,包括AUFS、btrfs、vfs和DeviceMapper。 Docker引擎将名称空间、控制组和UnionFS组合成一个称为容器格式的包装器。默认容器格式为“libcontainer”。
Union file systems 联合文件系统 Union file systems, or UnionFS, are file systems that operate by creating layers Docker Engine uses UnionFS to provide the building blocks for containers. Docker Engine can use multiple UnionFS variants, including AUFS, btrfs, vfs, and DeviceMapper. Container format 容器格式 Docker Engine combines the namespaces, control groups, and UnionFS into a wrapper
目录 Docker镜像 一、Docker镜像是什么 1、UnionFS(联合文件系统) 2、Docker镜像加载原理 3、分层的镜像 4、为什么 Docker 镜像要采用这种分层结构 二、 1、UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
1.1 分层的镜像 1.2 UnionFS(联合文件系统) 1.3 Docker镜像加载原理 1.4 为什么Docker才200M? 1.5 为什么Docker镜像要采用分层结构呢? 1.1 分层的镜像 以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载 1.2 UnionFS(联合文件系统) UnionFS(联合文件系统):Union 文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories 1.3 Docker镜像加载原理 docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
1.1、UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持 对文件系统的修改作为一次提交来一层层的叠加, 联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 1.2、Docker镜像加载原理 Docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
1.1 UnionFS UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下 只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录1.2 镜像加载原理Docker镜像加载原理: Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
这一机制叫做UnionFS。 UnionFS为操作系统下的不同进程提供了虚拟化的一个文件系统。这如何理解呢? 请看下图。 UnionFS能够为这三个不同的进程,提供各自虚拟化的文件系统,以及存放各自依赖的不同版本的ld-linux.so.2动态链接库。 在进程结束后,UnionFS为这些进程提供的虚拟文件系统也将被销毁,因此,进程对自己虚拟化的文件系统的修改,对宿主机不造成任何影响。 那么,我们如果剥离掉hypervisor层,能不能自动化发放利用namespace隔离,设定好CGroups资源配额限制,并通过UnionFS虚拟化出文件系统的一个应用进程实例呢?
1.1 UnionFS UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下 联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 1.2 镜像加载原理 Docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
镜像的存储,讲解了镜像的分层结构以及UnionFS联合文件系统,以及镜像层在UnionFS上的实现。 最小化容器构建,讲解了为什么需要最小化镜像,同时如何进行最小化操作。 Union FileSystem 要了解 Docker 镜像的存储首先必须了解联合文件系统 UnionFS(Union File System),所谓 UnionFS 就是把不同物理位置的目录合并 mount UnionFS 的具体实现有很多种: 早期的UFS AUFS OverlayFS overlay overlay2 具体 Docker 宿主机上使用那种 UnionFS 文件系统驱动,可以通过如下命令查询 既然 UnionFS 就是把不同物理位置的目录合并 mount 到同一个目录中.现在我们通过命令行的方式实现一下 Docker 官网提供 UnionFS 的原理图。 ? 现在通过 mount 命令进行 UnionFS 文件系统的目录挂载。
会做以下几个动作: 首先看本地是否有容器镜像; 如果本地没有容器镜像,则从互联网上的容器镜像库,或从其他地方的容器镜像库,通过http/https的方式拉取容器镜像; 解析获取到的容器镜像,在虚拟的文件系统(UnionFS 也就是说,在运用namespace技术隔离进程,并对进程使用cgroups限制资源配额后,还需要基于容器镜像构建unionfs,才能够运行起用于部署应用的容器实例。 容器中执行的程序对unionfs做的任何修改,都会被暂时保存在可读写层中。举一个栗子: 如容器中执行的程序去修改了 /root/bash.rc 文件,docker会将写行为记录在可读写层中。
AUFS原名为 Another UnionFS,从名称可以看出,AUFS是对 UnionFS的补充。 UnionFS是一个堆栈式的联合文件系统,打包在 Linux发行版中。 但 UnionFS很久不进行更新,同时也存在一些不稳定的问题,因此在 UnionFS的基础之上进行功能完善,推出了一个新版本,名为 AUFS。 当 AUFS发布之后,昀新版的 UnionFS又吸收了 AUFS的很多功能,并随之发布在昀新的UnionFS版本之中。
4.1 是什么4.1.1 是什么4.1.2 分层的镜像4.1.3 UnionFS(联合文件系统)4.1.4 docker镜像的加载原理注意点1:bootfs:引导文件系统bootloader:boot文件系统 《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit5
分层的镜像 以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载 UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS 只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 Docker镜像加载原理 docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS