Dockerfile 备忘

使用多阶段构建

多阶段构建有效使用镜像层级缓存,加快构建速度

  • 优先添加变化频率更低的文件,提升缓存命中率
  • 最终镜像中不包含构建阶段使用的工具,大量减小镜像体积

使用更小的基础镜像

更小的基础镜像有效节省大量磁盘空间,提高传输效率

  • 使用 alpine 文件系统通常能获得更小的镜像

example

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM node:alpine AS builder
WORKDIR /workspace # 指定工作目录
COPY yarn.lock .
COPY package.json . # 拷贝安装依赖使用到的项目文件 yarn.lock 与 package.json 到当前目录
RUN yarn # 安装依赖,yarn.lock 与 package.json 内容不改变的情况下第二次及之后的构建可以命中缓存

COPY public public
COPY src src # 拷贝打包阶段用到的源码文件等,排除其他打包阶段不需要的文件可以更有效率使用缓存
RUN yarn run build # 打包

FROM nginx:alpine # 从另一个基础镜像开始构建最终的镜像
COPY nginx.conf.template /etc/nginx/templates/app.conf.template # 拷贝 nginx 配置模版
COPY --from=builder /workspace/build /usr/share/nginx/html # 从上个阶段的镜像 builder 中拷贝打包好的静态资源到 nginx 默认静态文件目录