Dockerfile中的 VOLUME的目的是什么

我试图更深入地了解 Docker 的体积,我很难找出差异 / 用例:

我试图更深入地了解 Docker 的体积,我很难找出差异 / 用例:

docker volume create命令

Thedocker run-v /path:/host_path

Dockerfile文件中的VOLUME

我特别不明白如果将VOLUME条目与-v标志结合会发生什么。

102

卷是存储在/var/lib/docker/volumes/...中的持久性数据

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

您可以在运行时docker run -v [host-dir:]container-dir上声明它。
将两者结合(VOLUME+docker run -v)意味着您可以将主机文件夹的内容挂载到由/var/lib/docker/volumes/...中的容器保存的卷中

docker volume create创建卷,而无需定义 Dockerfile 并构建映像并运行容器,它用于快速允许其他容器挂载所述卷。

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

请参阅“Docker - How to access a volume not attached to a container?”。
使用 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!
22

当您将VOLUME指令与volumes-from运行时参数结合使用时,它会变得很有趣。

给定以下 Dockerfile:

FROM busybox
VOLUME /myvolume

使用以下命令构建映像:

docker build -t my-busybox .

并旋转一个容器:

docker run --rm -it --name my-busybox-1 my-busybox

首先要注意的是,您将在此映像中有一个名为myvolume的文件夹。但这并不是特别有趣,因为当我们退出容器时,卷也将被删除。

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

cd myvolume
touch hello.txt

现在旋转一个新容器,但与my-busybox-1共享相同的卷:

docker run --rm -it --volumes-from my-busybox-1 --name my-busybox-2 my-busybox

您将看到my-busybox-2包含myvolume文件夹中的文件hello.txt

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

4

@ radium226

在 Dockerfile 中指定 VOLUME 可确保在运行时将文件夹视为卷(即外部容器),而不是容器内的常规目录。请注意性能和可访问性的影响。

如果忘记在“docker run”命令行中指定“-v”,上述仍然是正确的。只是卷名变得匿名。但是仍然有办法从这些匿名卷访问或恢复数据。

0

docker hub使用 MYSQL:

运行以下命令作为示例:

$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

命令的-v / my / own / datadir:/ var / lib / mysql部分将底层主机系统的/ my / own / datadir目录挂载为容器内的/ var / lib / mysql,默认情况下 MySQL 将在其中写入其数据文件。

因此,当容器被杀死时仍然存在的目录是可用的,这也为某些操作(如数据库操作)提供了更高的性能。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(580)
Discord bot可查看登录用户所在的服务器
上一篇
如何使用canvas.toDataURL()将画布保存为图像
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(63条)