大家好,我是张晋涛。
上周在我的交流群里有个小伙伴问到了 Overlay2 相关的问题,这篇就来介绍一下。(想进群的可以留言)
本节,我将为你介绍 Docker 现在推荐使用的存储驱动 Overlay2,在开始之前,你可以执行以下命令来查看 Docker 正在使用的存储驱动:
(MoeLove) ➜ ~ docker info --format '{
{.Driver}}'
overlay2
如果你看到的结果也是 overlay2
说明你的 Docker 已经在使用 overlay2 存储驱动了。我在个人工作站上用的是 btrfs,这是因为自从 Fedora 33 开始,btrfs 就成为了 Fedora 默认的文件系统。不过服务器上就都是 overlay2 了。
你也可能会看到其他不同的结果,可以在启动 docker daemon 的时候,通过 --storage-driver
参数进行指定,也可以在 /etc/docker/daemon.json
文件中通过 storage-driver
字段进行配置。
目前对于 Docker 最新版本而言,你有以下几种存储驱动可供选择:
overlay2
fuse-overlayfs
btrfs
zfs
aufs
overlay
devicemapper
vfs
但它们对于你使用的文件系统之类的都有不同的要求,且实现方式也不尽相同。我以本节的重点 overlay2
存储驱动为例,它需要你使用 Linux 4.x 以上版本的内核,或者是对于 RHEL/CentOS 等需要使用 3.10.0-514 以上的内核(旧版本中存在一些兼容性问题,我在之前的文章中有提到过)。
同时,它支持你使用 ext4 的文件系统,或者增加了 ftype=1
的 xfs 文件系统。可以通过 docker info
进行得到文件系统相关的信息。
# 省略了部分输出
(MoeLove) ➜ ~ docker info
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
存储驱动的作用
前面虽然已经聊了如何设置和检查当前在用的存储驱动,但尚未介绍为何一定要使用存储驱动,以及它的作用。
还记得我在之前的文章《万字长文:彻底搞懂容器镜像构建》中为你介绍的 Docker 如何存储镜像相关的内容吗,如果忘了可以回头复习一下。
Docker 将容器镜像做了分层存储,每个层相当于包含着一条 Dockerfile 的指令。而这些层在磁盘上的存