Docker中container layer和volume有什么区别?

What is the difference between container layer and volume in Docker?

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

体积和图像层在 Docker 中是不同的概念。对于你的第一个问题,no,没有使用 -v 就不会创建任何卷(暂时忽略 Dockerfile 格式确实有 VOLUME 动词).

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

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

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

卷用于在容器和主机之间挂载数据

如果我 运行 docker 没有任何 -v 参数的容器是否会创建任何卷?

-v 不是为了创建卷,只是为了挂载数据 fromto

-v [host_path]:[container_path],

此处host_path,您要将数据挂载到的服务器目录路径

container_path,容器目录路径挂载日期

如果我确实指定了一个卷(不是挂载到主机中的某个位置),该卷是否会成为该容器的可写层?

当主机中不存在该路径时。但是你已经把它挂载到容器里了,这里有两种情况。

案例 1: 如果你想将一些配置文件从你的机器挂载到容器,如果容器在 运行ning 时需要该文件,那么它会在日志

案例 2: 如果你想将卷从容器挂载到主机。当 cotainer 启动 运行ning 时,它会在宿主机中创建一个文件夹,并将数据写入宿主机挂载的目录中。