Почему изображение Docker становится таким большим для приложения node js

#node.js #docker

Вопрос:

вот скриншот моего док-файла: введите описание изображения здесь

А это мой файл с изображением Докера: введите описание изображения здесь

почему я получаю большое изображение docker с помощью этой команды Dockerfile, хотя я добавил .dockerignore, чтобы игнорировать модули узлов, есть ли способ решить этот размер изображения ? Можем ли мы использовать webpack для объединения и реализации встряхивания дерева и уменьшения размера для производства

Ответ №1:

  1. Чтобы уменьшить размер изображения docker, используйте alpine тег. этот тег использует Alpine Linux в качестве базового образа, и это уменьшит ваш встроенный образ. (Что такое Alpine Linux? Alpine Linux-это легкий дистрибутив Linux, ориентированный на безопасность, основанный на musl, libc и busybox.)
  2. вы можете использовать многоступенчатые сборки для создания образа docker.
  3. используйте npm prune --production , эта команда удалит пакеты, указанные в ваших зависимостях от разработчиков.

Образец Dockerfile , соответствующий указанным условиям:

 FROM node:14-alpine as build

WORKDIR /opt/app

COPY . /opt/app

RUN npm ci 
    amp;amp; npm run build 
    amp;amp; npm prune --production


FROM node:14-alpine

ENV NODE_ENV=production

USER node
WORKDIR /opt/app

COPY --from=build /opt/app/package*.json /opt/app/
COPY --from=build /opt/app/node_modules/ /opt/app/node_modules/
COPY --from=build /opt/app/dist/ /opt/app/dist/

EXPOSE 3000

CMD ["npm", "run", "start:prod"]

 

Комментарии:

1. можете ли вы предоставить простое Dockerfile ?

Ответ №2:

вы можете использовать alpine изображение docker, например node:14.5.0-alpine

рекомендуется использовать изображения alpine, так как это быстро, безопасно и легко

Комментарии:

1. при выполнении установки npm он делает модули узла правильными, а затем КОПИРУЕТ., является ли КОПИРОВАНИЕ.. означает, что docker копирует весь исходный код, включая модули узла, в образ docker ? но на самом деле у меня есть модули узлов игнорирования в файле .dockerignore