Гнездо JS свернуть докер-файл - PullRequest
2 голосов
/ 07 апреля 2020

Я хочу докеризировать свое гнездо js API. С конфигурацией, перечисленной ниже, изображение становится 319 МБ. Что может быть более простым способом уменьшения размера изображения, чем многостадийное?

Dockerfile

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

.dockerignore

.git
.gitignore
node_modules/
dist/

1 Ответ

0 голосов
/ 18 апреля 2020

Для уменьшения docker размера изображения вы можете использовать

  1. Многоступенчатая сборка
  2. Npm Обрезать

При использовании многоступенчатой build У вас должно быть 2 (или более) директивы FROM, как обычно, первый этап выполняет сборку, а второй этап просто копирует сборку из первого временного слоя и содержит инструкции для запуска приложения. В нашем случае мы должны скопировать каталоги dist & node_modules.

Второй важный момент - это правильное разделение зависимостей между 'devDependencies' & 'dependencies' в вашем пакете. json файл.

После того, как вы установили 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

...