Докереное приложение простое, эффективное, но оптимизация размера образа докера — это сложная часть. Докер прост в использовании, но после запуска приложения начнет масштабирование, размер изображения надувает экспоненциально. В целом, размер образа Docker узел приложений составляет более 1 ГБ большую часть времени.
Почему размер имеет значение
Большие размеры образа докеров — больший размер изображения требует больше места для увеличения расходов.
Длинные длительности сборки — требуется более длительное время для толкания изображений по сети и приводит к задержкам трубопроводов CI.
Давайте начнем оптимизацию
Вот наш Демо-приложение построен с использованием приложения Vuejs.
Вот начальный докерFile.
FROM node:10 WORKDIR /app COPY . /app EXPOSE 8080 RUN npm install http-server -g RUN npm install && npm run build CMD http-server ./dist
Размер этого изображения:
Это 1,34 ГБ! Упс!
Давайте начнем оптимизировать шаг за шагом
1) Используйте Многоступенчатая Docker Builds.
Многоступенчатые сборки позволяют легко оптимизировать образы докера, используя несколько промежуточный Изображения в одном доке Dockerfile. Узнайте больше об этом здесь Отказ Используя многоступенчатые сборки, мы можем установить все зависимости в изображении сборки и скопировать их в изображение Scener Runtime.
FROM node:10 AS BUILD_IMAGE WORKDIR /app COPY . /app EXPOSE 8080 RUN npm install && npm run build FROM node:10 WORKDIR /app # copy from build image COPY --from=BUILD_IMAGE /app/dist ./dist COPY --from=BUILD_IMAGE /app/node_modules ./node_modules RUN npm i -g http-server CMD http-server ./dist
Теперь размер этого изображения составляет 1,24 ГБ:
2) Удалить зависимости и использовать зависимости разработки Узел Brune Инструмент
Node-Brune — это инструмент с открытым исходным кодом для удаления ненужных файлов из папки Node_Modules. Тестовые файлы, файлы разметки, файлы набора текста и файлы. Используя узел-Brune, он может смешиваться.
Мы можем использовать это для удаления зависимостей разработки:
npm prune --production
После внесения этих изменений Dockerfile
будет выглядеть как:
FROM node:10 AS BUILD_IMAGE RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin WORKDIR /app COPY . /app EXPOSE 8080 RUN npm install && npm run build # remove development dependencies RUN npm prune --production # run node prune RUN /usr/local/bin/node-prune FROM node:10 WORKDIR /app # copy from build image COPY --from=BUILD_IMAGE /app/dist ./dist COPY --from=BUILD_IMAGE /app/node_modules ./node_modules RUN npm i -g http-server CMD http-server ./dist
Используя это, мы сократили общий размер до 1,09 ГБ
3) Выберите Меньший конечный базовый образ
При доке приложения узла есть много Базовые изображения доступны на выбор.
Здесь мы будем использовать альпийский изображение; Alpine — это пестнадцатеричное изображение докера с минимальными пакетами, но достаточно для запуска приложений узла.
FROM node:10 AS BUILD_IMAGE RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin WORKDIR /app COPY . /app EXPOSE 8080 RUN npm install && npm run build # remove development dependencies RUN npm prune --production # run node prune RUN /usr/local/bin/node-prune FROM node:10-alpine WORKDIR /app # copy from build image COPY --from=BUILD_IMAGE /app/dist ./dist COPY --from=BUILD_IMAGE /app/node_modules ./node_modules RUN npm i -g http-server CMD http-server ./dist
Используя это Dockerfile
Размер изображения упал на 157 МБ
\ o/
Вывод
Применив эти 3 простых шага, мы сократили наш размер докера изображения в 10 раз.
Ваше здоровье!
Оригинал: «https://dev.to/itsopensource/how-to-reduce-node-docker-image-size-by-10x-1h81»