0

コンテナー内の共有ボリュームを使用したいのですが、共有ボリューム内のデータの更新はホストの基になるディレクトリに移動できず、コンテナーがなくなるとこれらの更新を破棄する必要があります。

例えば:

  • 1 つのファイル /var/data/random で共有ディレクトリ /var/data を作成します

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

  • このディレクトリを共有ボリュームとして使用してコンテナーを開始します

    docker run -v /var/data:/data -t -i --name 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 がコンテナーのルート ファイルシステムに使用するのと同じ階層化を使用したいと考えています。

ありがとう!

4

1 に答える 1

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 イメージ リポジトリ サーバー コード (スナップショットをホストするローカル サーバーをセットアップする場合)。ただし、このバグは今では修正されている可能性があります。

于 2015-01-25T21:56:41.137 に答える