Docker和Python virtualenv有什么区别?

时间:2018-06-21 18:00:31

标签: python docker virtualenv

据我对Docker的了解,它是用于虚拟环境的工具。用他们的术语来说,它叫做“容器化”。这或多或少是Python的virtualenv所做的。但是,您可以在Docker中使用virtualenv 。那么,它是虚拟环境内部的虚拟环境吗?我对这甚至如何工作感到困惑,所以有人可以澄清一下吗?

4 个答案:

答案 0 :(得分:28)

virtualenv仅封装Python依赖项。 Docker容器封装了一个整个操作系统

使用Python virtualenv,您可以轻松地在Python版本和依赖关系之间进行切换,但是您无法使用主机操作系统。

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

您可以想到Docker images,其中包含您可以想到的OS和Python版本的每种组合,随时可以将其下拉并在安装了Docker的任何系统上使用。

答案 1 :(得分:12)

Python虚拟环境将仅“包含” Python运行时,即python解释器和python库,而Docker隔离整个系统(整个文件系统,所有用户空间库,网络接口)。因此,Docker比虚拟环境更接近虚拟机。

答案 2 :(得分:4)

除了上述内容:还有一种将docker和venv结合使用的情况:某些操作系统随附安装了python的软件,以提供“接近OS”的应用程序,例如,据我所知,适用于debian(及其衍生产品)。 python venv使开发人员可以发布需要不同解释器版本的python应用,而又不会影响OS附带的python。现在,由于Docker如上所述“隔离了整个操作系统”,因此同样适用于Docker映像。因此,在我看来,如果需要/需要Docker映像,则最佳实践是在Docker映像中为您的python应用创建venv。

答案 3 :(得分:0)

“一个虚拟环境,一个自包含的目录树,其中包含针对特定 Python 版本的 Python 安装,以及一些附加包”

docker 容器提供了更高级别的抽象/隔离,它可以拥有自己的“进程空间、文件系统、网络空间、ipc 空间等”