Dockerfile中卷的用途是什么

Dockerfile中卷的用途是什么,docker,volume,Docker,Volume,我正试图深入了解Docker的音量,我很难找出以下方面的差异/用例: docker卷创建命令 docker运行-v/path:/host\u路径 Dockerfile文件中的VOLUME条目 我特别不明白如果将卷条目与-v标志组合在一起会发生什么情况。卷是存储在/var/lib/docker/volumes/… 您可以在Dockerfile中声明它,这意味着每次从映像启动容器时,都会创建卷(空),即使您没有任何-v选项 您可以在运行时声明它。 结合这两个(VOLUME+docker run

我正试图深入了解Docker的音量,我很难找出以下方面的差异/用例:

  • docker卷创建
    命令
  • docker运行-v/path:/host\u路径
  • Dockerfile
    文件中的
    VOLUME
    条目

我特别不明白如果将
条目与
-v
标志组合在一起会发生什么情况。

卷是存储在
/var/lib/docker/volumes/…

  • 您可以在Dockerfile中声明它,这意味着每次从映像启动容器时,都会创建卷(空),即使您没有任何
    -v
    选项

  • 您可以在运行时声明它。
    结合这两个(
    VOLUME
    +
    docker run-v
    )意味着您可以将主机文件夹的内容装载到由
    /var/lib/docker/volumes/…
    中的容器保存的卷中

  • 创建卷而无需定义Dockerfile、生成映像和运行容器。它用于快速允许其他容器装入所述卷

如果您在卷中保留了某些内容,但随后删除了容器(默认情况下不会删除其关联的卷,除非您使用的是docker rm-v),则可以将该卷重新附加到新容器(声明相同的卷)

请参阅“”。
使用docker volume create,很容易将命名卷重新附加到容器

docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer

# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!

VOLUME
指令与
运行时参数中的
卷组合在一起时会变得有趣

给定以下Dockerfile:

FROM busybox
VOLUME /myvolume
使用以下内容构建图像:

docker build-t我的bb。
并用以下材料旋转容器:

docker run --rm -it --name my-first-bb my-bb
首先要注意的是,在这个图像中有一个名为
myvolume
的文件夹。但这并不特别有趣,因为当我们退出容器时,卷也将被删除

在此文件夹中创建一个空文件,因此在容器中运行以下操作:

cd myvolume
touch hello.txt
现在旋转一个新容器,但与
my first bb
共享相同的音量:

docker run --rm -it --volumes-from my-first-bb --name my-second-bb my-bb
您将在
myvolume
文件夹中看到
mysecond bb
包含文件
hello.txt

一旦退出两个容器,卷也将被删除。

@radium226

  • 在Dockerfile中指定卷可确保文件夹在运行时被视为卷(即容器外部),而不是容器内部的常规目录。请注意性能和可访问性影响
  • 如果忘记在“docker run”命令行中指定“-v”,则上述情况仍然正确。只是卷名变为匿名。但是仍然有一些方法可以从这些匿名卷访问或恢复数据

  • 假设您将
    Dockerfile
    VOLUME
    一起使用,并使用
    -v/path:/host\u path/
    标志。
    卷的内容
    将被
    /host\u path/
    的内容覆盖?多亏了你@VonC,我想我明白了:)如果你创建一个
    docker卷--name my\u VOLUME
    然后是一个
    docker run--VOLUME from my\u VOLUME
    ,你怎么知道挂载点在哪里?@radium226无挂载点(意味着除了本机空/var/lib/docker/volume之外,没有从主机装载任何内容)。卷的路径在my_卷元数据中:我知道主机端没有装入点。但是在使用
    docker run…
    启动的运行容器中,我如何写入存储在
    my_卷
    卷上的文件?我不知道运行容器中卷的…路径,因为我定义了什么都没有?我希望我足够清楚,因为我肯定不确定我的发音:-/@radium226
    docker卷创建--name aname
    创建命名卷:您在运行时分配一个容器路径:
    docker run-v aname:/apath
    :该容器现在有一个附加到它的卷,安装到它的/apath文件夹。我已经重写了回答清楚。相关:卷将被删除,因为它们是匿名卷,并且您使用
    --rm
    选项启动了容器。我认为提到它可能会有用。如果您没有使用
    --rm
    启动容器,您仍然可以使用
    docker rm-v my contain删除容器及其匿名卷er