Docker和Python virtualenv之间有什么区别

dan*_*oll 39 python virtualenv docker

根据我对Docker的理解,它是用于虚拟环境的工具.在他们的行话中,它被称为"集装箱化".这或多或少是Python的virtualenv所做的.但是,您可以 Docker中使用virtualenv .那么它是虚拟环境中的虚拟环境?我很困惑这甚至会如何工作,所以有人可以澄清一下吗?谢谢.

sp0*_*0gg 45

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

使用Python virtualenv,您可以轻松地在Python版本和依赖项之间切换,但是您仍然坚持使用主机操作系统.

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

有Docker 图像,你可以想到的操作系统和Python版本的每个组合,准备下载并在安装了Docker的任何系统上使用.

  • 此外,还有来自 Google 的“几种流行编程语言”(包括 Python)的 [distroless 镜像](https://github.com/GoogleContainerTools/distroless),它们“仅包含编程语言运行时”——来自 [ArchWiki/Docker]( https://wiki.archlinux.org/index.php/Docker#Distroless) (2认同)
  • 那么如果 Docker 换掉整个操作系统,那么它不是就变得和虚拟机一样了吗? (2认同)

jil*_*jil 14

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

  • 考虑到容器仅服务于 Flask Web 应用程序,在 docker 容器内创建虚拟环境有什么好处吗? (2认同)

Bli*_*ddy 14

添加到上述内容:有一个结合 docker 和 venv 的情况:一些操作系统附带安装了 python 以提供“OS-near”应用程序,例如,据我所知,适用于 debian(及其衍生产品)。python venv 使开发人员能够发布需要不同解释器版本的 python 应用程序,而不会影响随操作系统提供的 python。现在,由于 Docker 如上所述“隔离了整个操作系统”,这同样适用于 Docker 镜像。因此,在我看来,如果需要/需要 Docker 映像,最佳做法是在 Docker 映像中为您的 Python 应用程序创建一个 venv。

  • 这会减慢响应时间(两个级别的虚拟化)吗? (6认同)
  • Python 虚拟环境改变了它不虚拟化 Python 解释器的执行的 Python 环境。除非使用虚拟机管理程序(Docker Machine)执行,否则 Docker 容器不会被虚拟化。 (4认同)