我试图深入了解Docker的数量,并且我很难弄清楚差异/用例:
docker volume create
命令docker run -v /path:/host_path
VOLUME
文件中的Dockerfile
条目如果您将VOLUME
条目与-v
标记合并,我特别不明白会发生什么。
如果有人理解,请解释我!
答案 0 :(得分:43)
卷是存储在/var/lib/docker/volumes/...
您可以在Dockerfile中声明它,这意味着每次从图像启动容器时,都会创建卷(为空),即使您没有有任何-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!
答案 1 :(得分:4)
VOLUME
指令与volumes-from
运行时参数结合使用会变得很有趣。
给出以下Dockerfile:
FROM busybox
VOLUME /myvolume
使用以下图像制作图像:
docker build -t my-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
您将看到my-second-bb
在hello.txt
文件夹中包含文件myvolume
。
一旦退出两个容器,您的卷也将被删除。
答案 2 :(得分:0)
@radium226