22

我需要创建一个使用大文件(包含基因组数据,因此大小达到约 10GB)的 Docker 映像(以及该映像中的容器)。

我应该如何优化它们的使用?我应该将它们包含在容器中(例如COPY large_folder large_folder_in_container)吗?有没有更好的方法来引用这些文件?关键是在我的私人存储库中推送这样的容器(> 10GB)对我来说听起来很奇怪。我想知道是否有一种方法可以将某种卷附加到容器上,而无需将所有这些 GB 打包在一起。

谢谢你。

4

3 回答 3

23

有没有更好的方法来引用这些文件?

如果您已经有某种方法来分发数据,我将使用“绑定安装”将卷附加到容器。

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/是你想要的。

于 2016-09-15T15:17:04.137 回答
11

我应该将它们包含在容器中(例如COPY large_folder large_folder_in_container)吗?

如果这样做,它们会将它们包含在映像中,而不是容器中:您可以从该映像启动 20 个容器,实际使用的磁盘空间仍为 10 GB。

如果您要从第一个图像制作另一个图像,分层文件系统将重用父图像中的图层,新图像仍然“只有”10GB。

于 2016-09-15T11:58:21.057 回答
0

我在处理 900MB json 文件时遇到了问题,并且更改了首选项中的内存限制并修复了它。

在此处输入图像描述

于 2021-04-21T21:38:06.907 回答