Docker compose v3:卷类型挂载和绑定的区别

14

我正在使用docker-compose语法版本3,并希望使用一些卷。有关卷的长语法的文档说明如下:

type:挂载类型volumebind

但从未完全解释它们之间的区别,这是什么?


那份文档自2017年以来有没有改变,还是我太蠢了找不到“type”被称为“volume”或“bind”的提及?(我有一些旧的docker-compose文件,正在尝试理解其内容。) - MDickten
1个回答

14

bind更容易理解。它将主机路径(例如/data)挂载到容器内部的一个路径(例如/opt/app/data)。/data可以是任何内容,可能是NFS上挂载的路径,也可能是本地主机路径。

volume挂载是使用命名卷的地方。

通常情况下,您需要使用卷驱动程序,但是您还可以使用默认的本地卷驱动程序获取主机挂载路径,方法如下:

docker volume create data docker run -d -v data:/opt/app/data nginx

如果仅运行以下命令,则命名卷也可以是匿名的: docker run -d -v /opt/app/data nginx

如果运行docker volume ls,则Docker会为匿名卷创建一个自动生成的长名称。

在docker-compose中,您只需要按照以下方式使用它:

web:
  image: nginx:latest
  volumes:
    /data:/opt/app/data
    data:/opt/app/data1

volumes:
  data:

它在下面的部分进一步配置了吗? 卷: 数据: - HermanTheGermanHesse
1
我曾经花了很长时间才找到挂载的卷(volume)和绑定(bind)类型之间的区别。我搜索的原因是Jenkins Docker镜像,其中jenkins_home文件夹被挂载为一个卷(volume)。该文件夹充满了数据,但这些数据来自于镜像本身。当我尝试绑定主机文件夹时,它是空的,所以Jenkins失败了。在我看来,主要的区别是卷(volume)可以在从镜像创建容器时填充数据,而绑定(bind)只是将数据注入容器的一种挂载方式。并且卷(volume)是由镜像创建的,而绑定(bind)则由用户决定。 - geer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接