Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Валерий Кравец, Оптимизация docker-образов

Валерий Кравец, Оптимизация docker-образов

brabadu

June 26, 2020

Transcript

36 slides
  1. NODE JS DOCKER IMAGE NODE JS DOCKER IMAGE МЕНЬШЕ ЧЕМ

    БАЗОВЫЙ МЕНЬШЕ ЧЕМ БАЗОВЫЙ
  2. ВХОДНЫЕ ПРОБЛЕМЫ: ВХОДНЫЕ ПРОБЛЕМЫ: размеры образов время старта новой версии

    me to market docker registry 200 Gb нет нормльного способа чистить docker registry проблемы с обновлением nodejs
  3. ПРОСТЫЕ: ПРОСТЫЕ: смена дистибутива базового image оптимизация слоев кеширование мультистейдженоговая

    сборка магические тулы СЛОЖНЫЕ: СЛОЖНЫЕ: Distroless images магия JavaScript инструментария
  4. RUN apk add --no-cache --virtual .build-deps \ bash \ git

    \ build-base \ openssh-client RUN npm i -g npm RUN npm install RUN npm build # Cleanup build dependencies RUN apk del -f .build-deps
  5. RUN set -xe \ && apk add --no-cache --virtual .build-deps

    \ bash \ git \ build-base \ openssh-client \ && npm i -g npm \ && npm install \ && npm build \ && apk del -f .build-deps
  6. ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Меньшее количество слоев Нет мусора в конечном image

    Размер конечного docker image Безопасность конечного имеджа НЕДОСТАТКИ: НЕДОСТАТКИ: Время сборки Невозможность переиспользования
  7. МУЛЬТИСТЕЙДЖЕНОГОВАЯ СБОРКА МУЛЬТИСТЕЙДЖЕНОГОВАЯ СБОРКА # Stage 1 FROM node:12-alpine as

    Builder RUN set -xe \ && apk add --no-cache \ git \ build-base \ openssh-client \ && npm i -g npm \ && npm install \ && npm build # Stage 2 FROM node:12-alpine as app COPY --from=Builder /app/build /app COPY --from=Builder /usr/share/misc/magic.mgc /usr/share/misc/mag
  8. ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Возможность вынести стейдж 1 отдельно Возможность кеширования и

    переиспользования Больше читабельности Нет забот с очисткой НЕДОСТАТКИ: НЕДОСТАТКИ: Необходимость понимать внешние зависимости Время конечной сборки
  9. ПОЧЕМУ СВОЙ? ПОЧЕМУ СВОЙ? Image Size Node v10 Node version

    gcr.io/distroless/nodejs 81 MB only 10.17 node:10-alpine 77 MB from 10 to 14 own image 42MB any
  10. КАК СДЕЛАТЬ СВОЙ DISTROLESS IMAGE КАК СДЕЛАТЬ СВОЙ DISTROLESS IMAGE

    FROM node:12-alpine as base RUN apk add \ binutils \ ca-certificates \ gawk \ && mkdir /build \ && strip --strip-all /usr/local/bin/node \ && ldd /usr/local/bin/node \ | awk '/=>/{print $3}' \ | while read LIB_PATH; \ do cp --parents $LIB_PATH /build/;\ done \ && cp --parents /etc/ssl/certs/ca-certificates.crt /build/ FROM scratch COPY --from=base /usr/local/bin/node /usr/local/bin/node
  11. ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Экономия места Безопасность НЕДОСТАТКИ: НЕДОСТАТКИ: Не всем подойдет

    отсутствие shell и core-u ls Необходимость понимать и прописывать внешние зависимости
  12. webpack.config.js webpack.config.js var path = require('path'); var webpack = require('webpack');

    var fs = require('fs'); const merge = require('webpack-merge'); const tools = require('server-lib/tools/build'); var entries = {}; for (var i = 0; i < tools.length; i++) { entries[tools[i]] = './node_modules/server-lib/tools/'+tools[ } console.log(entries) module.exports = merge( require('server-utils/webpack.config.js'), require('server-lib/webpack.config.js'),
  13. И ЧТО ЭТО ДАЛО? И ЧТО ЭТО ДАЛО? Object Size

    sources 0.15 MB ./node_modules 108 MB server.js 15 MB
  14. ЧТО В ИТОГЕ? ЧТО В ИТОГЕ? Image Size Node v12

    node:10-alpine 77 MB own/node:12-distroless 42 MB own/node:12-builder 386 MB app:web-api 60 MB
  15. ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Мы забыли о вопросах с Docker registry Практический

    мгновенное обновление на проде Использование build image для локальной разработки Огромная безопасность, нечего ломать Четка декларация зависимостей
  16. НЕДОСТАТКИ: НЕДОСТАТКИ: Не всем подойдет отсутствие shell и core-u ls

    Сложность с осознанием своих зависимостей Требует времени и усилий

More Decks by brabadu

Other Decks in Programming