Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Лучшие практики
Continuous Delivery
с Docker
Дмитрий Столяров
v3
Привет!
# whoami
dmitry.stolyarov
# hostname -d
flant.ru
# cat /etc/motd
Лучшие практики
Continuous Delivery с Docker
flant.ru
Continuous Delivery
git
build
test
release
operate
Continuous Delivery
git
build
test
release
operate
Зачем?
Continuous Delivery
git
build
test
release
operate
Опыт
OpenSolaris Zones
# capsh --print | grep experience
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
# capsh --print | grep experience
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
procfs v1 by flant 2008
# capsh --print | grep experience
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
procfs v1 by flant 2008
LXC
# capsh --print | grep experience
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
procfs v1 by flant 2008
jailer by flant 2009
LXC
# capsh --print | grep...
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
procfs v1 by flant 2008
jailer by flant 2009
LXC
Docker 2013, осень
# c...
Опыт
Gentoo и Linux-VServer 2006
OpenSolaris Zones
procfs v1 by flant 2008
jailer by flant 2009
LXC
Docker 2013, осень
Doc...
Клиенты
Первый канал Forbes.ru Лепра и Dirty Ситимобил Нотамедиа
# capsh --print | grep clients
Внедрения
# capsh --print | grep implementations
10+
прошлых поколений
с 2011 года
Внедрения
4
проекта
уже в продакшне
# capsh --print | grep implementations
10+
прошлых поколений
с 2011 года
Внедрения
4
проекта
уже в продакшне
# capsh --print | grep implementations
10+
прошлых поколений
с 2011 года
2
проекта
на ...
Зачем Docker? ?
Zero Downtime Deployment
V1
Старая версия
работает
Zero Downtime Deployment
V1
Старая версия
работает
Старая версия
остановлена
Zero Downtime Deployment
V1 V2
Старая версия
работает
Старая версия
остановлена
Новая версия
“прогревается”
Zero Downtime Deployment
V1 V2 V2
Старая версия
работает
Старая версия
остановлена
Новая версия
“прогревается”
Новая верси...
Zero Downtime Deployment
V1 V2 V2
Старая версия
работает
Старая версия
остановлена
Новая версия
“прогревается”
Новая верси...
Zero Downtime Deployment
V1
Старая версия
работает
Zero Downtime Deployment
V1
Старая версия
работает
Новая версия
“прогревается”
V2V1
Zero Downtime Deployment
V1 V2
Старая версия
работает
Новая версия
“прогревается”
Переключили
трафик
V2V1 V1
Zero Downtime Deployment
V1 V2 V2
Старая версия
работает
Новая версия
“прогревается”
Переключили
трафик
Старая версия
оста...
Zero Downtime Deployment
V1 V2 V2
Старая версия
работает
Новая версия
“прогревается”
Переключили
трафик
Старая версия
оста...
Zero Downtime Deployment
V1 V2 V2
V1 V2 V2V2V1 V1
Zero Downtime Deployment
V1 V2 V2
V1 V2 V2V2V1 V1
Запуск “двух версий”
V1
:80
Запуск “двух версий”
V1
:80
V2
Запуск “двух версий”
V1
:80
V2
:81
Запуск “двух версий”
V1 V2
:80 :81 Сетевые ресурсы
порты, сетевые интерфейсы
Запуск “двух версий”
V1 V2
:80 :81 Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэше...
Запуск “двух версий”
V1 V2
:80 :81 Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэше...
Запуск “двух версий”
V1 V2
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собст...
Убрать конфликты можно...
Запуск “двух версий”
V1
:80
V2
:80
Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэше...
Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэше...
Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэше...
Запуск “двух версий”
V1
:80
V2
:80
Docker даёт гарантию изоляции ресурсов
Сетевые ресурсы
порты, сетевые интерфейсы
Файлов...
Обновление зависимостей
V1
PHP
v1
driver
v1
Обновление зависимостей
V1
PHP
v1
driver
v1
V1 V2
PHP
driver
v1
driver
v2
Обновление зависимостей
V1
PHP
v1
driver
v1
V1 V2
PHP
driver
v1
driver
v2
V1 V2
PHP
v1
driver
v1
PHP
v2
driver
v2
Обновление зависимостей
V1
PHP
v1
driver
v1
V1 V2
PHP
driver
v1
driver
v2
V1 V2
PHP
v1
driver
v1
PHP
v2
driver
v2
Разрулить конфликты зависимостей тоже можно...
Главный паттерн
V1
Старая версия работает
1
Главный паттерн
V1 V1 V2
Старая версия работает Новая версия “прогревается”
1 2
Главный паттерн
V1 V1 V2
V1 V2
Старая версия работает Новая версия “прогревается”
Переключили трафик
1 2
3
Главный паттерн
V1 V1 V2
V1 V2 V2
Старая версия работает Новая версия “прогревается”
Переключили трафик Старая версия оста...
Главный паттерн
дырявый
openssl
дырявый
openssl
безопасный
openssl
дырявый
openssl
безопасный
openssl
безопасный
openssl
С...
Главный паттерн
Ubuntu
14.04
Ubuntu
14.04
Ubuntu
16.04
Ubuntu
14.06
Ubuntu
16.04
Ubuntu
16.04
Старая версия работает Новая...
Главный паттерн
Старая версия работает Новая версия “прогревается”
Переключили трафик Старая версия остановлена
1 2
3 4
Независимость
Ubuntu
Независимость
Ubuntu CentOS
Независимость
Ubuntu CentOS Slackware Enterprise Linux
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, b...
#1: Используйте Docker
Воспроизводимость
программисты
git
программисты
staging
git
Воспроизводимость
программисты
staging
QA
git
Воспроизводимость
программисты
staging production
QA
git
Воспроизводимость
production
production
production
cервер #1
git
Воспроизводимость
cервер #1
git
зеркало
пакетов
Воспроизводимость
cервер #1
git
зеркало
пакетов
обновлённое
зеркало
Воспроизводимость
cервер #1
git
зеркало
пакетов
cервер #2
обновлённое
зеркало
Воспроизводимость
cервер #2
cервер#2
cервер
#2
Разработчик: “У меня локально всё работает!”
… а разработчиков пускать на прод запретили.
Воспроизводимость
Тестовое окружение → Продакшн
Воспроизводимость
Тестовое окружение → Продакшн
Выкат на множество серверов
Воспроизводимость
Выкат на несколько кластеров / площадок
Тестовое окружение → Продакшн
Выкат на множество серверов
Воспроизводимость
Выкат на несколько кластеров / площадок
Локальный запуск точной копии
Тестовое окружение → Продакшн
Выка...
Выкат на несколько кластеров / площадок
Локальный запуск точной копии
Тестовое окружение → Продакшн
Выкат на множество сер...
Гарантия воспроизводимости
gitпрограммисты
Гарантия воспроизводимости
gitпрограммисты
docker
образ
Гарантия воспроизводимости
git
тестовая
площадка
программисты
docker
образ
Гарантия воспроизводимости
gitпрограммисты
docker
образ
production
тестовая
площадка
Гарантия воспроизводимости
gitпрограммисты
docker
образ
программисты
тестовая
площадка
production
Гарантия воспроизводимости
gitпрограммисты
docker
образ
другие
площадки
тестовая
площадка
production
программисты
Гарантия воспроизводимости
gitпрограммисты
docker
образ
архив
тестовая
площадка
production
программисты
другие
площадки
#2: One image to rule them all
Разобрались с Docker ✔
✔
Как собирать docker-образы? ?
Разобрались с Docker ✔
Разобрались с Docker ✔
Как собирать docker-образы? ?
Куда положить Dockerfile? ?
Код и инфраструктура
development master
git
Код и инфраструктура
development master
git
V2 V1
staging production
Код и инфраструктура
development master
git
V2 V1
staging production
Код и инфраструктура
development master
git
V1 PHP 5.5
V2 V1
Код и инфраструктура
development
staging production
master
git
V2 V1PHP 7 PHP 5.5
V2 V1
Код и инфраструктура
development
staging production
master
git
V2 V1PHP 7 PHP 5.5
V2 V2
Код и инфраструктура
development master
staging production
git
V2 V2PHP 7
V2 V2
PHP 5.5
Код и инфраструктура
development master
staging production
git
V2 V2PHP 7 PHP 5.5
V2 V2
Код и инфраструктура
development master
V2
staging production
V1
git
V2 V1PHP 7 PHP 5.5
Код и инфраструктура
development master
V2
staging production
V1
git
V2 V1PHP 7 PHP 5.5
PHP 7 PHP 5.5
Код и инфраструктура
development master
V2 V1
git
PHP 7 PHP 5.5
staging production
V2 PHP 7 V1 PHP 5.5
Код и инфраструктура
development master
V2
staging production
V2
git
PHP 7 PHP 7
V2 PHP 7 V1 PHP 5.5
Код и инфраструктура
development master
staging production
V2
git
PHP 7
V2 PHP 7 V2 PHP 7
V2
PHP 7
… и должна жить с ним
#3: Инфраструктура – это код
Код и многослойная архитектура
nginx 1.2
V2
frontend
backend
production
V1
Код и многослойная архитектура
nginx 1.2
V2
nginx 1.3
V2
frontend
backend
staging production
V1
Код и многослойная архитектура
nginx 1.2
V2
nginx 1.3
V2
frontend
backend
staging production
V1
Код и многослойная архитектура
nginx 1.2
V2
nginx 1.3
V2
frontend
backend
staging production
V2
Код и многослойная архитектура
nginx 1.2
V2
nginx 1.3
V2
frontend
backend
staging production
V2
Код и многослойная архитектура
nginx 1.3
V2
nginx 1.3
V2
frontend
backend
staging production
V2
Код и многослойная архитектура
V1
development
PHP 5.5
git
V2
production
PHP 7
Код и многослойная архитектура
V1
development
PHP 5.5
nginx 1.2
git
V2
production
PHP 7
nginx 1.3
Код и многослойная архитектура
V2
PHP 7
nginx 1.3
git
программисты
devops
V2
docker-образ #1
PHP 7
nginx 1.3
docker-образ ...
… и это касается не только бекенда
#3: Инфраструктура – это код
Несколько проектов
git project_1
Код nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
Несколько проектов
git project_1
Код nginx
git project_2
Код nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код nginx
nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код nginx
nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код nginx
nginx
nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код
Код nginx
git project_6
К...
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код
Код nginx
git project_6
К...
Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код
Код nginx
git project_6
К...
WET
WET
we enjoy typing
WET
we enjoy typing
write everything twice
WET
we enjoy typing
write everything twice
waste everyone's time
DRY
DRY
don't repeat yourself
Несколько проектов
git project_1
Код nginx
Несколько проектов
git project_1
Код nginx
git project_2
Код
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginxnginx
Несколько проектов
git project_1
Код
nginx
v1
git project_2
Код
git nginx
nginx
v1
Несколько проектов
git project_1
Код
nginx
v1
git project_2
Код
git nginx
nginx
v1
nginx
v1
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v2
nginx
v1
nginx
v1
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v2
nginx
v2
nginx
v1
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v2
nginx
v2
nginx
v2
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v2
nginx
v3
nginx
v2
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v2
nginx
v3
nginx
v3
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
bundler, composer, pip, npm, ...
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
...
bundler, composer, pip, npm, ...
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
...
Dockerfile
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
Dependency manageme...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
Dockerfile + git submodules
Несколько проектов
git project_1
Код
git project_2
Код
git nginx
nginx
v4
nginx
v4
nginx
v2
De...
… и требует соответствующих подходов
#3: Инфраструктура – это код
Разобрались с Docker ✔
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Разобрались с Docker
Интегрировали код инфраструктуры ✔
Когда собирать docker-образы? ?
✔
Разобрались с Docker
Интегрировали код инфраструктуры ✔
Когда собирать docker-образы?
Как лучше тегировать docker-образы?
...
Git → Docker
Какие бранчи собирать?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выка...
Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выка...
Какие из образов должны проходить QA?
Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
...
master
Временные образы
master
Временные образы
master
app:master
Временные образы
master
app:master
preview
Временные образы
master
app:master
preview
app:master
Временные образы
master
app:master
release_7
preview
app:master
Временные образы
master
app:master
release_7
app:release_7
preview
app:master
Временные образы
master
app:master
release_7
app:release_7
preview
app:master
Временные образы
master
app:master
release_7
app:release_7
preview
app:master
Временные образы
master
app:master
release_7
app:release_7
preview
app:master
Временные образы
release_7
app:release_7
preview
Временные образы
app:master
master
app:master
app:master
release_7
app:release_7
preview
Временные образы
master
app:master
release_7
app:release_7
preview
Временные образы
master
app:master
app:master
release_7
app:release_7
preview
Временные образы
master
app:master app:master
≠
master
app:master
release_7
app:release_7
preview
Временные образы
app:master
master
app:master
release_7
app:release_7
preview
app:master
Временные образы
master
app:master
release_7
app:release_7
preview
Временные образы
app:master
feature_x
master
app:master
release_7
app:release_7
preview
app:feature_x
Временные образы
app:master
Временные образы
Собирать все бранчи?
Временные образы
Собирать все бранчи? Не стоит
Временные образы
Собирать все бранчи? Не стоит
master — общая интеграция
Временные образы
master — общая интеграция
release — интеграция релизов /^release_.*/
Собирать все бранчи? Не стоит
Временные образы
master — общая интеграция
release — интеграция релизов /^release_.*/
feature — интеграция “фич” /^feature...
Временные образы
master — общая интеграция
release — интеграция релизов /^release_.*/
feature — интеграция “фич” /^feature...
Временные образы
master — общая интеграция
release — интеграция релизов /^release_.*/
feature — интеграция “фич” /^feature...
master 6.0.1
Релизные образы
staging production
master
Релизные образы
app:6.0.1
6.0.1
staging production
staging production
master
Релизные образы
app:6.0.1
6.0.1
app:6.0.1
staging production
master
release_7
Релизные образы
6.0.1
app:6.0.1
app:6.0.1
staging production
6.0.1master
release_7
Релизные образы
app:6.0.1
app:6.0.1
staging production
6.0.1master
release_7 7.0.0
Релизные образы
app:6.0.1
app:6.0.1
staging production
6.0.1master
release_7
Релизные образы
app:6.0.1
app:6.0.1 app:7.0.0
7.0.0
staging production
6.0.1master
release_7
Релизные образы
app:6.0.1
app:6.0.1
7.0.0
app:7.0.0
app:7.0.0
staging production
6.0.1master
release_7
Релизные образы
app:6.0.1
app:6.0.1
7.0.0
app:7.0.0
app:7.0.0
staging production
6.0.1
7.0.0
master
release_7
Релизные образы
app:6.0.1
app:6.0.1 app:7.0.0
app:7.0.0
✗
staging production
6.0.1master
release_7 7.0.0
Релизные образы
app:6.0.1
app:6.0.1 app:7.0.0
app:7.0.0
✗
staging production
master
release_7 7.0.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:7.0.0
✗
staging production
master
release_7 7.0.0
6.1.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:7.0.0
✗
staging production
master
release_7 7.0.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:7.0.0
✗ app:6.1.0
6.1.0
staging production
master
release_7 7.0.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ app:6.1.0
6.1.0
staging production
master
release_7 7.0.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ app:6.1.0
6.1.0
staging production
master
release_7 7.0.0
release_8
Релизные образы
6.0.1 6.1.0
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ ...
staging production
master
release_7 7.0.0
release_8
Релизные образы
6.0.1 6.1.0
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ ...
staging production
6.1.0master
release_7 7.0.0
release_8
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ a...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6.1.0
✗ ...
staging production
master
release_7 7.0.0
release_8
6.1.0 6.1.1
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0 6.1.1
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0 6.1.1
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0 6.1.1
Релизные образы
6.0.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.0.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
7.0.1
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:6....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:7....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
app:6.1.1
app:6.0.1 app:7.0.0
app:7....
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:6.1.1
app:6.0.1 app:7.0.0
...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:6.1.1
app:6.0.1 app:7.0.0
...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:7.0.1
app:6.0.1 app:7.0.0
...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:7.0.1
app:6.0.1 app:7.0.0
...
staging production
master
release_7 7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:7.0.1
app:6.0.1 app:7.0.0
...
staging production
master
7.0.0
release_8
6.1.0
Релизные образы
6.0.1 6.1.1
7.0.1
app:7.0.1
app:6.0.1 app:7.0.0
app:7.0.1
...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
git branch
git tag
временные образы
релизные образы
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
docker t...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из...
#4: Свяжите Git с Docker
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Связали Git с Docker ✔
Чего не хватает? ?
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Связали Git с Docker ✔
frontend
backend
Последовательность выката
nginx 1.2
HTTP
PHP 5.5V1
Старая версия
работает
frontend
backend
Последовательность выката
nginx 1.2
HTTP
nginx 1.2
HTTP
Старая версия
работает
Обновили
backend
PHP 5.5V1...
frontend
backend
Последовательность выката
nginx 1.2
HTTP
nginx 1.2
HTTP WS
Старая версия
работает
Обновили
backend
PHP 5....
frontend
backend
Последовательность выката
nginx 1.2
HTTP
nginx 1.2
HTTP WS
nginx 1.3
HTTP WS
Старая версия
работает
Обнов...
Последовательность выката
PHP 5.5
HTTP
nginx 1.2
HTTP WS
nginx 1.3
HTTP WS
Старая версия
работает
frontend
backend V1
ngin...
Последовательность выката
PHP 5.5
HTTP
Старая версия
работает
frontend
backend V1
nginx 1.2
Последовательность выката
PHP 5.5
HTTP
nginx 1.3
HTTP
Старая версия
работает
frontend
backend V1
nginx 1.2
PHP 5.5V1
Обнов...
Последовательность выката
PHP 5.5
HTTP
nginx 1.3
HTTP
nginx 1.3
HTTP WS
Старая версия
работает
frontend
backend V1
nginx 1...
Последовательность выката
PHP 5.5
HTTP
nginx 1.3
HTTP
nginx 1.3
HTTP WS
Старая версия
работает
frontend
backend V1
nginx 1...
Например: frontend → migration → backend
#5: Регламентируйте порядок выката
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Связали Git с Docker ✔
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Связали Git с Docker ✔
Установили порядок выката ✔
Интегрировали код инфраструктуры ✔
Разобрались с Docker ✔
Связали Git с Docker ✔
Установили порядок выката ✔
Снова чего-то...
Docker swarm Docker compose
Docker swarm Docker compose
Docker swarm Docker compose Consul Serf
Dokku
Docker swarm Docker compose Consul Serf
Dokku Shipyard
Docker swarm Docker compose Consul Serf
Dokku Shipyard
Docker swarm Docker compose Consul Serf
Dokku Shipyard
Docker swarm Docker compose Consul Serf
Accelerate Your Delivery
by Google
κυβερνήτης
кормчий
Readiness probe
V1
Старая версия
работает
Readiness probe
V1
Старая версия
работает
V1
Новая версия
прогревается
V2
Readiness probe
V1
Старая версия
работает
V1
Новая версия
прогревается
V2 V1 V2
Readiness
probe
Readiness probe
V1
Старая версия
работает
V1
Новая версия
прогревается
V2 V1
Readiness
probe
V2 V1
Переключили
трафик
V2
С...
Synchronous update
V1 V1 V1 V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1
Synchronous update
V1 V1 V1 V1V2
Synchronous update
V1 V1 V1 V1V2
Synchronous update
V1 V1 V1 V1V2 V2
Synchronous update
V1 V1 V1 V1V2 V2
Synchronous update
V1 V1 V1 V1V2 V2 V2
Synchronous update
V1 V1 V1 V1V2 V2 V2 V2
Synchronous update
V1 V1 V1 V1V2 V2 V2 V2
Synchronous update
V1 V1 V1V2 V2 V2 V2
Synchronous update
V1 V1V2 V2 V2 V2
Synchronous update
V2 V2 V2 V2
Synchronous update
V2 V2 V2 V2 V2
Synchronous update
V2 V2 V2 V2 V2 V2
Synchronous update
V2 V2 V2 V2 V2 V2 V2 V2
Rolling update
V1 V1 V1 V1 V1 V1 V1 V1
Rolling update
V1 V1 V1 V1 V1 V1 V1 V1
Rolling update
V1 V1 V1 V1 V1 V1 V1
Rolling update
V2 V1 V1 V1 V1 V1 V1 V1
Rolling update
V2 V1 V1 V1 V1 V1 V1 V1
Rolling update
V2 V1 V1 V1 V1 V1 V1 V1
Rolling update
V2 V1 V1 V1 V1 V1 V1
Rolling update
V2 V2 V1 V1 V1 V1 V1 V1
Rolling update
V2 V2 V1 V1 V1 V1 V1 V1
Rolling update
V2 V2 V2 V1 V1 V1 V1 V1
Rolling update
V2 V2 V2 V2 V1 V1 V1 V1
Rolling update
V2 V2 V2 V2 V2 V1 V1 V1
Rolling update
V2 V2 V2 V2 V2 V2 V1 V1
Rolling update
V2 V2 V2 V2 V2 V2 V2 V1
Rolling update
V2 V2 V2 V2 V2 V2 V2 V2
kubernetes & release
readiness
probe
kubernetes & release
readiness
probe
synchronous
update
kubernetes & release
readiness
probe
synchronous
update
rolling
update
kubernetes & release
readiness
probe
synchronous
update
canary
releases
rolling
update
kubernetes & operate
service
supervision
kubernetes & operate
service
supervision
liveness probe
kubernetes & operate
service
supervision
liveness probe self-healing
kubernetes & operate
service
supervision
liveness probe
autoscaling
self-healing
kubernetes & operate
service
supervision
liveness probe
monitoring
influx + grafana
autoscaling
self-healing
kubernetes & operate
service
supervision
liveness probe
monitoring
influx + grafana
autoscaling
self-healing
logging
elast...
kubernetes
Мощный
фундамент
kubernetes
Мощный
фундамент
Большие
перспективы
kubernetes
Мощный
фундамент
Большие
перспективы
Интеграция
вместо велосипедов
kubernetes
Мощный
фундамент
Большие
перспективы
Простота
Интеграция
вместо велосипедов
kubernetes
Мощный
фундамент
Большие
перспективы
Невероятная
совместимость
Простота
Интеграция
вместо велосипедов
kubernetes
Мощный
фундамент
Большие
перспективы
Невероятная
совместимость
Простота
Интеграция
вместо велосипедов
Всеразмер...
… ведь она есть и работает!
#6: Используйте готовую платформу
#1: Используйте Docker
#1: Используйте Docker
#2: One image to rule them all
#1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
#1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
#5: Регламенти...
#1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
#5: Регламенти...
Приглашаем в гости
на наш стенд В3
LINUX-КВЕСТ
Удивительный квест для самых
отважных сисадминов.
Записывайтесь прямо сейча...
pam_docker
github.com/flant/pam_docker
Поддержите нас, поставьте ★
#1: Используйте Docker
#2: One image to rule them all
#...
Continuous Delivery
git
build
test
release
operate
Gitlab
Kubernetes
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Upcoming SlideShare
Loading in …5
×

Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)

81,730 views

Published on

Потребность в отстроенном процессе Continuous Delivery встает перед каждым развивающимся highload-проектом. Чем больше серверов и составных приложений, чем выше динамика релизов, тем раньше проект сталкивается с данной потребностью, и тем острее она стоит.

Многие команды эксплуатации смогли отстроить этот процесс, некоторые добились впечатляющих результатов, а некоторые — потерпели неудачу. Но все из них знают, что их процесс можно улучшить: сделать быстрее, надежнее, предсказуемее и удобнее.

В этом докладе я хочу обобщить и систематизировать лучшие практики построения процесса Continuous Delivery с использованием актуальных Open Source технологий (Docker, Chef, Gitlab, Kubernetes), а также обозначить известные проблемы и потенциальные пути их решения.

Будет предпринята попытка однозначно ответить на следующие практические вопросы:
- Почему пора всем переходить на Docker? Как лучше собирать Docker-образы? Как лучше доставлять и хранить Docker-образы?
- Как правильно построить процесс разработки Infrastructure as Code (IaC)?
- Как оптимально интегрировать автоматическое и ручное тестирование в процесс Continuous Delivery?
- Как перестать бояться регулярных выкатов новых версий и сделать этот процесс надежным?
- Почему Continuous Delivery не заканчивается релизом новой версии и зачем нужен Kubernetes?

Published in: Engineering
  • Sex in your area is here: ❶❶❶ http://bit.ly/369VOVb ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/369VOVb ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❤❤❤ http://bit.ly/2LaDVgK ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2LaDVgK ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dear Sir/Madam, If you have a business deals OR Projects and you need an investor to finance your business and makes it grow, then contact us on below email address for further details. We also have a business proposal on mutual funds benefit for any interested persons or organizations. Email: longchi.bm@gmail.com Thanks, Long Chi
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)

  1. 1. Лучшие практики Continuous Delivery с Docker Дмитрий Столяров v3
  2. 2. Привет! # whoami dmitry.stolyarov # hostname -d flant.ru # cat /etc/motd Лучшие практики Continuous Delivery с Docker
  3. 3. flant.ru
  4. 4. Continuous Delivery git build test release operate
  5. 5. Continuous Delivery git build test release operate Зачем?
  6. 6. Continuous Delivery git build test release operate
  7. 7. Опыт OpenSolaris Zones # capsh --print | grep experience
  8. 8. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones # capsh --print | grep experience
  9. 9. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 # capsh --print | grep experience
  10. 10. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 LXC # capsh --print | grep experience
  11. 11. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC # capsh --print | grep experience
  12. 12. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень # capsh --print | grep experience
  13. 13. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень Docker 2014, 6 июня # capsh --print | grep experience
  14. 14. Клиенты Первый канал Forbes.ru Лепра и Dirty Ситимобил Нотамедиа # capsh --print | grep clients
  15. 15. Внедрения # capsh --print | grep implementations 10+ прошлых поколений с 2011 года
  16. 16. Внедрения 4 проекта уже в продакшне # capsh --print | grep implementations 10+ прошлых поколений с 2011 года
  17. 17. Внедрения 4 проекта уже в продакшне # capsh --print | grep implementations 10+ прошлых поколений с 2011 года 2 проекта на подходе
  18. 18. Зачем Docker? ?
  19. 19. Zero Downtime Deployment V1 Старая версия работает
  20. 20. Zero Downtime Deployment V1 Старая версия работает Старая версия остановлена
  21. 21. Zero Downtime Deployment V1 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается”
  22. 22. Zero Downtime Deployment V1 V2 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается” Новая версия работает
  23. 23. Zero Downtime Deployment V1 V2 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается” Новая версия работает
  24. 24. Zero Downtime Deployment V1 Старая версия работает
  25. 25. Zero Downtime Deployment V1 Старая версия работает Новая версия “прогревается” V2V1
  26. 26. Zero Downtime Deployment V1 V2 Старая версия работает Новая версия “прогревается” Переключили трафик V2V1 V1
  27. 27. Zero Downtime Deployment V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена V2V1 V1
  28. 28. Zero Downtime Deployment V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена V2V1 V1
  29. 29. Zero Downtime Deployment V1 V2 V2 V1 V2 V2V2V1 V1
  30. 30. Zero Downtime Deployment V1 V2 V2 V1 V2 V2V2V1 V1
  31. 31. Запуск “двух версий” V1 :80
  32. 32. Запуск “двух версий” V1 :80 V2
  33. 33. Запуск “двух версий” V1 :80 V2 :81
  34. 34. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы
  35. 35. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути
  36. 36. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения
  37. 37. Запуск “двух версий” V1 V2 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость :80 :81
  38. 38. Убрать конфликты можно...
  39. 39. Запуск “двух версий” V1 :80 V2 :80
  40. 40. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы
  41. 41. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути
  42. 42. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения
  43. 43. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость
  44. 44. Запуск “двух версий” V1 :80 V2 :80 Docker даёт гарантию изоляции ресурсов Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость
  45. 45. Обновление зависимостей V1 PHP v1 driver v1
  46. 46. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2
  47. 47. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2 V1 V2 PHP v1 driver v1 PHP v2 driver v2
  48. 48. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2 V1 V2 PHP v1 driver v1 PHP v2 driver v2
  49. 49. Разрулить конфликты зависимостей тоже можно...
  50. 50. Главный паттерн V1 Старая версия работает 1
  51. 51. Главный паттерн V1 V1 V2 Старая версия работает Новая версия “прогревается” 1 2
  52. 52. Главный паттерн V1 V1 V2 V1 V2 Старая версия работает Новая версия “прогревается” Переключили трафик 1 2 3
  53. 53. Главный паттерн V1 V1 V2 V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  54. 54. Главный паттерн дырявый openssl дырявый openssl безопасный openssl дырявый openssl безопасный openssl безопасный openssl Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  55. 55. Главный паттерн Ubuntu 14.04 Ubuntu 14.04 Ubuntu 16.04 Ubuntu 14.06 Ubuntu 16.04 Ubuntu 16.04 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  56. 56. Главный паттерн Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  57. 57. Независимость Ubuntu
  58. 58. Независимость Ubuntu CentOS
  59. 59. Независимость Ubuntu CentOS Slackware Enterprise Linux
  60. 60. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты
  61. 61. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты
  62. 62. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей
  63. 63. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей
  64. 64. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО
  65. 65. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО
  66. 66. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО Возможность отката
  67. 67. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО Возможность отката
  68. 68. #1: Используйте Docker
  69. 69. Воспроизводимость программисты git
  70. 70. программисты staging git Воспроизводимость
  71. 71. программисты staging QA git Воспроизводимость
  72. 72. программисты staging production QA git Воспроизводимость
  73. 73. production
  74. 74. production
  75. 75. production
  76. 76. cервер #1 git Воспроизводимость
  77. 77. cервер #1 git зеркало пакетов Воспроизводимость
  78. 78. cервер #1 git зеркало пакетов обновлённое зеркало Воспроизводимость
  79. 79. cервер #1 git зеркало пакетов cервер #2 обновлённое зеркало Воспроизводимость
  80. 80. cервер #2
  81. 81. cервер#2
  82. 82. cервер #2
  83. 83. Разработчик: “У меня локально всё работает!”
  84. 84. … а разработчиков пускать на прод запретили.
  85. 85. Воспроизводимость Тестовое окружение → Продакшн
  86. 86. Воспроизводимость Тестовое окружение → Продакшн Выкат на множество серверов
  87. 87. Воспроизводимость Выкат на несколько кластеров / площадок Тестовое окружение → Продакшн Выкат на множество серверов
  88. 88. Воспроизводимость Выкат на несколько кластеров / площадок Локальный запуск точной копии Тестовое окружение → Продакшн Выкат на множество серверов
  89. 89. Выкат на несколько кластеров / площадок Локальный запуск точной копии Тестовое окружение → Продакшн Выкат на множество серверов Запуск “старых” версий Воспроизводимость
  90. 90. Гарантия воспроизводимости gitпрограммисты
  91. 91. Гарантия воспроизводимости gitпрограммисты docker образ
  92. 92. Гарантия воспроизводимости git тестовая площадка программисты docker образ
  93. 93. Гарантия воспроизводимости gitпрограммисты docker образ production тестовая площадка
  94. 94. Гарантия воспроизводимости gitпрограммисты docker образ программисты тестовая площадка production
  95. 95. Гарантия воспроизводимости gitпрограммисты docker образ другие площадки тестовая площадка production программисты
  96. 96. Гарантия воспроизводимости gitпрограммисты docker образ архив тестовая площадка production программисты другие площадки
  97. 97. #2: One image to rule them all
  98. 98. Разобрались с Docker ✔
  99. 99. ✔ Как собирать docker-образы? ? Разобрались с Docker ✔
  100. 100. Разобрались с Docker ✔ Как собирать docker-образы? ? Куда положить Dockerfile? ?
  101. 101. Код и инфраструктура development master git
  102. 102. Код и инфраструктура development master git V2 V1
  103. 103. staging production Код и инфраструктура development master git V2 V1
  104. 104. staging production Код и инфраструктура development master git V1 PHP 5.5 V2 V1
  105. 105. Код и инфраструктура development staging production master git V2 V1PHP 7 PHP 5.5 V2 V1
  106. 106. Код и инфраструктура development staging production master git V2 V1PHP 7 PHP 5.5 V2 V2
  107. 107. Код и инфраструктура development master staging production git V2 V2PHP 7 V2 V2 PHP 5.5
  108. 108. Код и инфраструктура development master staging production git V2 V2PHP 7 PHP 5.5 V2 V2
  109. 109. Код и инфраструктура development master V2 staging production V1 git V2 V1PHP 7 PHP 5.5
  110. 110. Код и инфраструктура development master V2 staging production V1 git V2 V1PHP 7 PHP 5.5 PHP 7 PHP 5.5
  111. 111. Код и инфраструктура development master V2 V1 git PHP 7 PHP 5.5 staging production V2 PHP 7 V1 PHP 5.5
  112. 112. Код и инфраструктура development master V2 staging production V2 git PHP 7 PHP 7 V2 PHP 7 V1 PHP 5.5
  113. 113. Код и инфраструктура development master staging production V2 git PHP 7 V2 PHP 7 V2 PHP 7 V2 PHP 7
  114. 114. … и должна жить с ним #3: Инфраструктура – это код
  115. 115. Код и многослойная архитектура nginx 1.2 V2 frontend backend production V1
  116. 116. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V1
  117. 117. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V1
  118. 118. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V2
  119. 119. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V2
  120. 120. Код и многослойная архитектура nginx 1.3 V2 nginx 1.3 V2 frontend backend staging production V2
  121. 121. Код и многослойная архитектура V1 development PHP 5.5 git V2 production PHP 7
  122. 122. Код и многослойная архитектура V1 development PHP 5.5 nginx 1.2 git V2 production PHP 7 nginx 1.3
  123. 123. Код и многослойная архитектура V2 PHP 7 nginx 1.3 git программисты devops V2 docker-образ #1 PHP 7 nginx 1.3 docker-образ #2
  124. 124. … и это касается не только бекенда #3: Инфраструктура – это код
  125. 125. Несколько проектов git project_1 Код nginx
  126. 126. Несколько проектов git project_1 Код nginx git project_2 Код
  127. 127. Несколько проектов git project_1 Код nginx git project_2 Код nginx
  128. 128. Несколько проектов git project_1 Код nginx git project_2 Код nginx
  129. 129. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код nginx nginx
  130. 130. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код nginx nginx
  131. 131. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код nginx nginx nginx
  132. 132. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  133. 133. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  134. 134. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  135. 135. WET
  136. 136. WET we enjoy typing
  137. 137. WET we enjoy typing write everything twice
  138. 138. WET we enjoy typing write everything twice waste everyone's time
  139. 139. DRY
  140. 140. DRY don't repeat yourself
  141. 141. Несколько проектов git project_1 Код nginx
  142. 142. Несколько проектов git project_1 Код nginx git project_2 Код
  143. 143. Несколько проектов git project_1 Код git project_2 Код git nginx nginxnginx
  144. 144. Несколько проектов git project_1 Код nginx v1 git project_2 Код git nginx nginx v1
  145. 145. Несколько проектов git project_1 Код nginx v1 git project_2 Код git nginx nginx v1 nginx v1
  146. 146. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v1 nginx v1
  147. 147. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v2 nginx v1
  148. 148. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v2 nginx v2
  149. 149. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v3 nginx v2
  150. 150. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v3 nginx v3
  151. 151. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2
  152. 152. bundler, composer, pip, npm, ... Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management
  153. 153. bundler, composer, pip, npm, ... Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management
  154. 154. Dockerfile Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...
  155. 155. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...
  156. 156. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef
  157. 157. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf
  158. 158. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet
  159. 159. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian
  160. 160. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian
  161. 161. … и требует соответствующих подходов #3: Инфраструктура – это код
  162. 162. Разобрались с Docker ✔
  163. 163. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔
  164. 164. Разобрались с Docker Интегрировали код инфраструктуры ✔ Когда собирать docker-образы? ? ✔
  165. 165. Разобрались с Docker Интегрировали код инфраструктуры ✔ Когда собирать docker-образы? Как лучше тегировать docker-образы? ? ? ✔
  166. 166. Git → Docker Какие бранчи собирать?
  167. 167. Git → Docker Какие бранчи собирать? Как тегировать образы?
  168. 168. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы?
  169. 169. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  170. 170. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Что побывало в продакшне? На какую версию откатиться?
  171. 171. Какие из образов должны проходить QA? Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Что побывало в продакшне? На какую версию откатиться?
  172. 172. master Временные образы
  173. 173. master Временные образы
  174. 174. master app:master Временные образы
  175. 175. master app:master preview Временные образы
  176. 176. master app:master preview app:master Временные образы
  177. 177. master app:master release_7 preview app:master Временные образы
  178. 178. master app:master release_7 app:release_7 preview app:master Временные образы
  179. 179. master app:master release_7 app:release_7 preview app:master Временные образы
  180. 180. master app:master release_7 app:release_7 preview app:master Временные образы
  181. 181. master app:master release_7 app:release_7 preview app:master Временные образы
  182. 182. release_7 app:release_7 preview Временные образы app:master master app:master
  183. 183. app:master release_7 app:release_7 preview Временные образы master app:master
  184. 184. release_7 app:release_7 preview Временные образы master app:master app:master
  185. 185. release_7 app:release_7 preview Временные образы master app:master app:master ≠
  186. 186. master app:master release_7 app:release_7 preview Временные образы app:master
  187. 187. master app:master release_7 app:release_7 preview app:master Временные образы
  188. 188. master app:master release_7 app:release_7 preview Временные образы app:master
  189. 189. feature_x master app:master release_7 app:release_7 preview app:feature_x Временные образы app:master
  190. 190. Временные образы Собирать все бранчи?
  191. 191. Временные образы Собирать все бранчи? Не стоит
  192. 192. Временные образы Собирать все бранчи? Не стоит master — общая интеграция
  193. 193. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ Собирать все бранчи? Не стоит
  194. 194. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Собирать все бранчи? Не стоит
  195. 195. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Выкатывать автоматом? Собирать все бранчи? Не стоит
  196. 196. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Выкатывать автоматом? Как удобнее Собирать все бранчи? Не стоит
  197. 197. master 6.0.1 Релизные образы staging production
  198. 198. master Релизные образы app:6.0.1 6.0.1 staging production
  199. 199. staging production master Релизные образы app:6.0.1 6.0.1 app:6.0.1
  200. 200. staging production master release_7 Релизные образы 6.0.1 app:6.0.1 app:6.0.1
  201. 201. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1
  202. 202. staging production 6.0.1master release_7 7.0.0 Релизные образы app:6.0.1 app:6.0.1
  203. 203. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 7.0.0
  204. 204. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 7.0.0 app:7.0.0 app:7.0.0
  205. 205. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 7.0.0 app:7.0.0 app:7.0.0
  206. 206. staging production 6.0.1 7.0.0 master release_7 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  207. 207. staging production 6.0.1master release_7 7.0.0 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  208. 208. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  209. 209. staging production master release_7 7.0.0 6.1.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  210. 210. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗ app:6.1.0 6.1.0
  211. 211. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 6.1.0
  212. 212. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 6.1.0
  213. 213. staging production master release_7 7.0.0 release_8 Релизные образы 6.0.1 6.1.0 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0
  214. 214. staging production master release_7 7.0.0 release_8 Релизные образы 6.0.1 6.1.0 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0
  215. 215. staging production 6.1.0master release_7 7.0.0 release_8 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  216. 216. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  217. 217. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  218. 218. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗ app:6.1.1
  219. 219. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  220. 220. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  221. 221. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  222. 222. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1 OK
  223. 223. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  224. 224. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  225. 225. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  226. 226. staging production master release_7 7.0.0 release_8 6.1.0 7.0.1 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  227. 227. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  228. 228. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  229. 229. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  230. 230. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  231. 231. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 OK
  232. 232. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  233. 233. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  234. 234. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  235. 235. staging production master 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  236. 236. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы?
  237. 237. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? git branch git tag временные образы релизные образы
  238. 238. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы?
  239. 239. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  240. 240. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? docker tag git tag
  241. 241. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  242. 242. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA?
  243. 243. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA?
  244. 244. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться?
  245. 245. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  246. 246. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  247. 247. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  248. 248. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться?
  249. 249. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию?
  250. 250. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию? git tag docker tag
  251. 251. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию?
  252. 252. #4: Свяжите Git с Docker
  253. 253. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔
  254. 254. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  255. 255. Чего не хватает? ? Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  256. 256. frontend backend Последовательность выката nginx 1.2 HTTP PHP 5.5V1 Старая версия работает
  257. 257. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP Старая версия работает Обновили backend PHP 5.5V1 PHP 7V2 1
  258. 258. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP WS Старая версия работает Обновили backend PHP 5.5V1 PHP 7V2 1
  259. 259. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP WS nginx 1.3 HTTP WS Старая версия работает Обновили backend Обновили frontend PHP 5.5V1 PHP 7V2 PHP 7 1 V2 2
  260. 260. Последовательность выката PHP 5.5 HTTP nginx 1.2 HTTP WS nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 7V2 PHP 7V2 2 1 Обновили backend Обновили frontend
  261. 261. Последовательность выката PHP 5.5 HTTP Старая версия работает frontend backend V1 nginx 1.2
  262. 262. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 Обновили frontend 1
  263. 263. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 PHP 7V2 Обновили frontend Обновили backend 1 2
  264. 264. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 PHP 7V2 2 1 Обновили frontend Обновили backend
  265. 265. Например: frontend → migration → backend #5: Регламентируйте порядок выката
  266. 266. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  267. 267. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔ Установили порядок выката ✔
  268. 268. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔ Установили порядок выката ✔ Снова чего-то не хватает? ?
  269. 269. Docker swarm Docker compose
  270. 270. Docker swarm Docker compose
  271. 271. Docker swarm Docker compose Consul Serf
  272. 272. Dokku Docker swarm Docker compose Consul Serf
  273. 273. Dokku Shipyard Docker swarm Docker compose Consul Serf
  274. 274. Dokku Shipyard Docker swarm Docker compose Consul Serf
  275. 275. Dokku Shipyard Docker swarm Docker compose Consul Serf
  276. 276. Accelerate Your Delivery
  277. 277. by Google
  278. 278. κυβερνήτης
  279. 279. кормчий
  280. 280. Readiness probe V1 Старая версия работает
  281. 281. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2
  282. 282. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2 V1 V2 Readiness probe
  283. 283. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2 V1 Readiness probe V2 V1 Переключили трафик V2 Старая версия остановлена V2
  284. 284. Synchronous update V1 V1 V1 V1 V1 V1 V1 V1
  285. 285. Synchronous update V1 V1 V1 V1 V1 V1 V1 V1
  286. 286. Synchronous update V1 V1 V1 V1 V1 V1 V1
  287. 287. Synchronous update V1 V1 V1 V1 V1 V1 V1
  288. 288. Synchronous update V1 V1 V1 V1 V1 V1
  289. 289. Synchronous update V1 V1 V1 V1 V1
  290. 290. Synchronous update V1 V1 V1 V1
  291. 291. Synchronous update V1 V1 V1 V1V2
  292. 292. Synchronous update V1 V1 V1 V1V2
  293. 293. Synchronous update V1 V1 V1 V1V2 V2
  294. 294. Synchronous update V1 V1 V1 V1V2 V2
  295. 295. Synchronous update V1 V1 V1 V1V2 V2 V2
  296. 296. Synchronous update V1 V1 V1 V1V2 V2 V2 V2
  297. 297. Synchronous update V1 V1 V1 V1V2 V2 V2 V2
  298. 298. Synchronous update V1 V1 V1V2 V2 V2 V2
  299. 299. Synchronous update V1 V1V2 V2 V2 V2
  300. 300. Synchronous update V2 V2 V2 V2
  301. 301. Synchronous update V2 V2 V2 V2 V2
  302. 302. Synchronous update V2 V2 V2 V2 V2 V2
  303. 303. Synchronous update V2 V2 V2 V2 V2 V2 V2 V2
  304. 304. Rolling update V1 V1 V1 V1 V1 V1 V1 V1
  305. 305. Rolling update V1 V1 V1 V1 V1 V1 V1 V1
  306. 306. Rolling update V1 V1 V1 V1 V1 V1 V1
  307. 307. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  308. 308. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  309. 309. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  310. 310. Rolling update V2 V1 V1 V1 V1 V1 V1
  311. 311. Rolling update V2 V2 V1 V1 V1 V1 V1 V1
  312. 312. Rolling update V2 V2 V1 V1 V1 V1 V1 V1
  313. 313. Rolling update V2 V2 V2 V1 V1 V1 V1 V1
  314. 314. Rolling update V2 V2 V2 V2 V1 V1 V1 V1
  315. 315. Rolling update V2 V2 V2 V2 V2 V1 V1 V1
  316. 316. Rolling update V2 V2 V2 V2 V2 V2 V1 V1
  317. 317. Rolling update V2 V2 V2 V2 V2 V2 V2 V1
  318. 318. Rolling update V2 V2 V2 V2 V2 V2 V2 V2
  319. 319. kubernetes & release readiness probe
  320. 320. kubernetes & release readiness probe synchronous update
  321. 321. kubernetes & release readiness probe synchronous update rolling update
  322. 322. kubernetes & release readiness probe synchronous update canary releases rolling update
  323. 323. kubernetes & operate service supervision
  324. 324. kubernetes & operate service supervision liveness probe
  325. 325. kubernetes & operate service supervision liveness probe self-healing
  326. 326. kubernetes & operate service supervision liveness probe autoscaling self-healing
  327. 327. kubernetes & operate service supervision liveness probe monitoring influx + grafana autoscaling self-healing
  328. 328. kubernetes & operate service supervision liveness probe monitoring influx + grafana autoscaling self-healing logging elastic + fluent + kibana
  329. 329. kubernetes Мощный фундамент
  330. 330. kubernetes Мощный фундамент Большие перспективы
  331. 331. kubernetes Мощный фундамент Большие перспективы Интеграция вместо велосипедов
  332. 332. kubernetes Мощный фундамент Большие перспективы Простота Интеграция вместо велосипедов
  333. 333. kubernetes Мощный фундамент Большие перспективы Невероятная совместимость Простота Интеграция вместо велосипедов
  334. 334. kubernetes Мощный фундамент Большие перспективы Невероятная совместимость Простота Интеграция вместо велосипедов Всеразмерность
  335. 335. … ведь она есть и работает! #6: Используйте готовую платформу
  336. 336. #1: Используйте Docker
  337. 337. #1: Используйте Docker #2: One image to rule them all
  338. 338. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код
  339. 339. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker
  340. 340. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката
  341. 341. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката #6: Используйте готовую платформу
  342. 342. Приглашаем в гости на наш стенд В3 LINUX-КВЕСТ Удивительный квест для самых отважных сисадминов. Записывайтесь прямо сейчас и покажите свой опыт в Linux-кунгфу. 1 июня, 12:30 Участникам потребуется ssh-клиент ;)
  343. 343. pam_docker github.com/flant/pam_docker Поддержите нас, поставьте ★ #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката #6: Используйте готовую платформу Дмитрий Столяров dmitry.stolyarov@flant.ru flant.ru Работа в Нижнем Новгороде Пишите на hr@flant.ru Лучшие практики Continuous Delivery с Docker
  344. 344. Continuous Delivery git build test release operate Gitlab Kubernetes

×