在docker容器内的virtualenv中运行django应用程序的目的是什么?

时间:2017-02-25 14:44:58

标签: python django docker virtualenv

docker django应用程序中virtualenv的目的是什么? Python和其他依赖项已经安装,但同时需要使用pip安装大量软件包,所以看起来冲突仍然不明确。

你能解释一下这个概念吗?

编辑:此外,例如。我在docker django应用程序中创建了virtualenv,最近安装了pip freeze djangorestframework并将其添加到settings.py中,但docker-compose up引发了错误. No module named rest_framework.已检查,一切正确. Docker / virtualenv冲突?可能是吗?

2 个答案:

答案 0 :(得分:8)

Docker和容器化可能会激发您不需要虚拟环境的错觉。 distutil的Glpyh对这种误解提出了非常有说服力的论据in this pycon talk

virtualenv优势的相同基本方面适用于容器,就像它们用于非容器化应用程序一样,因为从根本上说,您仍在运行Linux发行版。

  

Debian和Red Hat是一个非常复杂的工程项目。   集成数十亿行C代码。例如,您只需apt install libavcodec。或yum install ffmpeg

     

编写工作版本   其中之一的系统是博士论文。他们整合   成千上万的Python包同时进行一次工作   环境。他们并不总是告诉你他们的工具是否使用Python   或不。

     

所以,您可能希望docker exec中的一些工具   容器,如果你sudo pip install,它们可能是用Python编写的   你的应用程序在那里,现在它已经全部破坏了

     

即使在容器中,也要将应用程序代码与系统隔离

无论您是否使用泊坞窗,都应该始终在虚拟环境中运行应用程序。

现在在docker中,特别是使用virtualenv比它应该有点棘手。在docker内部,每个RUN命令都是独立运行的,除了文件系统更改之外,没有任何状态保持在一行到另一行。要安装到virutalenv,您必须预先设置激活command on every line

RUN apt-get install -y python-virtualenv
RUN virtualenv /appenv
RUN . /appenv/bin/activate; \
    pip install -r requirements.txt

ENTRYPOINT . /appenv/bin/activate; \
           run-the-app

答案 1 :(得分:3)

virtualenv用于将软件包隔离到特定环境。 Docker也可以将设置隔离到特定环境。所以从本质上讲,如果你使用docker,那么使用virtualenv也没什么好处。

直接将安装东西直接插入docker环境中它不会造成任何伤害。要点击安装需求,请使用dockerfile执行命令。

您可以在下面找到伪代码示例。

FROM /path/to/used/docker/image
RUN pip install -r requirements.txt