如何在 docker volume 容器和 docker volume 之间做出选择?

如何在 docker volume 容器和 docker volume 之间做出选择?

阅读文档后,我发现自己对于如何最好地管理生产应用程序/服务数据有些困惑。

似乎有 3 个选择:

  1. 只需将卷映射到主机目录(即-v的参数docker run
  2. 为数据创建docker容器镜像(即单独的容器和--volumes-from
  3. 创建docker卷(即docker volume create

现在,似乎可接受的做法是选项#2,但我想知道#3的目的是什么。

特别是如何正确处理这些场景,docker volume以及在每种情况下使用数据卷容器还是这样更好?

  • 您需要将应用程序数据放在服务器中的单独卷和/或存储层中
  • 备份
  • 恢复数据

答案1

我认为 #2 和 #3 几乎是同一件事,主要区别在于 #3 没有停止的容器(它实际上只是一个命名卷)。例如,您可以创建一个命名卷,并执行与 #2 类似的操作-v

创建命名卷:

$ docker volume create --name test

从容器中挂载一些数据并写入该卷:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

然后,您可以将同一个test卷安装到另一个容器中并读取数据:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

这样做的好处是,如果您删除仅包含数据的容器,卷不会意外消失。现在您可以使用docker volume子命令来管理它。

$ d volume ls
DRIVER              VOLUME NAME
local               test

它还为将来的卷驱动程序提供了可能性,因此您可能能够在主机之间共享卷(即通过 NFS 命名卷)。这方面的例子可能是弗洛克护航关于您提到的移动或备份数据的具体问题,Convoy 有专门用于备份数据的子命令,并允许将其存储在主机外部的 NFS 或 EBS 上。

因此,我认为更新颖的方法(Docker 1.9+)是使用命名卷而不是仅数据容器。

答案2

从 Docker 1.9 开始,使用卷 APIdocker volume create --name mydata)比数据卷容器更受欢迎。截至 2016 年 2 月,Docker卷文档已经过时了。Docker 的人们自己建议使用数据卷容器“不再被视为推荐模式” “在大多数情况下(如果不是全部),命名卷应该能够替换仅包含数据的卷,“ 和 ”我看不出有任何理由使用仅数据容器

相关内容