在 docker 的上下文中,我了解图像的哪些层是什么以及最上面的可写层是什么。如果我在没有任何 -v 参数的情况下运行 docker 容器,是否会创建任何卷?如果我确实指定了一个卷(不是挂载到主机中的某个位置),该卷是否会成为该容器的可写层?
最佳答案
卷和镜像层在 Docker 中是独立的概念。对于您的第一个问题,没有 , 没有 -v
就不会创建卷正在使用(暂时忽略 Dockerfile
格式确实有 VOLUME
动词的事实)。
如果您指定由任何卷驱动程序提供的卷(默认为本地目录,它将绑定(bind)安装到容器文件系统中的目标位置),则该卷与镜像层无关,包括“可写”最顶层由 Docker 引擎中使用的后端存储驱动程序提供。
具体来说,使用中的存储驱动程序控制层堆栈的方式,以及管理顶层“r/w”层的方式。例如,overlay 或 devicemapper 或 btrfs 驱动程序处理图像层的安装以及创建和管理顶层。
通过绑定(bind)安装到文件系统镜像中的现有(或创建)路径,卷在此之外发挥作用。当您退出容器时,这些卷将保留在它们的源位置(例如,对于本地/默认卷驱动程序,在 /var/lib/docker/volumes/<name>
中),并且在使用的存储驱动程序的管理下,未安装的层堆栈将具有修改后的“上部层堆栈的“层”,除非您在退出时删除了容器(--rm
)。这是两个单独管理的概念,卷系统与存储后端驱动程序没有相互作用。
关于docker - Docker 中的容器层和卷有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676119/