Django和Docker:我们应该使用Python虚拟环境吗?

4

我在考虑使用Docker来运行Django。

由于这个Docker镜像将专门用于特定的Django项目。那么,是否可以只在Docker中使用pip安装所有必需的Django和相关软件包,而不是创建一个虚拟环境并使用pip安装所有所需的软件包?

那么,如果有人想坚持使用Docker来管理Django项目,什么是最好的方法,也是最安全的方法呢?


我认为是这样的。在我的应用程序中,我也正在做同样的事情。 - Mudits
2个回答

2

您是正确的,您不需要在django容器内使用虚拟环境。

如果您始终使用pip并将要求存储在requirements.txt中,则可以使用此文件来初始化开发的虚拟环境,而无需使用docker,并为设置docker容器做准备:

为了减小容器的大小,请在安装后删除pip缓存:

"最初的回答"

如果您总是使用 pip 并将要求存储在 requirements.txt 中,那么您可以使用它来初始化开发所需的虚拟环境,而无需使用 docker,也可以用于设置 docker 容器。不需要在 django 容器内使用虚拟环境。

为了减小容器的大小,在安装后删除 pip 缓存。

FROM python:3.6.7-alpine3.8

...

RUN pip3.6 install -U pip setuptools \
    && pip3.6 install -r requirements.txt \
    && pip3.6 install gunicorn \. # or uwsgi or whatever
    && rm -rf /root/.cache

我也发现pipenv比使用requirements.txt有更好的依赖管理。因此,如何在不使用virtualenv的情况下使用pipenv,以便我可以利用pipenv的优势呢? - Santhosh
当您创建用于部署的Docker容器时,依赖关系应明确且固定。您应该使用与开发期间相同的软件包和版本。从pipenv环境创建requirements.txt文件即可。 - Risadinha
@Santhosh 你可以通过运行 pipenv run pip freeze > requirements.txt 来生成一个需求文件。 - Evan Ottinger

1

Docker容器提供了已经隔离的环境,这与virtualenv的目标相似。因此,如果只有一个应用程序在Docker容器中运行,则可以直接使用它,而不需要virtualenv带来的另一层。个人而言,在容器中没有看到过使用virtualenv的Django应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接