簡體   English   中英

NestJS 最小化 dockerfile

[英]NestJS minimize dockerfile

我想碼頭化我的nestjs api。 使用下面列出的配置,圖像變得 319MB 大。 有什么比多階段更簡單的減小圖像大小的方法?

Dockerfile

FROM node:12.13-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
CMD npm start

.dockerignore

.git
.gitignore
node_modules/
dist/

為了減小 docker 圖像大小,您可以使用

  1. 多階段構建
  2. Npm 修剪

在使用多階段構建時,您應該有 2(或更多)個 FROM 指令,像往常一樣,第一階段確實構建,第二階段只是從第一個臨時層復制構建並具有運行應用程序的指令。 在我們的例子中,我們應該復制 dist 和 node_modules 目錄。

第二個重要時刻是在 package.json 文件中正確拆分“devDependencies”和“dependencies”之間的依賴關系。

在第一階段安裝 deps 后,您應該使用 npm prune --production 從節點模塊中刪除 devDependencies。

FROM node:12.14.1-alpine AS build


WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./

RUN npm run build && npm prune --production


FROM node:12.14.1-alpine

WORKDIR /app
ENV NODE_ENV=production

COPY --from=build /app/dist /app/dist
COPY --from=build /app/node_modules /app/node_modules

EXPOSE 3000
ENTRYPOINT [ "node" ]
CMD [ "dist/main.js" ]

如果您在使用 node-gyp 時遇到問題或只是想看看 - 一個完整的示例,其中包含此要點中的注釋:

https://gist.github.com/nzvtrk/cba2970b1df9091b520811e521d9bd44

更多有用的參考資料:

https://docs.docker.com/develop/develop-images/multistage-build/

https://docs.npmjs.com/cli/prune

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM