我对可重现的数据科学工作非常感兴趣。为此,我现在正在探索Docker作为一个平台,它可以捆绑代码、数据和环境设置。我的第一个简单尝试是创建一个包含所需数据的Docker镜像(link)。
然而,这只是第一步,在本例中,数据是图像的一部分,因此当图像加载到容器中时,数据已经存在。我的下一个目标是解耦分析和数据的代码。据我所知,这意味着有两个容器,一个包含代码(code
),另一个包含数据(data
)。
对于code
,我使用了一个简单的Dockerfile
FROM continuumio/miniconda3
RUN conda install ipython
而对于data
FROM atlassian/ubuntu-minimal
COPY data.csv /tmp
其中data.csv
是我要复制到映像中的数据文件。
构建完这两个镜像后,我可以按照this解决方案中的描述运行它们:
docker run -i -t --name code --net=data-testing --net-alias=code drorata/minimal-python /bin/bash
docker run -i -t --name data --net=data-testing --net-alias=data drorata/data-image /bin/bash
启动网络后:docker network create data-testing
完成这些步骤后,我可以从一个容器ping另一个容器,并且可能还可以从code
访问data.csv
。但我有一种感觉,这是一个次优的解决方案,不能被认为是良好的实践。
拥有可以访问数据的容器的最佳实践是什么?我读了一些关于data volumes的文章,但我不明白如何使用它们,以及如何将它们转换为图像。
发布于 2017-03-21 22:22:33
在这一点上,容器作为数据存储的使用在很大程度上被认为是过时的和不推荐的。您应该改用数据卷。
但数据卷不是可以转换为图像的东西。真的,没有必要这样做。
如果您希望将.csv文件传递给某人,并让他们在其docker容器中使用该文件,只需将.csv文件提供给他们即可。
将文件放入容器并使用它的最简单方法是使用主机挂载的卷。
使用docker run
上的-v
标志,您可以指定要挂载到停靠容器中的本地文件夹或文件。
例如,假设您的docker映像希望在/data/input.csv
中找到一个文件。当您调用docker run
并希望提供您自己的input.csv文件时,您可以这样做
docker run -v /my/file/path/input.csv:/data/ my-image
在这个示例中,我没有提供您所展示的所有选项,但我演示了-v
标志。这将获取本地文件系统的input.csv
并将其挂载到docker容器中。现在,您的容器将能够使用该数据的副本。
https://stackoverflow.com/questions/42929580
复制相似问题