我是Docker的新手,但是使用Windows 10的docker工具箱成功地使用了一些现有的python代码。
目前我有这个设置:
picture of working python code in Docker container
这是通过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(充其量)。
Picture of container setup that i would like
所以我想知道如何引用其他容器/卷,以便我可以访问我的主体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文档,但似乎无法理解如何使其工作,任何帮助都将不胜感激。
答案 0 :(得分:1)
是的,你在考虑使用音量方面走在正确的轨道上。我会把它分成三个部分:
<强> 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代码可以从该目录.e.g /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应用程序共享,这正是您想要的。
希望有所帮助。