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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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エージェントで 変わるAndroid開発環境
takahirom
2
460
自作OSでスライド発表する
uyuki234
1
3.7k
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
Webフレームワークの ベンチマークについて
yusukebe
0
200
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
250
1B+ /day規模のログを管理する技術
broadleaf
0
130
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.3k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
300
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
370
関数型プログラミングのメリットって何だろう?
wanko_it
0
150
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
390
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.7k
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
220
Skip the Path - Find Your Career Trail
mkilby
1
160
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Designing for humans not robots
tammielis
254
26k
BBQ
matthewcrist
89
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Curious Case for Waylosing
cassininazir
1
430
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Designing for Performance
lara
611
70k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
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