阅读文档后,我发现自己对如何最好地管理生产应用程序/服务数据感到有些困惑。
似乎有3个选项:
- 只需将卷映射到主机目录(即
-v
参数docker run
) - 为数据创建一个 docker 容器镜像(即单独的容器和
--volumes-from
) - 创建一个 docker 卷(即
docker volume create
)
现在,似乎公认的做法是选项#2,但后来我想知道#3 的目的是什么。
尤其是您如何正确处理这些场景,docker volume
在每种情况下使用数据卷容器还是更好?
- 您需要服务器中单独的卷和/或存储层中的应用程序数据
- 备份
- 恢复数据
从 Docker 1.9 开始,使用Volumes API (
docker volume create --name mydata
) 创建命名卷优于数据卷容器。截至 2016 年 2 月,Docker卷文档已严重过时。Docker 的人自己建议数据卷容器“不再被认为是推荐的模式”、“命名卷应该能够在大多数(如果不是全部)情况下替换仅数据卷”和“我看不出有什么理由使用仅数据容器。”我认为#2 和#3 几乎是一回事,主要区别在于#3 没有停止的容器(字面意思是,只是一个命名卷)。例如,您可以创建一个命名卷并执行与 #2 类似的操作
-v
。创建命名卷:
从容器挂载一些数据并将其写入该卷:
然后,您可以将相同
test
的卷挂载到另一个容器中并读取数据:此处的优点是,如果您删除仅数据容器,该卷不会意外消失。您现在使用
docker volume
子命令对其进行管理。它还为将来的卷驱动程序打开了可能性,因此您可以在主机之间进行共享卷(即 NFS 上的命名卷)。这方面的例子可能是Flocker和Convoy。具体到您关于移动或备份数据的观点,Convoy 具有用于备份数据的特定子命令,并允许在您的主机外部的 NFS 或 EBS 上进行存储。
出于这个原因,我认为更新的方式(Docker 1.9+)是使用命名卷而不是纯数据容器。