根据我对Docker的了解,它是一个用于虚拟环境的工具。在他们的术语中,这被称为“容器化”。这或多或少是Python的virtualenv所做的。然而,你可以在Docker中使用virtualenv。那么,这是在虚拟环境中的虚拟环境吗?我不确定这该如何运作,能否有人请澄清一下?
根据我对Docker的了解,它是一个用于虚拟环境的工具。在他们的术语中,这被称为“容器化”。这或多或少是Python的virtualenv所做的。然而,你可以在Docker中使用virtualenv。那么,这是在虚拟环境中的虚拟环境吗?我不确定这该如何运作,能否有人请澄清一下?
虚拟环境只封装 Python 依赖项。Docker 容器则封装整个操作系统。
使用 Python 虚拟环境,您可以轻松切换 Python 版本和依赖项,但只能在主机操作系统中运行。
使用 Docker 镜像,您可以更换整个操作系统 - 在 Ubuntu、Debian、Alpine 甚至 Windows Server Core 上安装和运行 Python。
有许多 Docker 镜像 包含各种 OS 和 Python 版本的组合,可以随时从任何已安装 Docker 的系统上下载并使用。
Python虚拟环境只会"容器化"Python运行时即Python解释器和Python库,而Docker隔离整个系统(整个文件系统、所有用户空间库、网络接口)。因此,Docker比虚拟环境更接近虚拟机。
除了上面的内容,还有一个将 Docker 和 venv 结合的情况:某些操作系统已安装 Python 以提供“接近操作系统”的应用程序,例如据我所知,在 Debian(及其衍生版)上是通过 apt 安装的。Python venv 可以使开发人员在不影响操作系统自带的 Python 的情况下,运行需要其他解释器版本的 Python 应用程序。现在,由于 Docker 如上所述“隔离整个操作系统”,同样适用于 Docker 镜像。因此,在我看来,如果需要/想使用 Docker 镜像,则最好的做法是在 Docker 镜像内为您的 Python 应用程序创建一个 venv。
虚拟环境是一个自包含的目录树,其中包含特定版本的Python安装程序以及一些额外的包。
Docker容器提供了更高级别的抽象/隔离,它可以拥有自己的“进程空间、文件系统、网络空间、IPC空间等”。
"但是,我可能是错的...
首先,容器不同于虚拟环境。
为更好地管理Python资源,建议创建虚拟环境并为每个版本配置相应的包。
https://docs.python.org/3/tutorial/venv.html
当使用Docker容器时,您已经执行了过程工程封装,您可以在其官方网站上进行查看。