Лучший рабочий процесс сборки для Node и Docker - PullRequest
0 голосов
/ 21 ноября 2018

Для узловых приложений, что является лучшим вариантом для создания облегченных образов?

  1. Single Docker Image. Возможно, потребуются инструменты сборки и будут доступны все среды времени сборкипеременные для контейнера.

    yarn install # install deps and devDeps
    yarn build # build our application
    yarn test # perform tests
    yarn install --production --ignore-scripts --prefer-offline # Remove devDeps
    rm -rf src # Remove source files
    yarn start
    
  2. Несколько образов Docker

    В одном контейнере Docker, в котором есть инструменты для сборки, выполните:

    yarn install
    yarn build
    yarn test
    

    Затем возьмите ресурсы сборки и package.json и скопируйте их в новый контейнер, в котором будут только переменные среды выполнения.В результате получается намного меньшее изображение (возможно, node:alpine), в котором исходные файлы очень ограничены.

    yarn install --production --ignore-scripts --prefer-offline
    yarn start
    

1 Ответ

0 голосов
/ 22 ноября 2018

Если вы хотите создать облегченное изображение для своего приложения, имейте в виду следующее:

  1. Попробуйте использовать альпийские изображения, например, узел: 8.12.0-alpine , поскольку альпийские изображения являются самым легким базовым изображением.Если вы хотите установить пакеты, выполните RUN apk add --no-cache --virtual your_packages... && rm -rf /var/cache/apk/*

  2. Попытайтесь уменьшить количество слоев, выполнив несколько команд в одной инструкции RUN, например RUN yarn install && yarn build && yarn test && yarn install --production --ignore-scripts --prefer-offline && rm -rf src && yarn start

  3. Попробуйте объединить команды, которые отменяют друг друга, например, RUN apk update && apk add ... && rm -rf /var/cache/apk/*.Здесь apk update создает кеш, а rm -rf /var/cache/apk/* очищает его.Нет необходимости запускать эти две команды по отдельности, так как они отменяют работу друг друга, поэтому нет смысла иметь два слоя, которые сводят друг друга на нет и увеличивают размер конечного изображения.

Примечание : Наличие нескольких док-файлов вместо одного не приведет к уменьшению количества слоев или уменьшению размера.Это только дает вам логическое разделение задач, которые вы хотите обрабатывать индивидуально.

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