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

迈克尔·道尔顿

我是Docker的新手,但在Windows 10的docker工具箱中成功完成了一些现有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文件?

我已经阅读了很多stackoverflow帖子和docker文档,但是似乎无法理解如何使其工作,任何帮助将不胜感激。

罗布·布莱克

是的,在考虑使用卷方面,您处在正确的轨道上。我将其分为三部分:

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

1.共享卷

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

docker volume create data-volume

因此,这里我们创建了data-volume命名卷。然后,您可以使用以下命令将其安装到任何容器上:

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

因此,这里我们从my-container-image Docker镜像运行一个容器,并将该data-volume安装/data在该容器中。

您的python代码可以轻松地从该目录中读取所需的文件。例如,/data或者您可以根据需要更改安装点。

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

下一步将是创建一个简单的应用程序,该应用程序可以将最新更改复制到该目录中。再说一次,此应用程序将最新数据复制到/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应用共享,这正是您想要的。

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章