Docker:创build一个数据卷容器vs简单地使用-v标志与`run`?

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

在第一部分,它指出了如何创build一个容器并将其添加到一个容器中,我将调用“方法1”:

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

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

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

后来谈到数据容量容器,这个我会叫“方法2”:

如果您想要在容器之间共享某些持久性数据,或者想要使用非持久性容器,则最好创build一个名为“数据容量容器”,然后从中装入数据。

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

以下是我没有得到的,通过简单地使用-v命令和docker run (方法1)来实现卷与通过使用“数据卷容器”(方法2)来实现卷之间有什么区别?

看起来你只是创build一个在图像的非持久化容器的生命中持久化的卷,如果我错了,纠正我。

根据我的理解,至less从Docker 1.12开始,卷总是一样的东西:一些持久的数据存储在主机的某处。 但是有不同的方法来pipe理卷:

  1. 创build它并将其安装到容器(您的方法1)。 有了这个,你可以使用“卷来源”,当你想将一个容器的卷装入另一个容器
  2. 使用docker volume create ,并让dockerpipe理它。 它将被保存在主机系统的某个地方(例如/ var / lib / docker),但是你并不关心在哪里以及如何。
  3. 将主机目录挂载为一个卷,在这种情况下,您可以知道它在主机上的安装位置,并且是“负责任”的。

然后,有“窍门”(如这里所述,例如:

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

所以你创build/pipe理音量的方式可能会有所不同,但它本质上总是一个音量。