在Docker Compose文档here中,您有以下与volumes
文件的docker-compose.yml
部分相关的示例:
volumes:
# (1) Just specify a path and let the Engine create a volume
- /var/lib/mysql
# (2) Specify an absolute path mapping
- /opt/data:/var/lib/mysql
# (3) Path on the host, relative to the Compose file
- ./cache:/tmp/cache
# (4) User-relative path
- ~/configs:/etc/configs/:ro
# (5) Named volume
- datavolume:/var/lib/mysql
哪种语法会生成 bind mount 并生成 docker volume ? 在文档的某个地方,这两个概念是严格区分的,但在这个地方它们混合在一起......所以我不清楚。
答案 0 :(得分:2)
每当你在评论中看到“音量”时,它就会create a volume:所以(1)和(5)。
如果评论中没有卷,则大约为a bind mount。
documentation regarding volumes in docker-compose is here:
装入主机路径或命名卷,指定为服务的子选项。
您可以将主机路径作为单个服务定义的一部分进行安装,而无需在顶级卷密钥中定义它。
但是,如果要在多个服务中重用卷,请在top-level volumes key中定义命名卷。
顶级volumes键定义命名卷,并从每个服务的卷列表中引用它。这将取代早期版本的Compose文件格式中的volumes_from。有关卷的一般信息,请参阅Use volumes和Volume Plugins。
答案 1 :(得分:1)
这是两个完全不同的概念。卷意味着给定目录将在容器运行之间保持不变。想象一下MySQL数据库。您不想丢失数据。另一方面,有一个绑定挂载,您可以将本地目录附加到容器中的目录。如果容器在那里写东西,它将出现在你的文件系统中,反之亦然(同步)。
作为旁注,卷只不过是计算机上目录的符号链接:)(默认情况下为/var/lib/docker/volumes/...
目录)