一尘不染

在Docker中,如何在容器之间共享文件,然后将它们保存到映像中?

docker

我想将容器共享卷中的数据提交到映像。我似乎无法做到?我有点印象,这也许在Docker中是不可能的,但这似乎与不将数据留在主机上的整个哲学完全矛盾,所以我中的一部分认为必须有一种方法来做到这一点。

1. 1号航站楼

在终端1中启动一个具有一定容量的容器。

$ docker run -it -v /data ubuntu:14.10 /bin/bash
root@19fead4f6a68:/# echo "Hello Docker Volumes." > /data/foo.txt

2. 2号航站楼

在终端2中启动第二个容器,容器1中的文件在那里,因此docker卷都可以工作。

$ docker run -it --volumes-from 19fead4f6a68 ubuntu:14.10 /bin/bash

root@5c7cdbfc67d8:/# cat /data/foo.txt
Hello Docker Volumes.

3. 3号航站楼

我的理解是,我只能将差异提交给图像,因此我要检查两个容器上的差异。由于某些奇怪的原因,我的更改没有显示出来!

$ docker diff 19fead4f6a68
A /data

$ docker diff 5c7cdbfc67d8
A /data

4.返回1号航站楼

我在卷文件夹之外创建文件

 root@19fead4f6a68:/# echo "Docker you are a very strange beast...." > /var/beast.txt

5.返回3号航站楼

现在我们可以进行一些更改,尽管我很沮丧,因为这不是我需要与其他容器共享的卷中的数据。

$ docker diff 19fead4f6a68
A /data
C /var
A /var/beast.txt

显然,这是设计使然。任何人都对为什么docker不允许我将卷数据保存到提交有任何想法?无论如何,在容器之间共享文件,然后将它们保存到映像中吗?我觉得一定有我想念的东西吗?特别是在共享数据的最后,同时避免了主机依赖性。


阅读 741

收藏
2020-06-17

共1个答案

一尘不染

卷不在容器映像中。这正是它们的用途-将数据带入图像中未包含的容器中。

Docker文档中

数据卷是一个或多个容器中的一个特别指定的目录,该目录绕过联合文件系统为持久性或共享数据提供一些有用的功能:

  • 数据量可以在容器之间共享和重用
  • 直接更改数据量
  • 更新映像时将不包括对数据量的更改

如果要将某些更改保存为图像的一部分,请在图像内部而不是在卷中进行更改。如果要在多个容器之间共享更改,请将该数据放入一个卷中,但必须自己安排快照,回滚等操作,因为Docker没有该功能。

也许您会对Flocker感兴趣。

2020-06-17