Skip to content

Instantly share code, notes, and snippets.

@xmsz
Created November 29, 2021 06:52
Show Gist options
  • Save xmsz/87bd049d34ac839300fbeb8cddc9eb68 to your computer and use it in GitHub Desktop.
Save xmsz/87bd049d34ac839300fbeb8cddc9eb68 to your computer and use it in GitHub Desktop.
Dockerfile + midway + pnpm + build + tzdata + apkMirror
FROM node:12 AS build
WORKDIR /app
COPY . .
RUN npm i pnpm -g --registry=https://registry.npmmirror.com
RUN pnpm i --prefer-offline -frozen-lockfile --shamefully-hoist --registry=https://registry.npmmirror.com
RUN npm run build
RUN pnpm prune --production
RUN pnpm i --prefer-offline -frozen-lockfile --shamefully-hoist --registry=https://registry.npmmirror.com -P
# 生成生产镜像
FROM node:12-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/bootstrap.js ./
COPY --from=build /app/package.json ./
COPY --from=build /app/node_modules ./node_modules
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache tzdata
ENV TZ="Asia/Shanghai"
# 如果端口更换,这边可以更新一下
EXPOSE 7001
CMD ["npm", "run", "start"]
@xmsz
Copy link
Author

xmsz commented Nov 29, 2021

优点

  • 比正常的快1倍以上,最快60s可以所有环节
[+] Building 69.3s (22/22) FINISHED
 => [internal] load build definition from Dockerfile                                                                                            0.0s
 => => transferring dockerfile: 861B                                                                                                            0.0s
 => [internal] load .dockerignore                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/node:12-alpine                                                                               2.4s
 => [internal] load metadata for docker.io/library/node:12                                                                                      2.4s
 => [build 1/8] FROM docker.io/library/node:12@sha256:cb615135757e6e2eed4fad6d80f07b13d9f35072700c01da6de26fde5c9e8632                          0.0s
 => [internal] load build context                                                                                                               4.1s
 => => transferring context: 3.44MB                                                                                                             4.0s
 => [stage-1 1/8] FROM docker.io/library/node:12-alpine@sha256:0eca266c5fe38ba93aebac00e45c9ac1bb7328b0702a6dc10e1a6ea543d49301                 0.0s
 => CACHED [build 2/8] WORKDIR /app                                                                                                             0.0s
 => [build 3/8] COPY . .                                                                                                                        5.9s
 => [build 4/8] RUN npm i pnpm -g --registry=https://registry.npmmirror.com                                                                     3.5s
 => [build 5/8] RUN pnpm i --prefer-offline -frozen-lockfile --shamefully-hoist --registry=https://registry.npmmirror.com                      22.6s
 => [build 6/8] RUN npm run build                                                                                                              11.9s
 => [build 7/8] RUN pnpm prune --production                                                                                                     8.0s
 => [build 8/8] RUN pnpm i --prefer-offline -frozen-lockfile --shamefully-hoist --registry=https://registry.npmmirror.com -P                    6.7s
 => CACHED [stage-1 2/8] WORKDIR /app                                                                                                           0.0s
 => CACHED [stage-1 3/8] COPY --from=build /app/dist ./dist                                                                                     0.0s
 => CACHED [stage-1 4/8] COPY --from=build /app/bootstrap.js ./                                                                                 0.0s
 => CACHED [stage-1 5/8] COPY --from=build /app/package.json ./                                                                                 0.0s
 => [stage-1 6/8] COPY --from=build /app/node_modules ./node_modules                                                                            0.9s
 => [stage-1 7/8] RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories                                              0.3s
 => [stage-1 8/8] RUN apk add --no-cache tzdata                                                                                                 1.4s
 => exporting to image                                                                                                                          0.9s
 => => exporting layers                                                                                                                         0.9s
 => => writing image sha256:676469aed33ab67511569a062d8ffbabf5d049cb621462fddda5b366a65fc6be                                                    0.0s
 => => naming to docker.io/library/midway-04                                                                                                    0.0s

@xmsz
Copy link
Author

xmsz commented Nov 29, 2021

注意的是 现在pnpm prune有bug 如果不在运行一次pnpm i -P,就会出现依赖映射不对的情况
导致运行时会报错说找不到依赖,实际上是有只是映射不对了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment