2014-07-18 58 views
0

我想在容器中使用共享卷,但共享卷中的数据更新无法访问主机上的基础目录,并且当容器消失时应丢弃这些更新。Docker:共享卷上的分层

例如:

  • 创建共享目录/ var /与一个文件/ var /数据/数据随机

    MKDIR的/ var /数据; DD如果=的/ dev/urandom的BS = 1M计数=的/ var /数据的= 100 /随机

  • 开始使用该目录作为共享卷

    搬运工运行的容器-v /无功/数据:/数据-t -i --name DEB的Debian/bin/sh的

  • 容器内部修改文件

    个DD如果= /开发/零BS = 4K数= 1 = /数据/随机原料转化率= notrunc之外

这里是我想发生什么:

1)在容器内在/ var /数据/随机应该像的零4K接着随机数据

2)外容器的/ var /数据/随机将保持为未修改

安装容器只读不能解决选项。复制数据并将其作为泊坞窗图像的一部分不是解决方案。

我想使用docker用于容器的根文件系统的相同分层来完成此工作。

谢谢!

回答

0

这可以使用数据容器存档。

看看这个bash脚本:

#!/bin/bash 

docker kill data-test-container > /dev/null 2>&1 
docker rm data-test-container > /dev/null 2>&1 
docker rmi data-test-image > /dev/null 2>&1 
docker build -t data-test-image - <<END_DOCKERFILE 
FROM busybox 
RUN mkdir /data && dd if=/dev/urandom bs=1K count=100 of=/data/persistent 
VOLUME /data 
END_DOCKERFILE 

docker run -d --name=data-test-container data-test-image true 
echo File checksum in image: 
docker run --rm --volumes-from=data-test-container busybox md5sum /data/persistent 
docker run --rm --volumes-from=data-test-container busybox dd if=/dev/urandom bs=1K count=100 of=/data/persistent 
echo File checksum after change: 
docker run --rm --volumes-from=data-test-container busybox md5sum /data/persistent 

docker rm data-test-container 
docker run -d --name=data-test-container data-test-image true 

echo File checksum after restore: 
docker run --rm --volumes-from=data-test-container busybox md5sum /data/persistent 

这里是输出:

Sending build context to Docker daemon 2.048 kB 
Sending build context to Docker daemon 
Step 0 : FROM busybox 
---> 4986bf8c1536 
Step 1 : RUN mkdir /data && dd if=/dev/urandom bs=1K count=100 of=/data/persistent 
---> Running in 117d1884d448 
100+0 records in 
100+0 records out 
---> ac22e944c73c 
Removing intermediate container 117d1884d448 
Step 2 : VOLUME /data 
---> Running in 52cf4b446255 
---> d7f3494b1f72 
Removing intermediate container 52cf4b446255 
Successfully built d7f3494b1f72 
b7c7fe133479afed41f0af31df7a4535d19353bc976b25393a2c6fe68344ac6b 
File checksum in image: 
029ae64fe02ebfb6a3ebf0af31965826 /data/persistent 
100+0 records in 
100+0 records out 
File checksum after change: 
767260fa798a55d639de0f775e18595c /data/persistent 
data-test-container 
19b9e3a5d3286c7a9bee101b1984ac033a2dd8f0bd7a6648f6c451b5e0cded32 
File checksum after restore: 
029ae64fe02ebfb6a3ebf0af31965826 /data/persistent 

如果你想获取实时数据转换成图像(以代替必须从建立它的抓取),快照应该是要走的路,但我没有尝试过这一点,并且我被告知Docker映像存储库服务器代码中存在一个令人讨厌的错误(如果您设置了本地服务器来承载快照)这使得不可能删除快照。不过,这个bug现在可能已经被修复了。