在Docker中,如何在容器之间共享文件,然后将它们保存到映像中?
我想将容器共享卷中的数据提交到映像。我似乎无法做到?我有点印象,这也许在Docker中是不可能的,但这似乎与不将数据留在主机上的整个哲学完全矛盾,所以我中的一部分认为必须有一种方法来做到这一点。
1. 1号航站楼
在终端1中启动一个具有一定容量的容器。
$ docker run -it -v /data ubuntu:14.10 /bin/bashroot@19fead4f6a68:/# echo "Hello Docker Volumes." > /data/foo.txt
2. 2号航站楼
在终端2中启动第二个容器,容器1中的文件在那里,因此docker卷都可以工作。
$ docker run -it --volumes-from 19fead4f6a68 ubuntu:14.10 /bin/bashroot@5c7cdbfc67d8:/# cat /data/foo.txt
Hello Docker Volumes.
3. 3号航站楼
我的理解是,我只能将差异提交给图像,因此我要检查两个容器上的差异。由于某些奇怪的原因,我的更改没有显示出来!
$ docker diff 19fead4f6a68A /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 19fead4f6a68A /data
C /var
A /var/beast.txt
显然,这是设计使然。任何人都对为什么docker不允许我将卷数据保存到提交有任何想法?无论如何,在容器之间共享文件,然后将它们保存到映像中吗?我觉得一定有我想念的东西吗?特别是在共享数据的最后,同时避免了主机依赖性。
回答:
卷不在容器映像中。这正是它们的用途-将数据带入图像中未包含的容器中。
从Docker文档中:
数据卷是一个或多个容器中的一个特别指定的目录,该目录绕过联合文件系统为持久性或共享数据提供一些有用的功能:
- 数据量可以在容器之间共享和重用
- 直接更改数据量
- 更新映像时将不包括对数据量的更改
如果要将某些更改保存为图像的一部分,请在图像内部而不是在卷中进行更改。如果要在多个容器之间共享更改,请将该数据放入一个卷中,但必须自己安排快照,回滚等操作,因为Docker没有该功能。
也许您会对Flocker感兴趣。
以上是 在Docker中,如何在容器之间共享文件,然后将它们保存到映像中? 的全部内容, 来源链接: utcz.com/qa/425296.html