使用 setup.cfg 时缓存 docker 安装要求

shu*_*e87 5 python docker

我目前正在尝试安装 Python 包作为 Docker 构建的一部分。此 Python 包使用 setup.cfg 来存储其依赖项的元数据。通过requirements.txt,我可以使用以下内容来缓存依赖项的安装:

\n
COPY requirements.txt /app\nRUN pip install -r requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

但这段代码是一个可通过 pip 安装的 Python 包,它将依赖信息存储在 setup.cfg 中,目录结构如下:

\n
tree -L 2 .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mypy.ini\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tox.ini\n\n
Run Code Online (Sandbox Code Playgroud)\n

然后安装如下:

\n
COPY common /deps/common\nRUN pip install file:///deps/common\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,这不再缓存需求的安装,因此任何代码更改现在都必须每次都获取并重新安装 python 包依赖项。如何以 docker 可以理解的方式缓存 setup.cfg 指定的依赖安装?

\n

Mar*_*ian 1

对于包含buildkit的新版本 Docker(例如 Docker 23),您可以在 Dockerfile 中指定本地缓存命令,如下所示:pip

RUN --mount=type=cache,target=/root/.cache pip install -r ./requirements.txt
Run Code Online (Sandbox Code Playgroud)

第一次构建 docker 容器后,通过 pip 下载的文件将缓存在本地文件系统中,由于下载较少,后续的 docker 构建速度会更快。

此外,您的 docker 容器将会更小,因为 pip 下载的文件不会包含在 docker 镜像中。