Docker中的容器层和卷有什么区别?

The*_*nor 3 containers docker docker-volume ufs

在 docker 的上下文中,我了解图像的哪些层以及最上层的可写层是什么。如果我在没有任何 -v 参数的情况下运行 docker 容器,是否会创建任何卷?如果我确实指定了一个卷(它不是主机中某个位置的安装),该卷是否成为该容器的可写层?

Phi*_*l E 6

卷和镜像层在 Docker 中是不同的概念。对于您的第一个问题,,不会在未-v使用的情况下创建卷(暂时忽略Dockerfile格式确实具有VOLUME动词)。

如果您指定由任何卷驱动程序提供的卷(默认为本地目录,它将绑定安装到容器文件系统中的目标位置),则该卷与镜像层无关,包括“可写”最顶层由 Docker 引擎中使用的后端存储驱动程序提供。

具体来说,正在使用的存储驱动程序控制着层堆栈的方式,以及顶层“r/w”层的管理方式。例如,overlay 或 devicemapper 或 btrfs 驱动程序处理图像层的安装以及创建和管理顶层。

卷通过绑定安装到文件系统映像中的现有(或创建)路径而在此之外发挥作用。当您退出容器时,这些卷将保留在它们的源位置(例如,对于本地/默认卷驱动程序, in /var/lib/docker/volumes/<name>)并且卸载的层堆栈将在正在使用的存储驱动程序的管理下具有修改的“上层”层堆栈,除非您在退出时移除了容器 ( --rm)。这是两个单独管理的概念,卷系统与存储后端驱动程序没有相互作用。