康达在集装箱内的目的是什么?

我已经看到很多使用conda命令的dockerfiles例子。 还有预先build立的anaconda和miniconda容器。 我肯定错过了什么。

docker REPLACE virtualenv和conda? 我不应该在我的dockerfile中拥有所有的依赖关系吗? 我不明白从这里添加anaconda我得到了什么。 事实上,如果我不得不使用所有的miniconda包含的模块,我必须拉一个miniconda容器,这似乎使我的容器不必要地变大了。

Docker不能取代任何东西。 这只是一种做事的方式。

不,你不应该在你的Dockerfile中拥有所有的依赖。 举个例子,我会从virtualenv运行pip install ,除非我有一个很好的理由,否则不会触及Docker / * conda。 你缺乏requirements.txt是不是一个好的理由:)

Conda在2012年出现了 – 在Docker之前。 由于Python在非程序员社区中有如此强大的追随者,我很less期望可以理解的代码,更不用说某种types的DevOps能力。 康达是这个组织的完美解决scheme。

使用Docker,您可以使用FROM python:xxCOPY . /workdir来创build一个function正常的Docker环境COPY . /workdir COPY . /workdirRUN pip install -r requirements.txt (假设你正在使用这个文件),但是你的开发人员可能需要一个卷才能工作(所以他们需要知道--volume 。重新运行Django,你需要configuration端口(现在他们需要--port而你需要EXPOSE )哦,Django也可能需要一个数据库,现在你需要另一个容器,并且你正在编写一个docker-compose文件。

但是,从几乎所有的专业(DevOps)经验中,如果您只包含requirements.txt,

  • 我可以在我的Docker容器中使用该文件
  • 这些要求都在一个地方
  • 如果我想的话,我可以在当地发展
  • Travis可以从requirements.txt安装,并在不使用Tox的情况下在多个版本上进行testing
  • Setuptools自动处理,所以我的事情与点
  • 我可以将这些Docker文件(或部分)与ECS,Kubernetes等重复使用
  • 我可以部署到EC2而不使用Docker
  • 我可以通过pip在本地安装软件包

HTH–不要太拘泥于一项技术!