Docker容器中的相对path/ python脚本的卷

我是Docker的新手,但是已经成功地使用docker toolbox for Windows 10来对一些现有的Python代码进行了解。

目前我有这个设置:

在docker集装箱工作的Python代码的图片

这是用Dockerfile完成的:

FROM python:2.7.13 WORKDIR /root COPY ./requirements.txt /root/requirements.txt RUN pip install -r requirements.txt COPY . /root CMD ["python", "main.py"] 

和我所有的代码坐在容器中的一堆CSV和.pkl文件。 问题是,CSV和.pkl文件每天都在变化,所以在读完一些东西之后,我想我可以将这些文件分割成一个卷或者甚至是一个独立的容器,我可以每天修改和上传,而不用改变主Python脚本,因为它的1.4G大小和我的上传速度是40kbps(充其量)。

我想要的容器设置的图片

所以即时通讯想知道如何引用其他容器/卷,所以我可以访问我的主体Python代码中的CSV和/ pkl文件? 目前一切都在同一目录,所以没有问题,我只是打电话给.csv / .pkl名称,它的工作原理

 #open the local .csv file data = pd.read_csv(csv_select) #open the local .pkl file pickled_list = pickle.load(open(can_cat+".pkl","rb")) 

我将如何引用上面的代码,以从一个单独的容器中打开一个csv / pkl文件?

我已经阅读了stackoverflowpost和docker文件的堆,但似乎无法理解如何使其工作,任何帮助将不胜感激。

对于使用卷的思考,你是正确的。 我会把它分成三位:

  1. 你的Python代码运行在一个容器中
  2. 在您的Python容器和一个或多个其他容器之间共享的卷
  3. 一个“数据复制”容器,每天将最新数据复制到共享卷。

1.共享音量

使用Docker创build卷很容易。 特别好的是你可以创build一个特定名称的卷:

 docker volume create data-volume 

所以我们在这里创build了名为volume的data-volume卷。 然后你可以使用像这样的命令将其挂载到任何容器上:

 docker run --rm -v data-volume:/data my-container-image 

所以在这里,我们从my-container-image Docker镜像运行容器,并在该容器中的/data处安装data-volume

您的Python代码可以很容易地从该目录.eg /data读取所需的文件,或者您可以根据需要更改安装点。

2.将更改的数据复制到卷中

下一步将是创build一个简单的应用程序,可以将最新的更改复制到该目录中。 再次让这个应用程序将最新的数据复制到它自己的文件系统上的/data 。 基本上我们想要一个应用程序,它可以:

 cp $TODAYS_DATA.csv $TODAYS_DATA.pkl /data 

我们可以在一个容器中运行这个应用程序,并确保容器的data-volume安装在data例如:

 docker run --rm data-volume:/data my-data-copying-app 

这个容器可能非常简单,就像:

 FROM alpine:latest COPY ./todaysdata /todaysdata 

您可以使用以下方式运行它:

 docker run --rm data-volume:/data my-data-copy-image "/bin/sh -c cp -r /todaysdata/* /data/" 

所以基本上你只需要运行一个命令将数据从今天复制到/data的容器。 由于/data实际上是一个卷,最新的数据然后立即与您的Python应用程序共享,这正是你想要的。

希望有所帮助。