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

对于开发,我们使用virtualenv在依赖性方面有一个孤立的发展。 从这个问题看来,build议在virtualenv中部署Python应用程序。

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

如果在Docker容器中部署单个应用程序,是否应该使用virtualenv?

docker应该包含多个应用程序或每个容器只有一个应用程序?

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

Virtualenv早在docker工人之前就已经build立起来了。 今天,我倾向于docker而不是virtualenv由于这些原因:

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

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

至于“每个容器有多less个应用”,通常的策略是1。

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

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

关键是拿走

确实,在很多情况下,甚至是大多数情况下,只需将Pip安装到系统中,Pip就可以正常工作; 然而,对于更复杂的应用程序,您可能最终希望调用您的基本容器提供的工具,该工具是用Python实现的,但是需要由主机pipe理的依赖关系。 不pipe怎么样,我们都把基本映像的包系统设置的东西与应用程序构build的东西保持整洁,这就意味着不应该有任何不相干的交互,不pipe应用程序对Python的使用有多复杂是。

介绍virtualenv是非常容易的,所以我会说你的docker集装箱没有它。

如果需要的话,也许你可以安装它。 运行“pip freeze> requirements.txt”会给你所有的python包。 然而,我怀疑你会需要docker容器内的virtualenv作为创build另一个容器将是一个更好的select。

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