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

我想将容器的共享卷中的数据提交到图像。 我似乎无法做到这一点? 我有种印象,这可能在Docker中是不可能的,但是这似乎完全不符合主机上的数据的全部理念,所以我认为一定有办法做到这一点。

1号航站楼

在1号docker启动一个容器。

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

2. 2号航站楼

在terminal2启动第二个容器,从容器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号航站楼

我在卷文件夹外创build一个文件

  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 

显然这是devise。 任何人有任何想法,为什么docker不允许我保存卷数据提交? 无论如何,共享容器之间的文件,然后将其保存到图像? 我觉得我一定有一些我想念的东西? 尤其是在共享数据的同时避免主机依赖。

卷在容器图像之外。 这正是他们的目的 – 将数据放入不在图像中的容器中。

从Docker文档 :

数据卷是绕过联盟文件系统的一个或多个容器内的特定目录,为持久数据或共享数据提供若干有用function:

  • 数据卷可以在容器之间共享和重用
  • 数据量的变化是直接进行的
  • 更新图像时,不会包含对数据量的更改

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

也许你会对Flocker感兴趣。

看起来好像围绕添加卷层到docker是一个开放的问题:

https://github.com/docker/docker/issues/9382

Interesting Posts