原始Dockerfile
在使用 Node.js 20的官方基础镜像打包出来的镜像体积有1.2G
# 使用 Node.js 20的官方基础镜像
FROM node:20.11.1
# 设置工作目录
WORKDIR /app
# 将 package.json 和 yarn.lock 复制到容器中
COPY package.json yarn.lock ./
# 设置npm镜像
RUN npm config set registry https://registry.npmmirror.com
# 安装yarn和项目依赖
# RUN npm install -g yarn
# 设置Yarn使用淘宝镜像
RUN yarn config set registry 'https://registry.npmmirror.com'
# 安装项目依赖
RUN yarn install
# 将项目文件复制到容器中
COPY . .
# 构建项目
RUN yarn build
# 容器启动时运行
CMD ["yarn", "start"]
新版Dockerfile
- 先使用node:20.11.1-alpine构建应用
- 在使用node:20.11.1-alpine复制build后的文件
- 最后打包的体积为200M
# 第一阶段:构建应用
FROM node:20.11.1-alpine AS build_image
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
RUN yarn build
# 第二阶段:运行应用
FROM node:20.11.1-alpine
WORKDIR /app
COPY --from=build_image /app/.next ./.next
COPY --from=build_image /app/node_modules ./node_modules
COPY --from=build_image /app/package.json ./package.json
COPY --from=build_image /app/public ./public
# Next.js官方推荐使用自己的服务器进行生产环境部署
EXPOSE 3000
CMD ["node_modules/.bin/next", "start", "-p", "3000"]