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文件的堆,但似乎无法理解如何使其工作,任何帮助将不胜感激。
对于使用卷的思考,你是正确的。 我会把它分成三位:
- 你的Python代码运行在一个容器中
- 在您的Python容器和一个或多个其他容器之间共享的卷
- 一个“数据复制”容器,每天将最新数据复制到共享卷。
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应用程序共享,这正是你想要的。
希望有所帮助。