gpt4 book ai didi

更新镜像时的 Docker Volumes

转载 作者:行者123 更新时间:2023-12-01 23:18:38 26 4
gpt4 key购买 nike

我是 Docker 新手,我正在尝试更好地理解卷主题。在这里我看到:

  • Volumes are initialized when a container is created. If the container’s base image contains data at the specified mount point, that existing data is copied into the new volume upon volume initialization. (Note that this does not apply when mounting a host directory.)
  • Data volumes can be shared and reused among containers.
  • Changes to a data volume are made directly.
  • Changes to a data volume will not be included when you update an image.
  • Data volumes persist even if the container itself is deleted.
  • Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically deletes volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container.

这很清楚,除了这一点:

  • Changes to a data volume will not be included when you update an image.

我真的很难更好地理解这一点。谁能给我提供一些更清晰的概述,可能还有一些基本的例子?

谢谢!

最佳答案

卷位于容器文件系统的外部。它们在运行时安装,但其中的数据并不存在于容器中。我们举个例子:

j@host $ dockervolume 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 并不是真正我的容器文件系统中,它是一个位于容器外部的卷,只是安装在其中。如果我停止我的容器,并且_不要重新安装该卷,我的文件不在那里。

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

事实上,连文件夹都不存在!因为我没有在那个位置安装任何东西。我正在使用卷,因此我的数据不会持久在容器中。那么我该如何再次找到它呢?那么它被持久化在卷(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

好的,这样我就可以获取该数据并将其安装到不同的容器中。但是卷中的数据实际上位于哪里?在我的主机文件系统上。我们可以通过执行以下操作来检查:

j@host $ docker volume inspect my-data
[
{
"Name": "my-data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/my-data/_data",
"Labels": {},
"Scope": "local"
}
]

好的,它告诉我该卷在我的主机上的位置,让我们看看里面有什么(我们需要 sudo,因为它由 root 拥有)。

j@host $ sudo ls /var/lib/docker/volumes/my-data/_data
my-file

文件就在这里!

关于更新镜像时的 Docker Volumes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38096021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com