From d42c83c9e9d17c19fcebf43dccc49d17e9d0ff03 Mon Sep 17 00:00:00 2001 From: lixin Date: Fri, 10 Jan 2025 14:37:00 +0800 Subject: [PATCH] =?UTF-8?q?build(docker):=20=E9=87=8D=E6=9E=84=20Dockerfil?= =?UTF-8?q?e=20=E5=B9=B6=E7=AE=80=E5=8C=96=20CI=20=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构 Dockerfile,使用多阶段构建以减小最终镜像大小 - 更新 .drone.yml,使用单一步骤完成构建和 --- .drone.yml | 41 +++++++++-------------------------------- Dockerfile | 48 +++++++++++++++++++++--------------------------- 2 files changed, 30 insertions(+), 59 deletions(-) diff --git a/.drone.yml b/.drone.yml index 2b4614c..fbdece8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,38 +3,15 @@ type: docker name: default steps: -- name: git-clone - image: alpine/git - commands: - - git clone http://120.48.5.80:3000/lixin/automated_api.git - - cd automated_api - -- name: setup-pnpm - image: node:22-alpine - commands: - - npm install -g pnpm - - pnpm config set registry https://registry.npmmirror.com - -- name: install-deps - image: node:22-alpine - commands: - - pnpm install - volumes: - - name: node_modules - path: /app/node_modules - -- name: build - image: node:22-alpine - commands: - - pnpm run build - -- name: docker-build - image: plugins/docker - settings: - dockerfile: Dockerfile - repo: rz/automated_api - tags: latest - + - name: build-and-push + image: plugins/docker + settings: + repo: your-registry/automated-api + tags: + - latest + - ${DRONE_COMMIT_SHA:0:8} + registry: your-registry + trigger: diff --git a/Dockerfile b/Dockerfile index 8a0f299..35272e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,31 @@ -FROM node:lts-alpine +# 构建阶段 +FROM node:18-alpine as builder WORKDIR /app -# 配置alpine国内镜像加速 -RUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories +COPY package.json . +COPY package-lock.json* . -# 安装tzdata,默认的alpine基础镜像不包含时区组件,安装后可通过TZ环境变量配置时区 -RUN apk add --no-cache tzdata +RUN npm install -# 设置时区为中国东八区,这里的配置可以被docker-compose.yml或docker run时指定的时区覆盖 -ENV TZ="Asia/Shanghai" - -# 如果各公司有自己的私有源,可以替换registry地址,如使用官方源注释下一行 -RUN npm config set registry https://registry.npmmirror.com - -# 安装 pnpm 和全局依赖 -RUN npm install -g pnpm -RUN pnpm config set registry https://registry.npmmirror.com - -# 安装开发期依赖 -COPY package.json ./package.json -RUN pnpm install - -# 构建项目 COPY . . -RUN pnpm run build -# 删除开发期依赖 -RUN rm -rf node_modules && rm pnpm-lock.yaml -# 安装生产环境依赖 -RUN pnpm install --production +RUN npm run build + +# 运行阶段 +FROM node:18-alpine + +WORKDIR /app + +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/package.json . +COPY --from=builder /app/bootstrap.js . + +RUN npm install --production + +ENV NODE_ENV=production +ENV PORT=8001 -# 如果端口更换,这边可以更新一下 EXPOSE 8001 -CMD ["pnpm", "start"] \ No newline at end of file +CMD ["node", "bootstrap.js"] \ No newline at end of file