我正在使用this Dockerfile作为this docker compose file的一部分。
现在,每次我想添加新的pip需求时,我都会停止我的容器,添加新的pip需求,运行docker-compose -f local.yml build
,然后使用docker-compose -f local.yml up
重新启动容器。这需要很长时间,如果我只是添加一个pip依赖项,它甚至看起来像重新编译Postgres的容器。
向容器添加单个pip依赖项的最快方法是什么?
答案 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>
...
一旦确定所需的所有依赖项,请将它们添加到需求文件中。这样你就可以避免在早期使构建缓存失效,并且只构建从在病房安装新软件包开始的步骤。