我正在尝试更深入地了解 Docker 的容量,但我很难找出以下差异/用例:
docker volume create
命令docker run -v /path:/host_path
Dockerfile
文件中的VOLUME
条目
我特别不明白如果将 VOLUME
条目与 -v
标志结合起来会发生什么。
原文由 radium226 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试更深入地了解 Docker 的容量,但我很难找出以下差异/用例:
docker volume create
命令docker run -v /path:/host_path
Dockerfile
文件中的 VOLUME
条目我特别不明白如果将 VOLUME
条目与 -v
标志结合起来会发生什么。
原文由 radium226 发布,翻译遵循 CC BY-SA 4.0 许可协议
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
包含文件 hello.txt
在 myvolume
文件夹中。
退出两个容器后,该卷也将被删除。
原文由 Koray Tugay 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答706 阅读✓ 已解决
1 回答664 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
1 回答604 阅读
卷是存储在
/var/lib/docker/volumes/...
中的持久数据您可以在 Dockerfile 中声明它,这意味着每次从映像启动容器时,都会创建卷( _空_),即使您没有任何
-v
选项。您可以在运行时声明它
docker run -v [host-dir:]container-dir
。将两者结合起来(
VOLUME
+docker run -v
)意味着您可以将主机文件夹的内容挂载到由容器在/var/lib/docker/volumes/...
中持久保存的卷中如果您在卷中保留了一些内容,但此后删除了容器(默认情况下不会删除其关联的卷,除非您使用 docker rm -v),您可以将所述卷重新附加到新容器(声明相同的音量)。
请参阅“ Docker - 如何访问未附加到容器的卷? ”。
使用 docker volume create,很容易将命名卷重新附加到容器。