Mic*_*ton 2 containers python-2.7 docker mounted-volumes
我是 Docker 的新手,但在使用 Windows 10 的 docker 工具箱对一些现有的 python 代码进行 Dokcerizing 方面取得了成功。
目前我有这个设置:
这是通过 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"]
Run Code Online (Sandbox Code Playgroud)
并且我的所有代码都位于带有一堆 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"))
Run Code Online (Sandbox Code Playgroud)
我将如何引用上述代码从单独的容器中打开 csv/pkl 文件?
我已经阅读了大量的 stackoverflow 帖子和 docker 文档,但似乎无法理解如何使其工作,任何帮助将不胜感激。
是的,您在考虑使用卷方面走在正确的轨道上。我会把它分成三部分:
1.共享卷
使用 Docker 创建卷很容易。特别好的是您可以创建一个具有特定名称的卷:
docker volume create data-volume
Run Code Online (Sandbox Code Playgroud)
所以在这里我们创建了data-volume命名卷。然后,您可以使用如下命令将其安装到任何容器上:
docker run --rm -v data-volume:/data my-container-image
Run Code Online (Sandbox Code Playgroud)
所以在这里我们从 my-container-image Docker 镜像运行一个容器,并在该容器内安装data-volume卷/data。
您的 python 代码可以轻松地从该目录中读取它需要的文件 .eg/data或者您可以根据需要更改挂载点。
2. 将更改的数据复制到卷中
下一步是创建一个简单的应用程序,可以将最新更改复制到该目录中。再说一次,这个应用程序将最新数据复制到/data它自己的文件系统中。本质上,我们想要一个可以执行以下操作的应用程序:
cp $TODAYS_DATA.csv $TODAYS_DATA.pkl /data
Run Code Online (Sandbox Code Playgroud)
我们可以在容器中运行这个应用程序,并确保容器data-volume安装在data例如:
docker run --rm data-volume:/data my-data-copying-app
Run Code Online (Sandbox Code Playgroud)
这个容器可能非常简单,例如:
FROM alpine:latest
COPY ./todaysdata /todaysdata
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令运行它:
docker run --rm data-volume:/data my-data-copy-image "/bin/sh -c cp -r /todaysdata/* /data/"
Run Code Online (Sandbox Code Playgroud)
因此,本质上您只需使用命令运行容器即可将今天的数据复制到/data. 因为/data实际上是一个卷,所以最新的数据会立即与您的 python 应用程序共享,这正是您想要的。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
9544 次 |
| 最近记录: |