データのみのコンテナーの「ベスト プラクティス」を探していると思います。
データとアプリを 2 つのコンテナーに分離する必要があります。実際には、状態 fe をアプリのファイル システムの /data にのみ保存する必要があります。このようにして、アプリ コンテナー/イメージとは完全に独立して、必要なときにデータ コンテナー (/data にマウント) をコミットできます。
# create data volume "app-data"
sudo docker run -name app-data -v /data busybox true
# container exits immediately, it does not matter
sudo docker run --volumes-from app-data your-image
編集:
app-data コンテナーはいつでも新しいイメージに commit できますが、このイメージは commit するたびに busybox に基づいています。
残念ながら、docker commit によって app-data ボリュームをコミットすることはできず、docker export によって app-data ボリュームを (docker export によって) エクスポートすることはできません (このを参照)。
EDIT2:
ボリューム ディレクトリの tar を新しいコンテナーから stdout にパイプすることで、app-data コンテナーをエクスポートできます (ベースの ubuntu イメージは問題ありません)。
sudo docker run --volumes-from app-data ubuntu tar -cO /data/ | gzip -c > snapshot.tgz
(スペースを節約するために) 増分バックアップを作成する場合は、tar を使用して増分バックアップのみの変更を行うことができます。
sudo docker run --volumes-from app-data ubuntu tar -cO /data/ -g /data/.tar.snar --exclude .tar.snar| gzip -c > snapshot-`date -u "+%F-%T"`.tgz
これにより、/data ディレクトリの増分スナップショットが作成されます。削除されたファイルは記録されず、変更されたファイルまたは新しいファイルのみが記録されます。バックアップを実行する前に /data/.tar.snap ファイルを削除することで、いつでもフル バックアップを作成できます。
データ/状態がどのように構成されているかはわかりませんが、テキスト構成ファイルの場合、スナップショットと /data ディレクトリ (コンテナー内: git init /data
、git add . && git commit -a -m "snapshot"
) のバージョン管理には git を使用し、バックアップと転送には docker export を使用します。
この関連リンクを参照してください。