Docker:创建一个数据卷容器,而不是简单地使用带有“run”的 -v 标志



我正在阅读 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)来实现卷与使用"数据卷容器"(方法 2)实现卷有什么区别?

似乎这两种方式您都只是在创建一个在映像的非持久性容器的生命周期中持久的卷,如果我错了,请纠正我。

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

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

然后,有"技巧"(如此处所述。例如:

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

因此,您创建/管理卷的方式可能会有所不同,但它本质上始终是一个卷。

最新更新