net*_*cat 4 docker docker-volume
我是Docker的新手,我正在努力更好地理解Volumes主题.我在这看到:
- 创建容器时初始化卷.如果容器的基本映像包含指定安装点的数据,则在卷初始化时将现有数据复制到新卷中.(请注意,安装主机目录时不适用.)
- 可以在容器之间共享和重用数据卷.
- 直接对数据卷进行更改.
- 更新映像时,不会包括对数据卷的更改.
- 即使删除容器本身,数据量仍然存在.
- 数据卷旨在保留数据,与容器的生命周期无关.因此,Docker在删除容器时不会自动删除卷,也不会"垃圾收集"容器不再引用的卷.
除此之外,其中非常清楚:
- 更新映像时,不会包括对数据卷的更改.
而且我真的在努力更好地理解这一点.任何人都可以提供一些更清晰的概述,可能还有一些基本的例子吗?
谢谢!
卷位于容器文件系统之外.它们在运行时挂载,但其中的数据不在容器中.我们来举个例子:
j@host $ docker volume create --name my-data
这会创建一个调用的卷(没有容器)my-data.现在我创建一个新容器并将此卷安装在我的容器中/inside/data.
j@host $ docker run -it -v my-data:/inside/data --name container1 alpine:3.3 sh
现在我在容器内的shell中,所以我在文件夹中创建了一个新文件/inside/data.
root@container1 $ cd /inside/data && touch my-file
现在/inside/data不是真的在我的容器文件系统中,它是一个存在于容器外部的卷,只是安装在它中.如果我停止我的容器,并且_don't将该卷重新安装,我的文件就不存在了.
root@container1 $ exit
j@host $ docker run -it --name container2 alpine:3.3 sh
root@container2 $ ls /inside/data
ls: /inside/data: No such file or directory
root@container2 $ exit
Run Code Online (Sandbox Code Playgroud)
事实上,即使文件夹不存在!因为我没有在那个位置安装任何东西.我正在使用卷,因此我的数据不会保留在容器中.那我怎么再找到它?那么它会持续存在于音量(my-data)中.让我们通过将它安装到另一个容器来看一下(我不需要在同一点安装它,我将使用不同的东西).
j@host $ docker run -it -v my-data:/different/folder --name container3 alpine:3.3 sh
root@container3 $ ls /different/folder
my-file
root@container3 $ exit
Run Code Online (Sandbox Code Playgroud)
好的,我可以获取该数据并将其安装到不同的容器中.但是卷中的数据实际存在于何处?好吧我的主机文件系统.我们可以这样做:
j@host $ docker volume inspect my-data
[
{
"Name": "my-data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/my-data/_data",
"Labels": {},
"Scope": "local"
}
]
Run Code Online (Sandbox Code Playgroud)
好的,所以它告诉我在我的主机上该卷的位置,让我们来看看那里有什么(我们需要sudo,因为它由root拥有).
j@host $ sudo ls /var/lib/docker/volumes/my-data/_data
my-file
Run Code Online (Sandbox Code Playgroud)
还有文件!
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |