码头工人:可以挂载卷(术语问题)吗?

时间:2019-12-02 15:13:40

标签: docker docker-volume

我已经搜索了site:stackoverflow.com docker: can volume be mounted?,并且肯定有很多关于该操作的帖子。但是,我担心当前在网络docker文档上发布的恕我直言内部矛盾(他们每个人都没有给您提供邮政日期),并问谁能确定哪一种是当前正确的说法以及docker演变路径在哪里: / p>

https://docs.docker.com/storage/bind-mounts/

  

自Docker诞生以来,便已出现绑定挂载。绑定   与卷相比,挂载的功能有限。

https://docs.docker.com/storage/volumes/

  

卷是用于持久保存由...生成的数据的首选机制   并由Docker容器使用。虽然绑定挂载取决于   主机的目录结构,卷完全   由Docker管理。

https://docs.docker.com/engine/reference/run/

  

-v,--volume = [host-src:] container-dest [:]:绑定安装卷。

当引用上方的两个链接试图将bind mountsvolumes分开时,混乱来自于第三引号“绑定安装卷”。

由于--volume--mount的{​​{1}}和run参数都可同时用于bind mountsvolumes(和{{1 }} btw)及其用法的说明包括这两种情况。

正确的说法是什么?我们可以使用tmpfs还是只使用mount a volume

已添加: 我发现在挂载卷上有一种“合法”用法:在create volume标志中(创建一个用于挂载该卷的新容器),但不适用于“陈旧”的--volumes-from

1 个答案:

答案 0 :(得分:1)

  

我们可以只使用mount a volume还是只使用create volume

因为它们是两个单独的操作,所以实际上两者都可以使用。造成混淆的部分原因可能是volumes同时描述了源和目标。您在docker引擎中创建了一个存储卷,然后将该卷安装在容器中。

如果您提供的源是文件系统上的路径,则说明您正在将容器绑定安装在容器中。

您正在关注-v的{​​{1}}选项。它的实际作用是:

  • 如果目标不是主机路径,请创建一个尚不存在的卷
  • 在指定路径内将容器中的该卷(刚创建或存在或从主机绑定)挂载

docker run与之类似,不同之处在于将存在卷,因为一个容器已经在其中安装了卷,因此必须在一个点上创建它们(或者在绑定安装的情况下存在)

要更好地理解,请参见以下情形:

首先,您手动创建一个卷。

--volumes-from

现在您可以将现有的存储卷挂载到容器中并向其中推入一些东西

$ docker volume create testSO
testSO
$ docker volume ls
DRIVER              VOLUME NAME
local               testSO

我以前的容器现在已经死了,但是我的存储空间仍然存在。我可以将其重新安装在新容器上并读取数据

$ docker run -it --rm -v testSO:/testSO busybox:latest 
/ # echo "I'm a test for SO" > /testSO/test.txt
/ # exit

现在让我们删除存储卷:

$ docker volume ls
DRIVER              VOLUME NAME
local               testSO
$ docker run -it --rm -v testSO:/testSO ubuntu:18.04 
root@d558687a3f6f:/# more /testSO/test.txt 
I'm a test for SO
root@d558687a3f6f:/# exit
exit

如果您启动一个安装了旧卷名的新容器,则将重新创建该容器并将其全部安装在一起(但它当然是空的)

$ docker volume rm testSO
testSO
$ docker volume ls
DRIVER              VOLUME NAME

希望我能澄清一下。