全书目录

第十篇:Docker 完全指南 —— 国际港口集装箱宇宙

第六章:Layer —— Docker 为什么不是“重新打包一整坨”

1 分钟 263 字 第 152 / 962 个阅读单元

Docker 镜像不是一个整块文件的黑盒。

Docker 官方文档强调:

  • 镜像由层组成
  • 层是按顺序堆叠的
  • 每层表示相对上一层的变更

类比成装柜记录:

text
镜像层(Layer)
├── 第1层:基础操作系统和运行时
├── 第2层:安装系统依赖
├── 第3层:安装应用依赖
├── 第4层:拷贝业务代码
└── 第5层:设置启动命令
#1. 为什么层很重要

因为 Docker 可以复用没变的层。

dockerfile
FROM node:22-alpine
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . .
CMD ["node", "server.js"]

这段顺序就很合理:

  • 先拷依赖清单
  • 先装依赖
  • 再拷业务代码

这样如果你只是改了应用代码而没改依赖,前面的依赖安装层可以复用,不用每次重新 npm ci

#2. 新手最常写错的层顺序

错误示例:

dockerfile
COPY . .
RUN npm ci

这会导致:

  • 代码一改
  • 前面的 COPY . . 层就变了
  • RUN npm ci 后面的缓存也很容易失效
#3. 层的本质心智
text
Layer
= 增量变更记录
不是完整副本重复打包