Docker Compose:哪种语法产生一个生成卷的绑定挂载

时间:2018-02-19 20:25:13

标签: docker syntax docker-compose volumes

在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 ? 在文档的某个地方,这两个概念是严格区分的,但在这个地方它们混合在一起......所以我不清楚。

2 个答案:

答案 0 :(得分:2)

每当你在评论中看到“音量”时,它就会create a volume:所以(1)和(5)。

如果评论中没有卷,则大约为a bind mount

https://docs.docker.com/storage/images/types-of-mounts-bind.png

documentation regarding volumes in docker-compose is here

  

装入主机路径或命名卷,指定为服务的子选项。

     

您可以将主机路径作为单个服务定义的一部分进行安装,而无需在顶级卷密钥中定义它。

     

但是,如果要在多个服务中重用卷,请在top-level volumes key中定义命名卷。

     

顶级volumes键定义命名卷,并从每个服务的卷列表中引用它。这将取代早期版本的Compose文件格式中的volumes_from。有关卷的一般信息,请参阅Use volumesVolume Plugins

答案 1 :(得分:1)

这是两个完全不同的概念。卷意味着给定目录将在容器运行之间保持不变。想象一下MySQL数据库。您不想丢失数据。另一方面,有一个绑定挂载,您可以将本地目录附加到容器中的目录。如果容器在那里写东西,它将出现在你的文件系统中,反之亦然(同步)。

作为旁注,卷只不过是计算机上目录的符号链接:)(默认情况下为/var/lib/docker/volumes/...目录)