层缓存优化
核心概念
# 每条指令 = 一个层
FROM node:18
COPY . . # ❌ 任何文件变化都重新执行
RUN npm install # 每次都重新安装
# ✅ 优化:利用缓存
FROM node:18
COPY package*.json ./
RUN npm install # package.json 不变就用缓存
COPY . . # 代码变化不影响依赖安装
缓存规则
层 N 缓存命中条件:
1. 父层没变
2. 指令没变
3. COPY/ADD 的文件内容没变
最佳实践
# 1. 不常变的放前面
FROM python:3.11
COPY requirements.txt .
RUN pip install -r requirements.txt # 缓存
COPY . . # 代码变,依赖不变
# 2. 合并 RUN 减少层数
RUN apt-get update && \
apt-get install -y curl && \
rm -rf /var/lib/apt/lists/*
# 3. 使用 .dockerignore 排除无关文件
小结
| 技巧 | 效果 |
|---|
| 不变的层放前面 | 命中缓存 |
| 先复制依赖文件 | 避免重复安装 |
| 合并 RUN | 减少层数 |