web-dev-qa-db-ja.com

Dockerコンテナー内の巨大なファイル

大きなファイル(ゲノムデータを含み、サイズが最大10GBに達する)を使用するDockerイメージ(およびその結果としてそのイメージからのコンテナー)を作成する必要があります。

使用方法を最適化するにはどうすればよいですか?それらをコンテナに含めることになっていますか(COPY large_folder large_folder_in_containerなど)?そのようなファイルを参照するより良い方法はありますか?ポイントは、私が自分のプライベートリポジトリにそのようなコンテナ(> 10GB)をプッシュするのは奇妙に聞こえるということです。これらのGBをすべて一緒にパックせずに、コンテナに一種のボリュームをアタッチする方法はあるのでしょうか。

ありがとうございました。

14
Eleanore

それらをコンテナに含めることになっていますか(COPY large_folder large_folder_in_containerなど)?

これを行うと、コンテナではなくimageに含まれます。そのイメージから20のコンテナを起動できますが、実際に使用されるディスク容量は10 GBのままです。

最初のイメージから別のイメージを作成する場合、レイヤー化されたファイルシステムは親イメージのレイヤーを再利用し、新しいイメージは「わずか」10GBのままです。

8
VonC

そのようなファイルを参照するより良い方法はありますか?

データを配布する方法がすでにある場合は、「バインドマウント」を使用してボリュームをコンテナーにアタッチします。

docker run -v /path/to/data/on/Host:/path/to/data/in/container <image> ...

そうすれば、イメージを変更でき、毎回大きなデータセットを再ダウンロードする必要がありません。

レジストリを使用して大規模なデータセットを配布したいが、データセットへの変更を個別に管理したい場合は、次のようなDockerfileを持つデータボリュームコンテナを使用できます。

FROM tianon/true
COPY dataset /dataset
VOLUME /dataset

アプリケーションコンテナから、次を使用してそのボリュームをアタッチできます。

docker run -d --name dataset <data volume image name>
docker run --volumes-from dataset <image> ...

いずれにせよ、私は https://docs.docker.com/engine/tutorials/dockervolumes/ があなたが望むものだと思います。

17
dnephin