Goer-Docker系统-1-Dockerfile的构建速度优化
优化 Dockerfile 的构建速度,核心是最大化利用构建缓存、减少不必要的构建步骤和降低资源传输成本。以下是经过实践验证的关键技巧,附具体示例和原理说明:
一、核心原则:最大化利用构建缓存
Docker 构建镜像时,会对每一条指令生成的层进行缓存。如果指令内容(包括其依赖的文件)与历史构建完全一致,Docker 会直接复用缓存层,跳过重新构建。缓存利用得越好,构建速度越快。
1. 按「变更频率」排序指令(最关键)
将不常变更的指令放在前面(如基础镜像、安装依赖),频繁变更的指令放在后面(如复制业务代码)。
原因:前面的层不变更,后面的层即使变更,前面的缓存仍可复用,减少重复构建。
反例(低效):
FROM python:3.11-slim
WORKDIR /app
COPY . . # 先复制所有代码(频繁变更)
RUN pip install -r requirements.txt # 依赖安装(很少变更,但因前面的 COPY 变更,这里会重新执行)
正例(高效):
FROM python:3.11-slim # 基础镜像(极少变更,优先缓存)
WORKDIR /app# 先复制依赖文件(很少变更),单独安装依赖(利用缓存)
COPY requirements.txt .
RUN pip install -r requirements.txt # 最后复制业务代码(频繁变更,只影响这一层)
COPY app.py .
