我见过许多DockerFile的例子,其中包含conda命令。还有预制的蟒蛇和迷你蟒蛇容器。我一定错过了什么
docker不是取代了virtualenv和conda吗?我的dockerfile中不应该有我所有的依赖项吗?我不明白在这里添加水蟒有什么好处。事实上,如果我没有使用miniconda包含的所有模块,就必须拉一个miniconda容器,那么它似乎会使我的容器变得不必要的大
Docker不能代替任何东西。这只是做事的一种方式
不,您不应该将所有依赖项都放在Dockerfile中。一、 例如,将从virtualenv运行pip安装,而从未接触Docker/*conda,除非我有充分的理由。您缺少requirements.txt不是一个很好的理由:)
康达于2012年面世,远远早于多克。由于Python在非程序员社区中拥有如此强大的追随者,我很少期望有可理解的代码,更不用说某种类型的DevOps功能了。康达是这个群体的完美解决方案
有了Docker,您就可以拥有一个功能强大的Docker环境,其中包含来自python:xx的,COPY/workdir,并运行pip安装-r requirements.txt(假设您使用的是该文件*ahem),但是您的开发人员可能需要一个卷才能工作(因此他们需要知道--卷。此外,如果您运行的是Django,您需要配置端口(现在他们需要--端口,您需要公开).噢,Django可能还需要一个数据库。现在您需要另一个容器,并且正在编写docker compose文件
但是请考虑下面的内容,从我的专业(DeVOPS)经验来看,如果你只包含需求。
- 我可以在Docker容器中使用该文件
- 这些要求都在一个地方
- 如果我愿意,我可以用venv在我的本地电脑上开发
- Travis可以从requirements.txt安装并在多个版本上进行测试,而无需使用Tox
- Setuptools会自动处理,所以我的东西可以与pip一起使用
- 我可以将这些DockerFile(或部件)与ECS、Kubernetes等一起重用
- 我可以在不使用Docker的情况下部署到EC2
- 我可以通过pip在本地安装该软件包
HTH-不要太拘泥于一项技术