让Dockerfile里的包管理器也用上缓存

问题

FROM python:3.9
COPY requirements.txt .
RUN pip install -r requirements.txt

当使用类似以上的 Dockerfile 来构建镜像,无论是第几次构建镜像pip都要重新下载 requirements.txt 中的所有依赖,这很费时间。理想方案是,除了第一次构建,后续的构建只有当requirements.txt中新增依赖时pip才去从互联网上下载内容,否则直接使用本机 Docker 中缓存的依赖(之前构建时产生的)。

解决方案

RUN 命令支持一个选项 --mount=type=cache,可以挂载一个临时目录来为编译器和包管理器缓存目录。

先决条件

为了开启 Docker Buildkit 功能,终端执行 export DOCKER_BUILDKIT=1 命令。

Dockerfile

上面的 Dockerfile 改写成如下形式:

# syntax=docker/dockerfile:1.3
FROM python:3.9
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache \
    pip install -r requirements.txt

上面的 # syntax=docker/dockerfile:1.3BuildKit Dockerfile frontend 需要的。

参考


image

posted @ 2023-03-17 19:19  复读机§  阅读(1122)  评论(0编辑  收藏  举报