как я могу сделать изображение докера меньше, чем сейчас - PullRequest
0 голосов
/ 23 октября 2019

я пытаюсь построить свой API узла, после того как он закончится, он становится слишком большим, мой реальный объем API узла составляет 39 МБ, но образ докера составляет почти 1 ГБ, я хочу уменьшить его, как я могу это сделать

это мой докерфайл

FROM node:carbon-slim

# Create app directory
WORKDIR C:\Users\YSJ\Desktop\SJ\node\node-start

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

RUN npm install


# Bundle app source
COPY . .

EXPOSE 8080

CMD [ "npm", "start" ]


$ docker history 3b82023a6f85
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
3b82023a6f85        51 seconds ago       /bin/sh -c #(nop)  CMD ["npm" "start"]          0B
14f01df0872f        51 seconds ago       /bin/sh -c #(nop)  EXPOSE 8080                  0B
f9544ca80948        52 seconds ago       /bin/sh -c #(nop) COPY dir:22b1ef58b9b5b2cd6…   32.8MB
3cbf711ed3c1        56 seconds ago       /bin/sh -c npm install                          40.2MB
3a54a59c0618        About a minute ago   /bin/sh -c #(nop) COPY multi:89514c7faadf5d8…   91.8kB
8c34688e9f86        About a minute ago   /bin/sh -c #(nop) WORKDIR /C:UsersYSJDesktop…   0B
52a261fa5e4b        4 days ago           /bin/sh -c #(nop)  CMD ["node"]                 0B
<missing>           4 days ago           /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           4 days ago           /bin/sh -c #(nop) COPY file:238737301d473041…   116B
<missing>           4 days ago           /bin/sh -c set -ex   && for key in     6A010…   5.48MB
<missing>           4 days ago           /bin/sh -c #(nop)  ENV YARN_VERSION=1.19.1      0B
<missing>           4 days ago           /bin/sh -c ARCH= && dpkgArch="$(dpkg --print…   54MB
<missing>           5 days ago           /bin/sh -c #(nop)  ENV NODE_VERSION=8.16.2      0B
<missing>           5 days ago           /bin/sh -c groupadd --gid 1000 node   && use…   333kB
<missing>           5 days ago           /bin/sh -c set -ex;  apt-get update;  apt-ge…   562MB
<missing>           5 days ago           /bin/sh -c apt-get update && apt-get install…   142MB
<missing>           5 days ago           /bin/sh -c set -ex;  if ! command -v gpg > /…   7.81MB
<missing>           5 days ago           /bin/sh -c apt-get update && apt-get install…   23.2MB
<missing>           6 days ago           /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           6 days ago           /bin/sh -c #(nop) ADD file:fdf0128645db4c8b9…   101MB

1 Ответ

0 голосов
/ 23 октября 2019

Обычно размер изображения Node Docker увеличивается из-за node_modules, и вы не можете уменьшить размер, так как это требование приложения, но вот несколько советов, которые уменьшат размер изображения.

use node:alpineвы сохраните 60MB .

enter image description here

Второе, если вы запускаете образ в производстве или также в стадии подготовки, еслиПакеты dev не требуются, вы можете использовать флаг --production.

По умолчанию, установка npm установит все модули, перечисленные как зависимости в package.json.

С флагом --production (или когдапеременная окружения NODE_ENV установлена ​​на производство), npm не будет устанавливать модули, перечисленные в devDependencies .

npm, установка для производства

Так что, если вы строите для производства, тогда

RUN npm install --production

Также лучше сохранить контекст сборки докера настолько маленьким, насколько это возможно. Должен быть только Dockerfile и код.

COPY . .

Это скопирует все из текущего каталога. Лучше разместить host_modules узла в .dockerignore.

Создать файл .dockerignore в каталоге контекста сборки Docker

node_modules

Добавить в изображение все, что вам не нужно. npm install установит модули узлов в образ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...