在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是一个开放的问题: