【问题标题】:Docker containers python environment vs python virtual environmentsDocker 容器 python 环境 vs python 虚拟环境
【发布时间】:2020-11-19 17:41:23
【问题描述】:

我主要使用 python 进行编程,并且对虚拟环境有一定的经验。我是该软件的新手,并开始使用 docker 来运行我的代码。我想了解它的作用和工作原理。

据我了解,docker 容器就像虚拟环境,在执行时运行一组指令,并且可以将其中包含的所有内容视为一个实体(因此它或其他东西不会是有条件的互相攻击?)。当我阅读更多有关容器的信息时,它们听起来非常完美,并且会消除对虚拟环境的任何需求,但又不确定。非常感谢您对此进行澄清,因为我无法在网上找到任何东西。

【问题讨论】:

  • 查看他们的 101 系列,相当不错docker.com/101-tutorial。另外,如果您想更深入地了解,请观看此youtube.com/watch?v=8fi7uSYlOdc
  • 这能回答你的问题吗? Docker, what is it and what is the purpose?
  • Docker的隔离环境也将宿主机的本地文件系统和容器的文件系统分开;这是许多典型应用程序的问题。如果您正在积极开发,这种隔离还意味着容器与您的 IDE 有一个单独的文件系统,这很不方便。

标签: python docker containers virtual environment


【解决方案1】:

我更愿意将容器视为操作系统之上的操作系统。你可以在谷歌上搜索很多关于 docker 的信息,但如果用简单的语言来说,它是一个运行在你的操作系统之上的薄层,使用你的操作系统的资源(与 VM 不同),并运行它自己的封闭环境。

【讨论】:

    【解决方案2】:

    python虚拟环境的主要目的是隔离每个项目的环境,这意味着每个项目都可以有自己的依赖关系,而不管其他项目有什么依赖关系。

    what-is-a-virtual-environment

    但是对于 docker,你可以将每个 docker 镜像视为一个独立的环境,你不需要在 Dockerfile 中创建或维护虚拟环境,因为 Dockerfile 应该基于特定的python 版本,应该运行单个项目。

    python-versions-docker

    简而言之,如果您有 3 个项目需要

    • 项目 A 需要 Python 3.6
    • 项目 B 需要 Python 3.7
    • 项目 C 需要 Python 3.8

    每个项目都需要选择基础镜像

    • 项目A FROM python:3.6
    • 项目 B FROM python:3.7
    • 项目 C FROM python:3.8

    【讨论】:

      【解决方案3】:

      两者中的任何一个都不能替代另一个。这取决于你在做什么。

      Python 虚拟环境是一种将所有应用程序依赖项封装在单个环境(实际上是一个目录)中的方法。这些依赖项是支持您正在使用的操作系统版本的其他应用程序和软件包。

      Docker 容器是一种通过共享大量操作系统文件以低资源消耗运行虚拟机的方法(更多详细信息请参阅 docker 文档)

      所以,

      如果需要创建开发环境;建议使用 docker,因为您可以复制所有开发人员的确切开发经验。一切都将位于具有自己的操作系统版本和自己的文件(虚拟)的虚拟机中。 Python 虚拟环境不会 100% 帮助其他开发人员,除非他们使用与您相同的操作系统版本,并且他们可以复制您的确切步骤来部署您的应用

      但是,如果您正在创建一个将部署远程服务器的包(比如说使用 ansible),那么 docker 将是一个额外的不需要的步骤。 Python 环境可以很好地完成这项工作,没有任何问题。

      此外,包含许多 python 虚拟环境的 docker 也很常见;每个服务一个环境。因此,即使是 docker 镜像也可以包含 python venv

      【讨论】:

      • 好的哇,谢谢。是不是docker比较重,我应该尽可能选择python虚拟环境?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2018-08-20
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多