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

标签 docker containers docker-volume ufs

在 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/

相关文章:

docker - 即使镜像位于公共(public)注册表中,在本地 VM 上运行 `docker stack deploy` 也会导致 "No such image"错误

C 的容器类/库

Docker-Compose 无法复制 haproxy.cfg

Docker 卷绑定(bind)空卷或将文件转换为文件夹

docker - 当我指定文件时,"docker-compose build"向我显示帮助文本

java - 从 Java 项目的 Docker 镜像运行集成测试

linux - 在 docker 容器中运行 auditd

docker - Dockerfile共享相同的指令,但是从不同的镜像构建

没有卷的 docker-compose 服务

linux - docker : directory mapped in volume is not created with same user of host