提问
a)匿名卷使用数据容器时,您可以使用这样的匿名卷
version '2'
services:
consumer:
volume_from:
- data-container:rw
data-container:
image: cogniteev/echo
command: echo 'Data Container'
volume:
- /var/www
b)名称卷
或者您可以使用这样的命名卷
version '2'
services:
consumer:
volume_from:
- data-container:rw
data-container:
image: cogniteev/echo
command: echo 'Data Container'
volume:
- my-named-volume:/var/www
volumes:
my-named-volume:
driver: local
我通常与b)一起讨论/解释可能两者的概念问题/缺陷.那么利弊是什么呢?
我们可以比较它们的方面是/可能是:
>便携性
>数据容器的可升级性(为什么我们要升级容器?)
>开始/停止(继续)兼容性?
>多堆栈问题?
>效率(重用量)
对于这个问题https://stackoverflow.com/a/38984689/3625317的讨论,这个问题已经过去了
最佳答案
简短回答:首选命名数据卷,不再需要数据容器,因此不应在任何新项目中使用volume-from.您的命名卷版本正在合并命名和数据容器,它应该是:
version '2'
services:
web:
image: my-web-image
volumes:
- my-named-volume:/var/www
volumes:
my-named-volume:
driver: local
通过合并这两者,您已经添加了一个额外的间接层来到达您指定的卷,而没有任何额外的好处.命名卷是在1.9到replace data containers中创建的,这些卷本身就是一种提供持久数据的有点被黑客攻击的方法.命名卷对数据容器的优点包括:
>您的数据管理与容器管理是分开的,您可以删除所有正在运行的容器,但仍然可以使用您的数据
>可以使用卷驱动程序将数据存储在不同的位置,这意味着您可以将其放在nfs,分布式文件系统甚至本地持久性目录中
>您可以按任何顺序启动和停止任何容器,而不会在容器之间存在依赖关系
>首次创建时,命名卷将接收首先挂载的映像文件系统的副本,与数据容器的行为相同,这意味着它是无缝转换(请注意,这不是主机卷的行为) ,又名绑定安装)
另见this question that also discusses named volumes vs data containers和this answer到另一个类似的问题.我们工作的公司也有blog post on this.