【问题标题】:Docker Volumes when updating the image更新映像时的 Docker 卷
【发布时间】:2016-06-29 09:48:23
【问题描述】:

我是 Docker 新手,我正在努力更好地理解 Volumes 主题。 在这里我看到了:

  • 创建容器时会初始化卷。如果容器的基础镜像包含指定挂载点的数据,那么在卷初始化时,现有数据将被复制到新卷中。 (请注意,这不适用于挂载主机目录。)
  • 数据卷可以在容器之间共享和重用。
  • 直接对数据卷进行更改。
  • 更新映像时不会包含对数据卷的更改。
  • 即使容器本身被删除,数据卷仍然存在。
  • 数据卷旨在保持数据,独立于容器的生命周期。因此,当您删除容器时,Docker 永远不会自动删除卷,它也不会“垃圾收集”不再被容器引用的卷。

这很清楚,除了这个:

  • 更新映像时不会包含对数据卷的更改。

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

谢谢!

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

    我认为它试图说明数据量是否被其他进程更改(它可以从其他容器或其他系统更改),当您构建/更新您的 docker 映像时,这些更改将不会被包含/记录,即很明显。

    【讨论】:

      【解决方案2】:

      卷存在于容器文件系统之外。它们在运行时挂载,但其中的数据并不存在于容器中。举个例子:

      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 并不是真正我的容器文件系统中,它是一个位于容器外部的卷,它只是安装在其中。如果我停止我的容器,_不要安装那个卷回来了,我的文件不在那里了。

      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
      

      还有文件!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        相关资源
        最近更新 更多