如何将数据从外部服务器访问/拉入Docker容器?

如何将数据从外部服务器访问/拉入Docker容器?,docker,dockerfile,ssh-keys,Docker,Dockerfile,Ssh Keys,我遇到了越来越多的数据科学家,他们使用Docker容器,以便进行可重复的分析 问题:如何将数据下载/拉入Docker容器 如果数据可以通过URL下载,自然可以在Dockerfile中添加这样的行 wget www.server_to_data.org/path/path/myfile.gz 但是我有一个服务器上的数据,用户通过~/.ssh/id\u rsa.pub中的密钥对ssh进入服务器。我不确定这在安全方面如何起作用 在这种情况下,人们通常如何下载或访问您的数据 可以挂载服务器,但我不确定

我遇到了越来越多的数据科学家,他们使用Docker容器,以便进行可重复的分析

问题:如何将数据下载/拉入Docker容器

如果数据可以通过URL下载,自然可以在Dockerfile中添加这样的行

wget www.server_to_data.org/path/path/myfile.gz
但是我有一个服务器上的数据,用户通过
~/.ssh/id\u rsa.pub
中的密钥对
ssh
进入服务器。我不确定这在安全方面如何起作用

在这种情况下,人们通常如何下载或访问您的数据


可以挂载服务器,但我不确定如何在容器/VM中访问这些数据。

对于您当前的情况,您已经在服务器上获得了数据,并且正在将密钥对分发给应该具有访问权限的人。如果您只想使用现有的基础架构而不进行更改。可以通过为映像中的ssh密钥设置一个卷来完成,然后运行映像的人需要启动容器,并将该卷设置为他们的ssh密钥

使用Dockerfile在映像中设置卷:

FROM ubuntu 
#[RUN your installation process]
VOLUME /home/container_user/.ssh
运行容器并将ssh密钥的位置装载到该卷:

docker run -d -v PATH_TO_DRECITORY_HOLDING_SSH_KEY:/home/container_user/.ssh [OTHER OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
然后,您可以下载数据作为启动容器时运行的脚本的一部分

基本思想是从


也就是说,如果我们稍微支持这个问题,询问人们将如何准确地使用您的图像,图像将存储在哪里(公共或私人回购),以及数据更改的频率,那么可能会有一些更方便用户的方法来满足需要。另外,如果您允许docker compose作为容器运行的方式,那么您还可以使用其他一些选项。

如果您的数据需要访问凭据,特别是交互式登录凭据,那么不清楚它是否允许进行可复制的分析。我的意思是,你所在机构以外的人没有必要的资格来访问数据。如果您的机构没有向外部用户公开研究数据集的既定机制,您可能需要首先解决这个问题。话虽如此,您可以使用绑定挂载将私钥公开到容器中(
docker run-v$HOME/.ssh/id\u rsa:/root/.ssh/id\u rsa…
),或者密钥数据可以作为环境变量传入。运行时使用卷不需要在Dockerfile中设置卷。您可能不需要在此位置使用隐式匿名卷,因此可能不需要更改Dockerfile。@JeffRichards“如果您只想使用现有基础结构而不更改它。”假设我有一个python算法,我希望用户在该数据上运行。我习惯于编写DockerFile,通过它我可以从头开始安装Linux、python、所有python库等。Docker容器是否可能继承我们当前版本的软件并运行此软件?@JeffRichards“如果您允许Docker compose作为容器的运行方式,您还可以使用其他一些选项”您能详细说明一下吗?@EB2127“继承”一词对我来说有点含糊不清。但是,如果您的软件位于源代码管理存储库(即git)中,那么您当然可以将该repo作为构建过程的一部分进行克隆/拉取,或者作为运行脚本的一部分进行克隆/拉取,如果您希望每次运行容器时都对其进行更新的话。如果您的软件不在git repo中,您仍然可以将其复制到映像中,使其成为映像的一部分。