352
Лучшие практики Continuous Delivery с Docker Дмитрий Столяров v3

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

  • Upload
    ontico

  • View
    9.568

  • Download
    6

Embed Size (px)

Citation preview

Лучшие практики Continuous Delivery с Docker

Дмитрий Столяров

v3

Привет!# whoamidmitry.stolyarov# hostname -dflant.ru# cat /etc/motdЛучшие практикиContinuous Delivery с Docker

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 experience

Опыт

Gentoo и Linux-VServer 2006

OpenSolaris Zones

procfs v1 by flant 2008

jailer by flant 2009

LXC

Docker 2013, осень

# capsh --print | grep experience

Опыт

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

Клиенты

Первый канал 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

Старая версияработает

Новая версия“прогревается”

Переключилитрафик

Старая версия остановлена

V2V1 V1

Zero Downtime Deployment

V1 V2 V2

Старая версияработает

Новая версия“прогревается”

Переключилитрафик

Старая версия остановлена

V2V1 V1

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-файлы, директории с кэшем, собственные пути

IPCобщая память, семафоры, сообщения

Запуск “двух версий”

V1 V2

Сетевые ресурсыпорты, сетевые интерфейсы

Файловая системаpid-файлы, директории с кэшем, собственные пути

IPCобщая память, семафоры, сообщения

PIDидентификаторы процессов, видимость

:80 :81

Убрать конфликты можно...

Запуск “двух версий”

V1

:80

V2

:80

Запуск “двух версий”

V1

:80

V2

:80

Сетевые ресурсыпорты, сетевые интерфейсы

Запуск “двух версий”

V1

:80

V2

:80

Сетевые ресурсыпорты, сетевые интерфейсы

Файловая системаpid-файлы, директории с кэшем, собственные пути

Запуск “двух версий”

V1

:80

V2

:80

Сетевые ресурсыпорты, сетевые интерфейсы

Файловая системаpid-файлы, директории с кэшем, собственные пути

IPCобщая память, семафоры, сообщения

Запуск “двух версий”

V1

:80

V2

:80

Сетевые ресурсыпорты, сетевые интерфейсы

Файловая системаpid-файлы, директории с кэшем, собственные пути

IPCобщая память, семафоры, сообщения

PIDидентификаторы процессов, видимость

Запуск “двух версий”

V1

:80

V2

:80

Docker даёт гарантию изоляции ресурсов

Сетевые ресурсыпорты, сетевые интерфейсы

Файловая системаpid-файлы, директории с кэшем, собственные пути

IPCобщая память, семафоры, сообщения

PIDидентификаторы процессов, видимость

Обновление зависимостей

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

Старая версия работает Новая версия “прогревается”

Переключили трафик Старая версия остановлена

1 2

3 4

Главный паттерн

дырявыйopenssl

дырявыйopenssl

безопасныйopenssl

дырявыйopenssl

безопасныйopenssl

безопасныйopenssl

Старая версия работает Новая версия “прогревается”

Переключили трафик Старая версия остановлена

1 2

3 4

Главный паттерн

Ubuntu14.04

Ubuntu14.04

Ubuntu16.04

Ubuntu14.06

Ubuntu16.04

Ubuntu16.04

Старая версия работает Новая версия “прогревается”

Переключили трафик Старая версия остановлена

1 2

3 4

Главный паттерн

Старая версия работает Новая версия “прогревается”

Переключили трафик Старая версия остановлена

1 2

3 4

Независимость

Ubuntu

Независимость

Ubuntu CentOS

Независимость

Ubuntu CentOS Slackware Enterprise Linux

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Обновление системного ПО

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Обновление системного ПО

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Обновление системного ПО

Возможность отката

Zero Downtime Deployment

Конфликт общих ресурсовФС, сокеты, порты, инит-скрипты

Конфликт зависимостей приложенийbower, bundler, pip, npm, composer и их зависимостей

Обновление системного ПО

Возможность отката

#1: Используйте Docker

Воспроизводимость

программисты

git

программисты

staging

git

Воспроизводимость

программисты

staging

QA

git

Воспроизводимость

программисты

staging production

QA

git

Воспроизводимость

production

prod

uctio

n

prod

uctio

n

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

gitPHP 7 PHP 5.5

staging production

V2 PHP 7 V1 PHP 5.5

Код и инфраструктура

development master

V2

staging production

V2

gitPHP 7 PHP 7

V2 PHP 7 V1 PHP 5.5

Код и инфраструктура

development master

staging production

V2

gitPHP 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-образ #2

… и это касается не только бекенда

#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

Код nginx

git project_5

nginx

nginx nginx

Несколько проектовgit project_1

Код nginx

git project_2

Код

git project_3

Код

git project_4

Код

Код nginx

git project_6

Код nginx

git project_5

nginx

nginx nginx

Несколько проектовgit project_1

Код nginx

git project_2

Код

git project_3

Код

git project_4

Код

Код nginx

git project_6

Код nginx

git project_5

nginx

nginx nginx

WET

WETwe enjoy typing

WETwe enjoy typing

write everything twice

WETwe enjoy typing

write everything twicewaste everyone's time

DRY

DRYdon'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 nginxnginx

v1

Несколько проектовgit project_1

Код nginx v1

git project_2

Код

git nginxnginx

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 v2

Dependency management

bundler, composer, pip, npm, ...

Несколько проектовgit project_1

Код

git project_2

Код

git nginx

nginx v4

nginx v4

nginx v2

Dependency management

Dockerfile

Несколько проектовgit project_1

Код

git project_2

Код

git nginx

nginx v4

nginx v4

nginx v2

Dependency management

bundler, composer, pip, npm, ...

Dockerfile + git submodules

Несколько проектовgit project_1

Код

git project_2

Код

git nginx

nginx v4

nginx v4

nginx v2

Dependency management

bundler, composer, pip, npm, ...

Dockerfile + git submodules

Несколько проектовgit project_1

Код

git project_2

Код

git nginx

nginx v4

nginx v4

nginx v2

Dependency management

bundler, composer, pip, npm, ...

Chef

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

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

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

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

… и требует соответствующих подходов

#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

✗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

✗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

✗app:6.1.0✗

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✗

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✗

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

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

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

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

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.1OK

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

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

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

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

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

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

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

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

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.1OK

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

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

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

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

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

git branch

git tag

временные образы

релизные образы

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

docker tag git tag

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

релиз багфикс итерация QA6.0.3

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

релиз багфикс итерация QA6.0.3

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

релиз багфикс итерация QA6.0.3

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

Как найти старую версию?

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

Как найти старую версию?

git tag docker tag

Git`о Docker`ный workflowКакие бранчи собирать?

Как тегировать образы?

Какой коммит на продакшне? Дельта выката?

Какие из образов должны проходить QA?

Что побывало в продакшне? На какую версию откатиться?

Как найти старую версию?

#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 PHP 7V2

1

frontend

backend

Последовательность выката

nginx 1.2

HTTP

nginx 1.2

HTTP WS

Старая версия работает

Обновилиbackend

PHP 5.5V1 PHP 7V2

1

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

Последовательность выката

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

Последовательность выката

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

Обновилиfrontend

1

Последовательность выката

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

Последовательность выката

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

Например: 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

Старая версияостановлена

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

monitoringinflux + grafana

autoscaling

self-healing

kubernetes & operate

service supervision liveness probe

monitoringinflux + grafana

autoscaling

self-healing

loggingelastic + fluent + kibana

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: Регламентируйте порядок выката

#6: Используйте готовую платформу

Приглашаем в гости на наш стенд В3

LINUX-КВЕСТУдивительный квест для самых отважных сисадминов.

Записывайтесь прямо сейчас и покажите свой опыт в Linux-кунгфу.

1 июня, 12:30

Участникам потребуется ssh-клиент ;)

pam_docker github.com/flant/pam_docker

Поддержите нас, поставьте ★

#1: Используйте Docker

#2: One image to rule them all

#3: Инфраструктура – это код

#4: Свяжите Git и Docker

#5: Регламентируйте порядок выката

#6: Используйте готовую платформу

Дмитрий Столяров [email protected]

flant.ru

Работа в Нижнем НовгородеПишите на [email protected]

Лучшие практики Continuous Delivery с Docker

Continuous Deliverygit

build

test

release

operate

Gitlab

Kubernetes