如何使 docker-build 也缓存 pip 安装?
How to make docker-build to cache the pip installs as well?
我正在使用以下 Dockerfile
。
FROM ubuntu
RUN apt-get update
RUN apt-get install -y \
python3.9 \
python3-pip
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 8501
ENTRYPOINT [ "streamlit", "run" ]
CMD ["app.py"]
每当我重建图像时,docker 使用以前缓存的图像版本并快速构建它,除非它到达 RUN pip install -r requirements.txt
部分,每次我重建图像时它都会运行图像(不缓存)。问题是 requirements.txt
中的一个要求是 streamlit==1.9.0
,它有大量的依赖关系,所以它减慢了重建过程。长话短说,docker 正在缓存 RUN apt-get install foo
而不是 RUN pip install bar
,我想这是预料之中的。当 requirements.txt
文件中的列表很长时,您如何找到解决方法来加快图像重建过程?
它无法缓存它,因为您在应用程序中的文件不断变化(我猜)。通常的做法是先单独复制requirements.txt,然后安装,然后复制其他所有内容。这样,docker 可以缓存安装,因为 requirements.txt 没有改变。
FROM ubuntu
RUN apt-get update
RUN apt-get install -y \
python3.9 \
python3-pip
WORKDIR /app
COPY requirements.txt . # Copy ONLY requirements. This layer is cached if this file doesn't change
RUN pip install -r requirements.txt # This uses the cached layer if the previous layer was cached aswell
COPY . .
EXPOSE 8501
ENTRYPOINT [ "streamlit", "run" ]
CMD ["app.py"]
Docker BuildKit 最近在构建时引入了挂载。
见https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
对于 PIP 的特定场景,请查看 https://dev.doroshev.com/docker-mount-type-cache/
我正在使用以下 Dockerfile
。
FROM ubuntu
RUN apt-get update
RUN apt-get install -y \
python3.9 \
python3-pip
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 8501
ENTRYPOINT [ "streamlit", "run" ]
CMD ["app.py"]
每当我重建图像时,docker 使用以前缓存的图像版本并快速构建它,除非它到达 RUN pip install -r requirements.txt
部分,每次我重建图像时它都会运行图像(不缓存)。问题是 requirements.txt
中的一个要求是 streamlit==1.9.0
,它有大量的依赖关系,所以它减慢了重建过程。长话短说,docker 正在缓存 RUN apt-get install foo
而不是 RUN pip install bar
,我想这是预料之中的。当 requirements.txt
文件中的列表很长时,您如何找到解决方法来加快图像重建过程?
它无法缓存它,因为您在应用程序中的文件不断变化(我猜)。通常的做法是先单独复制requirements.txt,然后安装,然后复制其他所有内容。这样,docker 可以缓存安装,因为 requirements.txt 没有改变。
FROM ubuntu
RUN apt-get update
RUN apt-get install -y \
python3.9 \
python3-pip
WORKDIR /app
COPY requirements.txt . # Copy ONLY requirements. This layer is cached if this file doesn't change
RUN pip install -r requirements.txt # This uses the cached layer if the previous layer was cached aswell
COPY . .
EXPOSE 8501
ENTRYPOINT [ "streamlit", "run" ]
CMD ["app.py"]
Docker BuildKit 最近在构建时引入了挂载。
见https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
对于 PIP 的特定场景,请查看 https://dev.doroshev.com/docker-mount-type-cache/