# Docker
Docker 镜像加载原理是 UnionFs (联合文件系统)
# 优化手段
- .dockerignore 忽略没用的文件
- ADD COPY RUN 都会增加镜像层数, 所以尽量指令合并
- 多阶段构建
npm install --production
不下载devDependencyADD package.json /code
先拷贝package.json 再npm i,依赖没有变化的情况可以缓存node_modules, 充分利用docker layer 的缓存机制 (opens new window).
RUN \
npm i --registry=https://registry.npm.taobao.org
COPY src /app/src
RUN \
npm run build
RUN \
NODE_ENV=production yarn build
FROM node:14-alpine as build-stage
WORKDIR /code
# 单独分离 package.json,是为了安装依赖可最大限度利用缓存
ADD package.json yarn.lock /code/
RUN yarn
ADD . /code
RUN npm run build
# 选择更小体积的基础镜像
FROM nginx:alpine
ADD nginx.conf /etc/nginx/conf.d/default.conf
COPY /code/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]