Docker:创建一个数据卷容器vs使用带有`run`的-v标志?

时间:2016-04-20 12:15:14

标签: docker volumes

我正在阅读Docker关于卷的用户指南部分:https://docs.docker.com/engine/userguide/containers/dockervolumes/

在第一部分,它指出了如何创建和添加卷到容器,我将调用"方法1":

  

您可以多次使用-v来装入多个数据卷。现在,在Web应用程序容器中安装单个卷。

$ docker run -d -P --name web -v /webapp training/webapp python app.py
  

这将在/ webapp的容器内创建一个新卷。

稍后再讨论数据量容器,我将调用"方法2":

  

如果您想要在容器之间共享某些持久性数据,或者想要从非持久性容器中使用,那么最好创建一个命名的数据卷容器,然后从中挂载数据。

$ docker create -v /dbdata --name dbstore training/postgres /bin/true

通过简单地使用-v命令与docker run(方法1)v.s.实现卷之间的区别是什么?使用"数据卷容器"来实现卷。 (方法2)?

似乎你只是创建一个在图像的非持久性容器的生命周期中持久的卷,如果我错了就纠正我。

1 个答案:

答案 0 :(得分:1)

根据我的理解,至少从docker 1.12开始,卷总是一样的:一些持久性数据存储在主机的某个地方。但是管理卷有不同的方法:

  1. 创建它并将其挂载到容器(方法1)。这样,当您想将一个容器的卷装入另一个容器时,可以使用“volumes-from”
  2. 使用docker volume create创建卷,然后让docker管理它。它将被保存在主机系统的某个地方(例如/ var / lib / docker),但你并不关心确切的位置和方式。
  3. 将主机目录挂载为卷,在这种情况下,您知道它在主机上的安装位置,并且您对此负有“责任”。
  4. 然后,有“技巧”(如here所述。例如:

      

    “如果通过docker run -v my-precious-data:/ data imageName从映像运行新容器来创建命名卷,则/ data下容器内的数据将被复制到指定卷中。“

    因此,您创建/管理卷的方式可能略有不同,但它基本上总是一个卷。