如何决定泊坞窗卷容器和泊坞窗卷?

阅读完文档后,我发现自己对如何最好地pipe理高效的应用程序/服务数据感到困惑。

似乎有3个选项:

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

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

特别是如何正确处理docker volume这些情况,使用数据卷容器还是更适合每种情况?

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

我认为#2和#3是几乎相同的东西,主要的区别是没有停止的容器#3(这是字面上,只是一个命名卷)。 例如,你可以创build一个命名的卷,并做类似的事情,你会用#与#2而不是做。

创build一个命名卷:

 $ 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子命令来pipe理它。

 $ d volume ls DRIVER VOLUME NAME local test 

它还打开了音量驱动程序的可能性,以便您可以在主机之间执行共享卷(即通过NFS命名的卷)。 这个例子可能是Flocker和Convoy 。 为了您的具体移动或备份数据,Convoy具有用于备份数据的特定子命令,并允许在主机外部的NFS或EBS上进行存储。

出于这个原因,我认为更新的学校方式(Docker 1.9+)是使用命名卷而不是数据专用容器。

从Docker 1.9开始,使用Volumes API ( docker volume create --name mydata )创build命名卷优于数据卷容器。 截至2016年2月,Docker 卷的文档已经过时了。 Docker自己的人build议数据卷容器“ 不再被认为是推荐的模式” ,“ 在大多数(如果不是全部)的情况下卷名应该能够代替数据卷 ”,“ 没有理由我可以看到使用数据专用容器“ 。