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