virtualenv在使用docker时是否有用(生产中)?

sie*_*z0r 61 python virtualenv docker

对于开发,我们使用virtualenv在依赖关系时进行隔离开发.从这个问题来看,似乎建议在部署Python应用程序.

现在我们开始使用进行部署.这提供了一个更加孤立的环境,因此我质疑在docker容器中使用virtualenv.在单个应用程序的情况下,我不认为virtualenv有一个目的,因为docker已经提供隔离.在单个docker容器上部署多个应用程序的情况下,我认为virtualenv有一个目的,因为应用程序可能存在冲突的依赖关系.

在docker容器中部署单个应用程序时应该使用virtualenv吗?

docker是否应包含多个应用程序或每个容器只包含一个应用程

如果是这样,在部署具有多个应用程序的容器时是否应该使用virtualenv?

Aar*_*lla 64

Virtualenv早在docker之前创建.今天,由于以下原因,我倾向于使用docker而不是virtualenv:

  • Virtualenv仍然意味着消费产品的人需要下载鸡蛋.使用docker,他们得到了"已知可行"的东西.没有任何附加条件.
  • Docker可以比virtualenv做更多的事情(比如当你的产品需要不同的Python版本时创建一个干净的环境).

Docker的主要缺点是Windows支持不佳.随着Windows 10的版本而改变.

至于"每个容器有多少个应用程序",通常的政策是1.


Bru*_*sky 31

是.你仍然应该使用virtualenv.此外,你现在应该建造轮子而不是鸡蛋.最后,您应该确保通过使用完整的构建工具在容器中构建轮子并在应用程序容器中不安装构建工具来保持Docker镜像的精简和高效.

你应该阅读这篇优秀的文章.https://glyph.twistedmatrix.com/2015/03/docker-deploy-double-dutch.html

关键是拿走

确实,在许多情况下,甚至大多数情况下,简单地将内容安装到系统Python中,使用Pip工作正常; 但是,对于更复杂的应用程序,您最终可能希望调用由Python实现的基本容器提供的工具,但该工具需要由主机管理的依赖项.无论如何将内容放入virtualenv中,我们将基本映像的包系统设置的内容与我们的应用程序正在构建的内容整齐地分开,这意味着不应该有任何不可预见的交互,无论应用程序使用Python的程度有多复杂是.

  • [PEP370](https://www.python.org/dev/peps/pep-0370/)引入了--user标志(2008年),允许在$ HOME中安装软件包.这照顾了我曾经使用过virtualenv/pyvenv的99%的用例.我想是好记住的. (9认同)
  • 我刚投票,没有评论.这对任何人都有帮助吗? (4认同)
  • 如果您使用像样本中使用的ubuntu这样的膨胀容器操作系统,则可能会出现这种情况.但是如果你选择合适的操作系统,比如Alpine,这不是问题.没有开箱即用的Python的高山船只,所以你知道你的Python安装只是因为你安装它,因为你的应用程序需要它. (4认同)

mus*_*oyi 12

介绍virtualenv非常简单,所以我想在你的docker容器上启动它.

如果需要,那么也许你可以安装它.运行"pip freeze> requirements.txt"将为您提供所有的python包.但是,我怀疑你在docker容器中需要virtualenv,因为创建另一个容器将是更好的选择.

我不建议在一个容器中使用多个应用程序.当你到达这一点时,你的容器做得太多了.