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

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

在Docker中,卷和图像层是不同的概念。 对于你的第一个问题, ,没有-v正在使用(没有考虑Dockerfile格式确实有VOLUME动词的事实)。

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

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

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

如果我运行docker容器没有任何-v参数将创build任何卷?

-v不是用于创build卷,只是为了从中挂载数据

-v [host_path]:[container_path],

这里是host_path ,你的服务器目录的path,你想要数据到哪里

container_path ,容器目录path的挂载date从

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

当path在主机中不存在时。 但是你把它装到容器里,这里有两种情况。

情况1:如果你想从你的机器装载一些configuration文件到容器,如果容器在运行时期望这个文件,那么它会在日志中抛出错误

情况2:如果要从容器挂载卷到主机。 当cotainer开始运行时,它会在主机上创build一个文件夹,并将数据写入主机安装目录。