Docker容器中的巨大文件

时间:2016-09-15 11:25:07

标签: docker dockerfile docker-container

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

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

谢谢。

3 个答案:

答案 0 :(得分:12)

  

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

如果你已经有办法分发数据,我会使用" bind mount"将卷附加到容器上。

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

答案 1 :(得分:6)

  

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

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

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

答案 2 :(得分:0)

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

enter image description here