Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Валерий Кравец, Оптимизация 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
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
220
アクセシビリティから考える情報設計
high_g_engineer
0
330
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
580
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
130
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
3
380
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
フロントエンドUIフレームワークのこれまでとこれから
ssssota
2
1.2k
XHTMLが残したもの
yosuke_furukawa
PRO
2
470
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
120
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
780
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Crafting Experiences
bethany
1
310
Balancing Empowerment & Direction
lara
6
1.3k
A Tale of Four Properties
chriscoyier
163
24k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
The Invisible Side of Design
smashingmag
301
52k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
260
A Soul's Torment
seathinner
7
3.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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