我对可重复的数据科学工作非常感兴趣。为此,我现在正在探索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另一个容器中的一个容器,也可能从data.csv
访问code
。但我有这种感觉,这是次优解决方案,不能算是一种好的做法。
拥有可以访问数据的容器被认为是一种好习惯吗?我读了一些关于data volumes的内容,但我不了解如何利用它们以及如何将它们变成图像。
答案 0 :(得分:1)
此时,使用容器作为数据存储在很大程度上被认为是过时和弃用的。你应该使用数据量。
但数据量不是你可以变成图像的东西。真的,没有必要这样做。
如果你想将.csv文件发送给某人并让他们在他们的docker容器中使用它,只需给他们.csv文件。
将文件放入容器并能够使用它的最简单方法是使用主机安装卷。
使用-v
上的docker run
标记,您可以指定要挂载到docker容器中的本地文件夹或文件。
例如,假设您的泊坞窗图片需要在/data/input.csv
找到一个文件。当你致电docker run
而你想提供自己的input.csv文件时,你会做类似的事情
docker run -v /my/file/path/input.csv:/data/ my-image
我没有提供您正在展示的此示例中的所有选项,但我正在说明-v
标志。这将采用本地文件系统的input.csv
并将其挂载到docker容器中。现在,您的容器将能够使用您的数据副本。