作为 dockerfile 的一部分编译的 Pip - 向 requirements.txt 添加新条目的最快方法?
Pip compiled as part of dockerfile - fastest way to add a new entry to requirements.txt?
我正在使用 this Dockerfile as part of this docker compose file。
现在,每次我想添加新的 pip 要求时,我都会停止我的容器,添加新的 pip 要求,运行 docker-compose -f local.yml build
,然后用 [=12] 重新启动容器=].这需要很长时间,如果我只添加 pip 依赖项,它甚至看起来像是在为 Postgres 重新编译容器。
将单个 pip 依赖项添加到容器的最快方法是什么?
这与 Docker 构建缓存正在失效的事实有关。当您编辑 requirements.txt
时,步骤 RUN pip install --no-cache-dir -r /requirements/production.txt
和 Docker 文件中的所有后续指令都会失效。因此他们被重新执行。
作为最佳实践,您应该尽可能避免使构建缓存失效。这是通过将经常更改的步骤移动到 Docker 文件的底部来实现的。您可以编辑 Docker 文件,并在开发时将单独的 pip 安装步骤添加到最后。
...
USER django
WORKDIR /app
pip install --no-cache-dir <new package>
pip install --no-cache-dir <new package2>
...
一旦你确定了所有需要的依赖项,将它们添加到需求文件中。这样您就可以避免过早地使构建缓存失效,并且只构建从在 ward 上安装新软件包开始的步骤。
我正在使用 this Dockerfile as part of this docker compose file。
现在,每次我想添加新的 pip 要求时,我都会停止我的容器,添加新的 pip 要求,运行 docker-compose -f local.yml build
,然后用 [=12] 重新启动容器=].这需要很长时间,如果我只添加 pip 依赖项,它甚至看起来像是在为 Postgres 重新编译容器。
将单个 pip 依赖项添加到容器的最快方法是什么?
这与 Docker 构建缓存正在失效的事实有关。当您编辑 requirements.txt
时,步骤 RUN pip install --no-cache-dir -r /requirements/production.txt
和 Docker 文件中的所有后续指令都会失效。因此他们被重新执行。
作为最佳实践,您应该尽可能避免使构建缓存失效。这是通过将经常更改的步骤移动到 Docker 文件的底部来实现的。您可以编辑 Docker 文件,并在开发时将单独的 pip 安装步骤添加到最后。
...
USER django
WORKDIR /app
pip install --no-cache-dir <new package>
pip install --no-cache-dir <new package2>
...
一旦你确定了所有需要的依赖项,将它们添加到需求文件中。这样您就可以避免过早地使构建缓存失效,并且只构建从在 ward 上安装新软件包开始的步骤。