哪个更好 - 虚拟环境或 docker?

时间:2021-02-28 10:22:57

标签: python django docker django-rest-framework

我是后端开发的新手,并且有一些我无法清除的严重疑问。 我将在一些生产级别的 djangoRestFramework 项目上工作,我通过创建一个虚拟环境来学习它。现在我遇到了这个 Docker 的事情。现在我可以说这为我们的项目提供了操作系统级别的抽象。 但是我应该使用哪个,docker 还是 virtualenv?为什么?我想在某个地方部署同一个项目,如果我使用 docker tr virtualenv 会有什么好处?

谢谢

2 个答案:

答案 0 :(得分:1)

virtualenv 只封装 Python 依赖项。一个 Docker 容器封装了整个操作系统。 使用 Python virtualenv,您可以轻松地在 Python 版本和依赖项之间切换,但您会被主机操作系统困住。

使用 Docker 映像,您可以更换整个操作系统 - 在 Ubuntu、Debian、Alpine 甚至 Windows Server Core 上安装和运行 Python。

Docker 镜像包含您能想到的各种操作系统和 Python 版本的组合,随时可以下载并在安装了 Docker 的任何系统上使用。

https://hub.docker.com/_/python/

简单来说,如果你有代码的 docker 镜像,你可以安装 python 并在任何首选环境中运行它。哪个 virtualenv 不支持

使用 python 虚拟环境,你只能切换黑白 python 环境。

最好的方法是编写一个使用 virtal env 的 docker 文件,这样您就可以切换不同版本的 python(如果您需要处理多个版本)

答案 1 :(得分:1)

只需一个轻量级的 virtualenv,您就可以快速构建您的环境。但是你只会有你的p​​ython包。其他工具或配置(如数据库、缓存等)应在生产服务器上完成。这意味着你的本地环境、CI 环境和生产环境都会有差异。 keep 12 factor dev/prod parity 更难。

如果您还使用 docker,那么您将拥有所有环境通用的完整工具链,或者至少,即使您不使用 docker 镜像进行开发,您也可以运行生产镜像在不影响生产的情况下在本地调查行为。在将功能移至生产环境时,您不会有任何意外(或几乎没有)。由于您的应用程序将封装在虚拟操作系统中,因此您的托管服务器也将获得更好的安全性。

docker 的缺点是构建和执行都比较繁重。在另一个操作系统中使用操作系统会增加您管理的复杂性。

相关问题