Docker:在共享卷上分层

Docker:在共享卷上分层,docker,device-mapper,btrfs,Docker,Device Mapper,Btrfs,我想在容器中使用共享卷,但对共享卷中数据的更新无法转到主机上的基础目录,当容器离开时,应丢弃这些更新 例如: 使用一个文件/var/data/random创建共享目录/var/data mkdir/var/data; dd if=/dev/uradom bs=1M count=100 of=/var/data/random 使用此目录作为共享卷启动容器 docker run-v/var/data:/data-t-i--name deb deb debian/bin/sh 在容器内部修改文件

我想在容器中使用共享卷,但对共享卷中数据的更新无法转到主机上的基础目录,当容器离开时,应丢弃这些更新

例如:

  • 使用一个文件/var/data/random创建共享目录/var/data

    mkdir/var/data; dd if=/dev/uradom bs=1M count=100 of=/var/data/random

  • 使用此目录作为共享卷启动容器

    docker run-v/var/data:/data-t-i--name deb deb debian/bin/sh

  • 在容器内部修改文件

    dd if=/dev/zero bs=4k count=1 of=/data/random conv=notrunc

以下是我希望发生的事情:

1) 在容器中,/var/data/random应该看起来像4K的零,后面跟着随机数据

2) 容器外/var/data/random将保持不变

以只读方式安装容器并不能解决该选项。复制数据并使其成为docker映像的一部分不是一个解决方案

我希望使用docker用于容器根文件系统的相同分层来实现这一点


谢谢

这可以使用数据容器存档

看看这个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
如果您想将实时数据放入映像(而不是从头开始构建映像),快照应该是一个不错的选择,但我还没有尝试过,而且有人告诉我Docker image repository服务器代码中有一个严重的错误(如果您设置了本地服务器来托管快照),这使得无法删除快照。不过,这个bug现在可能已经修复了

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