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

时间:2017-10-10 21:12:26

标签: docker containers docker-volume ufs

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

2 个答案:

答案 0 :(得分:3)

卷和图像层是Docker中的单独概念。对于您的第一个问题,如果没有使用-v,则不会创建任何卷(暂时忽略Dockerfile格式具有VOLUME动词的事实)。

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

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

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

答案 1 :(得分:1)

卷用于在容器和主机之间安装数据

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

-v不是用于创建音量,只是用于将数据安装到

-v [host_path]:[container_path],

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

container_path ,容器目录路径安装日期自

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

当主机中不存在路径时。但是你已将它安装到容器上,这里有两种情况。

案例1:如果您希望将某些配置文件从您的计算机挂载到容器,如果容器在运行时期望该文件,那么它会在日志中引发错误

案例2:如果要将卷从容器装入主机。当cotainer开始运行时,它会在主机中创建一个文件夹,并将数据写入主机安装目录。