根据我对 Docker 的了解,它是一个用于虚拟环境的工具。在他们的行话里叫做“集装箱化”。这或多或少是 Python 的 viralenv 所做的。但是,您可以使用 viralenv 进去 Docker。那么,它是虚拟环境中的虚拟环境吗?我搞不懂这到底是怎么回事,能不能有人解释一下?
Python 虚拟环境将只“容器化”Python 运行时,即 Python 解释器和 Python 库,而 Docker 将整个系统(整个文件系统、所有用户空间库、网络接口)隔离开来。因此,与虚拟环境相比,Docker 更接近于虚拟机。
Virtual alenv 只封装 Python 依赖项,Docker 容器封装 整个操作系统。
使用 Python viralenv,您可以很容易地在 Python 版本和依赖项之间切换,但是必须使用主机操作系统。
使用 Docker 映像,你可以换掉整个操作系统安装,在 Ubuntu,Debian,Alpine,甚至 Windows Server Core 上运行 Python。
有 Docker 影像的每一个操作系统和 Python 版本的组合,你可以想到,准备下拉和使用在任何系统与 Docker 安装。
除此之外,还有一个将 docker 和 venv 结合起来的例子: 一些安装了 python 的操作系统提供了“ OS-near”应用程序,例如,据我所知,debian 上的 apt (及其衍生产品)。Python venv 允许开发人员发布一个 Python 应用程序,该应用程序需要不同的解释器版本,而不会影响随操作系统一起发布的 python。现在,因为如上所述,Docker“隔离了整个操作系统”,这同样适用于一个 Docker 映像。因此,在我看来,如果需要/想要一个 Docker 映像,最好的做法是在 Docker 映像中为 Python 应用创建一个 venv。
“一个虚拟环境,一个自包含的目录树,其中包含特定版本 Python 的 Python 安装,以及许多附加包”
Docker 容器提供了更高层次的抽象/隔离,它可以有自己的“进程空间、文件系统、网络空间、 ipc 空间等”