【问题标题】:Which is better- virtual env or docker? [closed]哪个更好 - 虚拟环境或码头? [关闭]
【发布时间】:2021-05-30 03:26:12
【问题描述】:
我是后端开发的新手,并且有一些我无法清除的严重疑问。
我将在一些生产级别的 djangoRestFramework 项目上工作,我通过创建虚拟环境来学习它。现在我遇到了这个 Docker 的东西。现在我可以说这为我们的项目提供了操作系统级别的抽象。
但是我应该使用 docker 还是 virtualenv?为什么?我想在某个地方部署同一个项目,如果我使用 docker tr virtualenv 会有什么好处?
谢谢
【问题讨论】:
标签:
python
django
docker
django-rest-framework
【解决方案1】:
只需一个轻量级的 virtualenv,您就可以快速构建您的环境。但是你只会有你的 python 包。其他工具或配置(如数据库、缓存等)应在生产服务器上完成。这意味着你的本地环境、CI 环境和生产环境会有差异。
keep 12 factor dev/prod parity比较难。
如果您还使用 docker,那么您将拥有所有环境通用的完整工具链,或者至少,即使您不使用 docker 镜像进行开发,您也可以运行生产镜像在不影响生产的情况下在本地调查行为。在将功能转移到生产环境时,您不会有任何意外(或很少)。由于您的应用程序将被封装在虚拟操作系统中,因此您的托管服务器也将获得更好的安全性。
docker 的缺点是构建和执行都会比较重。并且在另一个操作系统中拥有一个操作系统会增加您管理的复杂性。
【解决方案2】:
virtualenv 仅封装 Python 依赖项。一个 Docker 容器封装了整个操作系统。
使用 Python virtualenv,您可以轻松地在 Python 版本和依赖项之间切换,但您会被主机操作系统所困扰。
使用 Docker 映像,您可以更换整个操作系统 - 在 Ubuntu、Debian、Alpine 甚至 Windows Server Core 上安装和运行 Python。
那里有 Docker 映像,其中包含您能想到的各种 OS 和 Python 版本的组合,随时可以下载并在任何安装了 Docker 的系统上使用。
https://hub.docker.com/_/python/
简单来说,如果你有你的代码的 docker 镜像,你可以安装 python 并在任何首选的环境中运行它。哪个 virtualenv 不支持
使用 python 虚拟环境,您只能切换黑白 python 环境。
最好的方法是编写一个使用 virtal env 的 docker 文件,这样你就可以切换不同版本的 python(如果你需要处理多个版本)