Pip编译为dockerfile的一部分 - 向requirements.txt添加新条目的最快方法?

时间:2018-01-25 11:01:23

标签: docker docker-compose cookiecutter-django

我正在使用this Dockerfile作为this docker compose file的一部分。

现在,每次我想添加新的pip需求时,我都会停止我的容器,添加新的pip需求,运行docker-compose -f local.yml build,然后使用docker-compose -f local.yml up重新启动容器。这需要很长时间,如果我只是添加一个pip依赖项,它甚至看起来像重新编译Postgres的容器。

向容器添加单个pip依赖项的最快方法是什么?

1 个答案:

答案 0 :(得分:3)

这与Docker构建缓存失效的事实有关。当您编辑requirements.txt步骤RUN pip install --no-cache-dir -r /requirements/production.txt时,Dockerfile中的所有后续指令都会失效。因此他们被重新执行。

作为最佳实践,您应该尽可能避免无效地使用构建缓存。这是通过将经常更改的步骤移动到Dockerfile的底部来实现的。您可以编辑Dockerfile,并在开发过程中添加单独的pip安装步骤。

...

USER django

WORKDIR /app

pip install --no-cache-dir <new package>
pip install --no-cache-dir <new package2>

...

一旦确定所需的所有依赖项,请将它们添加到需求文件中。这样你就可以避免在早期使构建缓存失效,并且只构建从在病房安装新软件包开始的步骤。