![](/img/trans.png)
[英]Can I combine COPY directives in Dockerfile to minimize number of image layers?
[英]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 圖像大小,您可以使用
在使用多階段構建時,您應該有 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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.