将virtualenv转移到docker镜像

时间:2018-03-14 20:53:12

标签: python docker pip virtualenv dockerfile

是否可以通过ADD命令将虚拟环境数据从本地主机传输到docker镜像?

我宁愿用户在本地完成所有这些操作,而只是将虚拟环境转移到容器中,而不是在容器内进行pip安装。当然,所有文件都在本地与docker容器中的名称相同,并且所有目录都正确嵌套。

如果可以将虚拟环境设置转换为泊坞窗图像,则可以节省几分钟到几小时。也许我在错误的摘要中考虑这个问题。

通过传递到容器中的requirements.txt进行pip安装感觉非常低效,而不是在本地完成,否则每次启动映像时都必须重新安装相同的依赖项。没有改变每个图像的构建。

2 个答案:

答案 0 :(得分:3)

我们之前遇到过这个问题,以下是我们考虑的一些事项:

  1. 考虑构建安装了通用软件包的基础映像。然后,app容器可以使用这些基础容器中的一个并安装差异。
  2. Cache the Pip packages在可以安装在容器上的本地路径上。这样可以节省下载软件包的时间。
  3. 根据项目的复杂程度,可能比其他项目更合适 - 您也可以考虑使用混合方法来找到最大化优化。

答案 1 :(得分:1)

尽管可能,但不建议这样做。

  • 依赖关系(库版本,全局安装的软件包)在主机和容器上可以有所不同。
  • 图像构建在其他主机上不会100%重现。
  • pip安装的影响不大。每个RUN命令都会创建它自己的图层,这些图层在本地缓存,也存储在存储库中,因此只有在更改requirements.txt(或重建以前的图层)时才会重新运行pip install。

要仅在requirements.txt更改时触发pip安装,Dockerfile应该以这种方式启动:

... COPY requirements.txt ./ RUN pip install -r requirements.txt COPY src/ ./ ...

此外,它仅在图像构建上运行,而不是在容器启动时运行。

如果您有多个具有相同依赖关系的容器,则可以使用所有依赖关系构建中间映像,并构建其他映像FROM