存储驱动与文件系统的概念
aufs、overlay2、btrfs、zfs在Docker中被称为存储驱动,而不是文件系统。存储驱动是Docker用来管理镜像和容器存储的组件,它负责将镜像和容器的数据存储到物理磁盘上,并提供了一些高级功能,如镜像层的共享、增量备份、快照等。
存储驱动可以使用不同的文件系统来存储数据,例如aufs、overlay2、btrfs、zfs等。这些文件系统都是Linux系统中的文件系统,它们都提供了不同的特性和性能,可以根据实际需求进行选择。
在Docker中,存储驱动和文件系统是两个不同的概念,存储驱动是Docker用来管理存储的组件,而文件系统是存储驱动使用的一种存储方式。因此,aufs、overlay2等既可以称为存储驱动,也可以称为文件系统,但是它们更准确的称呼应该是存储驱动。
为什么docker的存储驱动会与linux文件系统名称相同?
Docker的存储驱动与文件系统名称相同,是因为Docker的存储驱动是基于Linux文件系统的联合挂载技术实现的。Docker使用联合挂载技术将多个文件系统层叠在一起,形成一个虚拟的文件系统,从而实现了镜像和容器的存储和管理。
在Docker中,存储驱动是用来管理镜像和容器存储的组件,它负责将镜像和容器的数据存储到物理磁盘上,并提供了一些高级功能,如镜像层的共享、增量备份、快照等。存储驱动可以使用不同的文件系统来存储数据,例如aufs、overlay2、btrfs、zfs等。
这些文件系统都是Linux系统中的文件系统,它们都提供了不同的特性和性能,可以根据实际需求进行选择。但是,由于Docker的存储驱动是基于Linux文件系统的联合挂载技术实现的,因此存储驱动的名称通常与底层文件系统的名称相同。
需要注意的是,存储驱动和文件系统是两个不同的概念,存储驱动是Docker用来管理存储的组件,而文件系统是存储驱动使用的一种存储方式。因此,aufs、overlay2等既可以称为存储驱动,也可以称为文件系统,但是它们更准确的称呼应该是存储驱动。
如何修改docker默认的存储驱动
每个 Docker 容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统。
默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中,所以存储是每个容器的性能和稳定性不可或缺的一个环节。
以往,本地存储是通过存储驱动(Storage Driver)进行管理的,有时候也被称为 Graph Driver 或者 GraphDriver。
虽然存储驱动在上层抽象设计中都采用了栈式镜像层存储和写时复制(Copy-on-Write)的设计思想,但是 Docker 在 Linux 底层支持几种不同的存储驱动的具体实现,每一种实现方式都采用不同方法实现了镜像层和写时复制。
虽然底层实现的差异不影响用户与 Docker 之间的交互,但是对 Docker 的性能和稳定性至关重要。
在 Linux 上,Docker 可选择的一些存储驱动包括 AUFS(最原始也是最老的)、Overlay2(可能是未来的最佳选择)、Device Mapper、Btrfs 和 ZFS。
Docker 在 Windows 操作系统上只支持一种存储驱动,即 Windows Filter。
存储驱动的选择是节点级别的。这意味着每个 Docker 主机只能选择一种存储驱动,而不能为每个容器选择不同的存储驱动。
在 Linux 上,读者可以通过修改 /etc/docker/daemon.json
文件来修改存储引擎配置,修改完成之后需要重启 Docker 才能够生效。
下面的代码片段展示了如何将存储驱动设置为 overlay2。
{ "storage-driver": "overlay2" }
提示:如果配置所在行不是文件的最后一行,则需要在行尾处增加逗号。
如果读者修改了正在运行 Docker 主机的存储引擎类型,则现有的镜像和容器在重启之后将不可用,这是因为每种存储驱动在主机上存储镜像层的位置是不同的(通常在 /var/lib/docker/ <storage-driver>/...
目录下)。
修改了存储驱动的类型,Docker 就无法找到原有的镜像和容器了。切换到原来的存储驱动,之前的镜像和容器就可以继续使用了。
如果希望在切换存储引擎之后还能够继续使用之前的镜像和容器,需要将镜像保存为 Docker 格式,上传到某个镜像仓库,修改本地 Docker 存储引擎并重启,之后从镜像仓库将镜像拉取到本地,最后重启容器。
通过下面的命令来检查 Docker 当前的存储驱动类型。
$ docker system info
<Snip>
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
<Snip>
我的ubuntu20.04虚拟机:
山城矿服务器:
选择存储驱动并正确地配置在 Docker 环境中是一件重要的事情,特别是在生产环境中。
下面的清单可以作为一个参考指南,帮助我们选择合适的存储驱动。同时还可以参阅 Docker 官网上由 Linux 发行商提供的最新文档来做出选择。
- Red Hat Enterprise Linux:4.x版本内核或更高版本 + Docker 17.06 版本或更高版本,建议使用 Overlay2。
- Red Hat Enterprise Linux:低版本内核或低版本的 Docker,建议使用 Device Mapper。
- Ubuntu Linux:4.x 版本内核或更高版本,建议使用 Overlay2。
- Ubuntu Linux:更早的版本建议使用 AUFS。
- SUSE Linux Enterprise Server:Btrfs。
我们需要时刻关注 Docker 文档中关于存储驱动的最新支持和版本兼容列表。尤其是正在使用 Docker 企业版(EE),并且有售后支持合同的情况下,更有必要查阅最新文档。