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
750
Other Decks in Programming
See All in Programming
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
Event is what happens
moro
2
850
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
170
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
270
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
970
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Curse of the Amulet
leimatthew05
3
16k
Balancing Empowerment & Direction
lara
6
1.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
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