层缓存
❌ 不好的做法
COPY . . # 任何文件变化都会使缓存失效 RUN npm install # 即使 package.json 没变,也要重新安装
✅ 好的做法
COPY package*.json ./ # 只有 package.json 变化才失效 RUN npm install # 依赖没变就使用缓存 COPY . . # 源代码变化不影响上面的层
TODO:
- 使用nginx或者caddy托管静态文件服务,不要使用来自node npm的任何其他东西 https://www.bilibili.com/video/BV1QmkVYiEjg/?spm_id_from=333.337.search-card.all.click&vd_source=9529002c63d8eefaf57e87e2c8193594
条件构建
dockerfile
# 使用构建参数控制安装开发依赖
ARG NODE_ENV=production
COPY package*.json ./
RUN if [ "$NODE_ENV" = "development" ]; \
then npm install; \
else npm install --production; \
fi
定义 ARG
ARG 用于定义构建参数,只在构建镜像时可用: ARG VERSION=latest ARG NODE_ENV=production