Рубрики
Uncategorized

Как уменьшить узел Docker Image размер на 10x

Докереное приложение простое, эффективное, но оптимизация размера образа докера — это хитрость … Теги с докером, начинающими, HOWTO, DEVOPS.

Докереное приложение простое, эффективное, но оптимизация размера образа докера — это сложная часть. Докер прост в использовании, но после запуска приложения начнет масштабирование, размер изображения надувает экспоненциально. В целом, размер образа Docker узел приложений составляет более 1 ГБ большую часть времени.

Почему размер имеет значение

  1. Большие размеры образа докеров — больший размер изображения требует больше места для увеличения расходов.

  2. Длинные длительности сборки — требуется более длительное время для толкания изображений по сети и приводит к задержкам трубопроводов 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»