Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Валерий Кравец, Оптимизация docker-образов
Search
brabadu
June 26, 2020
Programming
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Валерий Кравец, Оптимизация docker-образов
brabadu
June 26, 2020
More Decks by brabadu
See All by brabadu
Tanok - Elm Arhictecture in JS
brabadu
2
740
Other Decks in Programming
See All in Programming
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
810
プロポーザルを書いてもらう
pvcresin
0
400
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
130
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
470
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
270
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
160
What's New in Android 2026
veronikapj
0
260
Featured
See All Featured
We Are The Robots
honzajavorek
0
300
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
New Earth Scene 8
popppiees
3
2.5k
Believing is Seeing
oripsolob
1
190
エンジニアに許された特別な時間の終わり
watany
108
250k
Claude Code のすすめ
schroneko
67
230k
Chasing Engaging Ingredients in Design
codingconduct
0
260
Facilitating Awesome Meetings
lara
57
7.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
460
Transcript
None
КТО Я ТАКОЙ? КТО Я ТАКОЙ?
КРАВЕЦ ВАЛЕРИЙ КРАВЕЦ ВАЛЕРИЙ DevOps команды EvoPay Человеком с синдромом
DevOps головного мозга Забавный пункт
NODE JS DOCKER IMAGE NODE JS DOCKER IMAGE МЕНЬШЕ ЧЕМ
БАЗОВЫЙ МЕНЬШЕ ЧЕМ БАЗОВЫЙ
А ЗАЧЕМ БЫЛО А ЗАЧЕМ БЫЛО ПАКОВАТЬ NODEJS В DOCKER?
ПАКОВАТЬ NODEJS В DOCKER?
О ПРОЕКТЕ О ПРОЕКТЕ Ссылка на проект: продвинутый командный месседжер
15 микросвервисов backend на NodeJS Chanty
ЗАЧЕМ ЗАЧЕМ ОПТИЗИРОВАТЬ? ОПТИЗИРОВАТЬ?
None
ВХОДНЫЕ ПРОБЛЕМЫ: ВХОДНЫЕ ПРОБЛЕМЫ: размеры образов время старта новой версии
me to market docker registry 200 Gb нет нормльного способа чистить docker registry проблемы с обновлением nodejs
ПУТИ ОПТИМИЗАЦИИ ПУТИ ОПТИМИЗАЦИИ
ПРОСТЫЕ: ПРОСТЫЕ: смена дистибутива базового image оптимизация слоев кеширование мультистейдженоговая
сборка магические тулы СЛОЖНЫЕ: СЛОЖНЫЕ: Distroless images магия JavaScript инструментария
СМЕНА ДИСТИБУТИВА БАЗОВОГО IMAGE СМЕНА ДИСТИБУТИВА БАЗОВОГО IMAGE FROM node:12-buster
# 886MB FROM node:12-stretch-slim # 156MB FROM node:12-alpine # 89.3MB
РАБОТАЕТ ДЛЯ: РАБОТАЕТ ДЛЯ: NodeJS PHP Go Etc НЕ РАБОТАЕТ
ДЛЯ: НЕ РАБОТАЕТ ДЛЯ: Python
ОПТИМИЗАЦИЯ СЛОЕВ ОПТИМИЗАЦИЯ СЛОЕВ
None
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
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
ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Меньшее количество слоев Нет мусора в конечном image
Размер конечного docker image Безопасность конечного имеджа НЕДОСТАТКИ: НЕДОСТАТКИ: Время сборки Невозможность переиспользования
МУЛЬТИСТЕЙДЖЕНОГОВАЯ СБОРКА МУЛЬТИСТЕЙДЖЕНОГОВАЯ СБОРКА # 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
ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Возможность вынести стейдж 1 отдельно Возможность кеширования и
переиспользования Больше читабельности Нет забот с очисткой НЕДОСТАТКИ: НЕДОСТАТКИ: Необходимость понимать внешние зависимости Время конечной сборки
МАГИЧЕСКИЕ ТУЛЫ МАГИЧЕСКИЕ ТУЛЫ Опытный колега docker-slim
None
DISTROLESS IMAGES DISTROLESS IMAGES свой от Google
ПОЧЕМУ СВОЙ? ПОЧЕМУ СВОЙ? 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
КАК СДЕЛАТЬ СВОЙ 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
ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Экономия места Безопасность НЕДОСТАТКИ: НЕДОСТАТКИ: Не всем подойдет
отсутствие shell и core-u ls Необходимость понимать и прописывать внешние зависимости
None
None
JAVASCRIPT ИНСТРУМЕНТАРИЙ JAVASCRIPT ИНСТРУМЕНТАРИЙ webpack webpack-merge
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'),
И ЧТО ЭТО ДАЛО? И ЧТО ЭТО ДАЛО? Object Size
sources 0.15 MB ./node_modules 108 MB server.js 15 MB
ЧТО В ИТОГЕ? ЧТО В ИТОГЕ? 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
ПРЕИМУЩЕСТВА: ПРЕИМУЩЕСТВА: Мы забыли о вопросах с Docker registry Практический
мгновенное обновление на проде Использование build image для локальной разработки Огромная безопасность, нечего ломать Четка декларация зависимостей
НЕДОСТАТКИ: НЕДОСТАТКИ: Не всем подойдет отсутствие shell и core-u ls
Сложность с осознанием своих зависимостей Требует времени и усилий
None
None