【发布时间】:2016-09-07 00:25:45
【问题描述】:
我正在阅读 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)实现卷有什么区别?使用“数据卷容器”实现卷(方法二)?
您似乎只是在创建一个在图像的非持久性容器的生命周期中持久的卷,如果我错了,请纠正我。
【问题讨论】:
-
我的理解是
create创建了一个容器但不运行它,所以你得到一个不消耗任何CPU的纯数据容器。然后,您可以与许多其他容器共享此容器中的卷。 -
@warmoverflow 实际上你可以
create一个卷而不将它放入容器中,当我发布问题时我很困惑所以不是很清楚,但不同的是在方法 1 中你不需要'不要将卷放入容器中,在方法 2 中将其放入容器中,使其成为“数据容器”或其他东西。 -
如文档所述,在方法 1 中,卷位于容器内。是的,你可以创建一个没有容器的卷,但你需要使用
docker volume create,而不是docker create -v。 -
哦,对不起,没错,问题应该是使用
docker create -v /dbdata --name dbstore training/postgres /bin/true与使用docker volume create --name hello有什么区别,注意两者都是用create完成的,但第一个是作为容器创建的(文档称其为“数据卷容器”),两者都旨在作为一个卷工作,当您使用run对其进行初始化时,您可以将其与容器绑定。我还不如重新提交这个问题,docker文档只是有点混乱。 -
这只是Docker的演进。过去需要创建一个容器才能使用数据卷容器模式。我相信
docker volume create是为了简化这一点最近添加的。