SlideShare a Scribd company logo
Docker в работе:
взгляд на
использование в
Badoo через год
Антон Турецкий
Docker в работе: взгляд на использование в Badoo через год
Вопросы: год назад,
а актуальны по сей день…
Docker: WTF?
Предыстория
Docker VS Puppet: Заменит ли Docker Puppet?
Предыстория
Virtualization VS Containerization:
Docker – еще одна виртуализация?
Предыстория
Docker: silver bullet?
THERE WILL BE NO SILVER BULLET.
RATHER IT WILL BE A COMBINATION
OF TECHNOLOGIES.
Andrew Gould(c)
Вопрос
Docker: нужен ли?
#1: о наболевшем
#1: Сервис -> Сервер
#1: Миграция Сервиса
#1: Миграция Docker
#1: Миграция Docker
#1: Отвязать Application от OS
ДЦ: подумай о железе!
#2: capacity planning
• + Место в стойке
#2: capacity planning
• + Место в стойке
• + Порты на сетевом оборудовании
#2: capacity planning
• + Место в стойке
• + Порты на сетевом оборудовании
• + Экономия электроэнергии
#2: capacity planning
• + Место в стойке
• + Порты на сетевом оборудовании
• + Экономия электроэнергии
• -/+ SPoF
#3: единое окружение
#4* $ cat ./Dockerfile
FROM dockerio.badoo.com/itops/sles_12_base:latest
COPY sle-12.puppet.repo /etc/zypp/repos.d/
RUN zypper -q -n in puppetdb
COPY database.ini /etc/puppetlabs/puppetdb/conf.d/database.ini
COPY jetty.ini /etc/puppetlabs/puppetdb/conf.d/jetty.ini
COPY ssl/ /etc/puppetlabs/puppetdb/ssl/
#Service start/stop
COPY run-puppetdb /etc/services.d/puppetserver/run
COPY finish-puppetdb /etc/services.d/puppetserver/finish
ENTRYPOINT ["/init"]
Грабли
Грабли: (r)?syslog(-ng)?
syslog into container
Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
• Поддержка в работающем состоянии
Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
• Поддержка в работающем состоянии
• Нет времени объяснять – нужно сделать!
Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
• Поддержка в работающем состоянии
• Нет времени объяснять – нужно сделать!
Решение:
docker run -v /dev/log:/dev/log
Грабли: (r)?syslog(-ng)?
docker run -v /dev/log:/dev/log
• УРА!!! Всё работает, сообщения уходят!
Грабли: (r)?syslog(-ng)?
docker run -v /dev/log:/dev/log
• УРА!!! Всё работает, сообщения уходят!
• … до первого изменения/перезапуска
syslog на хост-системе…
Грабли: (r)?syslog(-ng)?
docker run -v /dev/log:/dev/log
• УРА!!! Всё работает, сообщения уходят!
• … до первого изменения/перезапуска
syslog на хост-системе…
Решение:
syslog into container
Грабли: mounts
Прокинуть “что-то” с хост ОС
Грабли: mounts
Прокинуть “что-то” с хост ОС
• /proc/mounts в контейнере
Грабли: mounts
Прокинуть “что-то” с хост ОС
• /proc/mounts в контейнере
• umount /dev/something (хост ОС)
Грабли: mounts
Прокинуть “что-то” с хост ОС
• /proc/mounts в контейнере
• umount /dev/something (хост ОС)
• umount /dev/something (container)
Грабли: mounts
Прокинуть “что-то” с хост ОС
• /proc/mounts в контейнере
• umount /dev/something (хост ОС)
• umount /dev/something (container)
• container restart …
Грабли: mounts
Решение:
• docker run --privileged
Грабли: mounts
Решение:
• docker run --privileged
• 100 раз подумать: так ли необходимо?
Грабли: mounts
Решение:
• docker run --privileged
• 100 раз подумать: так ли необходимо?
• избегать использование
“динамических точек монтирования”
Грабли: NAT
iptables, nf_conntrack
Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
• Вспомнить про
conntrack_generic_timeout = 600
Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
• Вспомнить про
conntrack_generic_timeout = 600
• Ждать когда “бомбанёт”
Грабли: NAT
Решение:
• Делать свой bridge, Open vSwitch, Weave etc
Грабли: NAT
Решение:
• Делать свой bridge, Open vSwitch, Weave etc
• Использовать хост ОС
docker run --net=host
без использования conntrack
Грабли: Storage Driver
AuFS
Device Mapper (thinp)
BTRFS
и прочие
вкусности и сладости…
Грабли: BTRFS
• root of docker MUST be on a BTRFS
Грабли: BTRFS
• root of docker MUST be on a BTRFS
• Запись на диск сразу не идет, сначала – в журнал
(Performance ~ native / 2)
Грабли: BTRFS
• root of docker MUST be on a BTRFS
• Запись на диск сразу не идет, сначала – в журнал
(Performance ~ native / 2)
• “No space left on device”
# btrfs fi show /var/lib/docker
# btrfs fi balance start /var/lib/docker
Грабли: BTRFS
BTRFS – это то немногое,
что действительно нормально работает
Грабли: Storage Driver
Решение: OverlayFS
Грабли: Storage Driver
Решение: OverlayFS
• Hardlink на одинаковые файлы
Грабли: Storage Driver
Решение: OverlayFS
• Hardlink на одинаковые файлы
• Performance: RW ~ Native Speed
Грабли: Storage Driver
Решение: OverlayFS
• Hardlink на одинаковые файлы
• Performance: RW ~ Native Speed
• Space Usage – больше не загадка!
Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
• несколько FROM в одном Dockerfile
“FROM can appear multiple times within
a single Dockerfile"
Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
• несколько FROM в одном Dockerfile
“FROM can appear multiple times within
a single Dockerfile”
• docker exec Version < 1.8
Важный совет…
не забывать искать свою проблему тут:
Changelog
Issues
GitHub
Сервис в контейнере
Docker Base Image
• Обновления (Bug fixes, Security fixes, Patches etc)
Docker Base Image
• Обновления (Bug fixes, Security fixes, Patches etc)
docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a'
Docker Base Image
• Обновления (Bug fixes, Security fixes, Patches etc)
docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’
• “Требуется внимание оператора” => Jira Task
Docker Base Image
• Обновления (Bug fixes, Security fixes, Patches etc)
docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’
• “Требуется внимание оператора” => Jira Task
• Обновление базового образа
Docker Base Image
• Обновления (Bug fixes, Security fixes, Patches etc)
docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’
• “Требуется внимание оператора” => Jira Task
• Обновление базового образа(+контейнеры)
Docker Images
• Обновления (Bug fixes, Security fixes, Patches etc)
docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’
• “Требуется внимание оператора” => Jira Task
• Обновление базового образа(+контейнеры)
• Следить за “свежестью пакетов” перед выкладкой
сервиса/образа (RPM based)
docker_build
docker_build
• Сгенерировать структуру директорий, конфиги
docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
• Выполнить сборку
docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
• Выполнить сборку
• Отправить результат в Registry(y/n)
docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
• Выполнить сборку
• Отправить результат в Registry(y/n)
• Сообщить о результате
* Обязательно: работать в режиме cli
docker_build
Мониторинг
Мониторинг: контейнер
• Docker CLI внутри
Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
• Отсылаем всё в Graphite
Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
• Отсылаем всё в Graphite
• Мониторим контейнер и его статус Zabbix’ом
Grafana: Host, Mem
Grafana: Host, CPU
Grafana: Host, Net
Grafana: Container, Mem
Grafana: Container, CPU
baDocker: webUI
baDocker: Требования
• Clientless
baDocker: Требования
• Clientless
• Управление OpenRegistry (v1, v2)
baDocker: Требования
• Clientless
• Управление OpenRegistry (v1, v2)
• Информация о
- хостах
- контейнерах
- сервисах, версиях
baDocker: Требования
• Clientless
• Управление OpenRegistry (v1, v2)
• Информация о
- хостах
- контейнерах
- сервисах, версиях
• Планировщик заданий
baDocker: Требования
• Clientless
• Управление OpenRegistry (v1, v2)
• Информация о
- хостах
- контейнерах
- сервисах, версиях
• Планировщик заданий
• Dashboard
baDocker: Hosts Summary
baDocker: Host Details
baDocker: Terminal
baDocker: Service
baDocker: Service HowTo
Postmortem Заключение
• Искать свой подход – не наступать на наши грабли
Postmortem Заключение
• Искать свой подход – не наступать на наши грабли
• Велосипед – это отлично, если колеса круглые
Спасибо
Антон Турецкий
a.turetsky@corp.badoo.com
@tyrchenok
@BadooDev
http://habrahabr.ru/company/badoo/
Вопросы?

More Related Content

PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PDF
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
PDF
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
PPTX
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
PDF
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Движение по хрупкому дну / Сергей Караткевич (servers.ru)

What's hot (19)

PDF
Депрокрастинируем Docker: контейнеры здесь и сейчас
ODP
Teach your dockers to use CRanes
PPTX
Docker в работе: взгляд на использование в Badoo через год
PPTX
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
PPTX
Антон Турецкий
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PDF
Архитектура хранения фотографий в Badoo
PDF
Мой маленький уютный PaaS / Илья Беда (bro.agency)
PDF
Docker networking
PPTX
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
PDF
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
PDF
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
PDF
Проникновение в Docker с примерами
PPTX
Docker & Badoo: 
никогда не останавливайся на достигнутом
PDF
Облако в Badoo год спустя
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PDF
Андрей Ситник
PPTX
Процесс разработки и тестирования с Docker + gitlab ci
Депрокрастинируем Docker: контейнеры здесь и сейчас
Teach your dockers to use CRanes
Docker в работе: взгляд на использование в Badoo через год
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Антон Турецкий
Docker & Puppet: как их скрестить и надо ли вам это?
Архитектура хранения фотографий в Badoo
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Docker networking
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Проникновение в Docker с примерами
Docker & Badoo: 
никогда не останавливайся на достигнутом
Облако в Badoo год спустя
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Андрей Ситник
Процесс разработки и тестирования с Docker + gitlab ci
Ad

Similar to Docker в работе: взгляд на использование в Badoo через год (20)

PDF
Docker - счастье для хомячка или ника?
PDF
Локальное окружение на Docker
PDF
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
PPTX
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
PDF
Docker for JS people
PPTX
Как мы собираем проекты в выделенном окружении в Windows Docker
PDF
Как не стать рабом облака. PaaS 2.0 с Docker
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PDF
Тестирование серверной конфигурации
PDF
OpenStack и Docker: вместе и по отдельности
PDF
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
PPTX
Dev ops.events.v tymoshyk-20-oct-2016
PDF
Docker в Badoo: ПМЖ или временная регистрация
PDF
Docker integration into Badoo
PDF
OpenStack и Docker: вместе и по отдельности
PDF
Виртуализация как инструмент разработчика
PDF
Виртуализация как инструмент разработчика
PPTX
Docker + Selenium Webdriver в рамках Continuous Integration
PDF
Docker контейнерная революция
PPTX
Docker + Selenium Webdriver в рамках Continuous Integration
Docker - счастье для хомячка или ника?
Локальное окружение на Docker
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Контроль окружения сборки C++ проектов с помощью Docker. Павел Филонов. CoreH...
Docker for JS people
Как мы собираем проекты в выделенном окружении в Windows Docker
Как не стать рабом облака. PaaS 2.0 с Docker
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Тестирование серверной конфигурации
OpenStack и Docker: вместе и по отдельности
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
Dev ops.events.v tymoshyk-20-oct-2016
Docker в Badoo: ПМЖ или временная регистрация
Docker integration into Badoo
OpenStack и Docker: вместе и по отдельности
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
Docker + Selenium Webdriver в рамках Continuous Integration
Docker контейнерная революция
Docker + Selenium Webdriver в рамках Continuous Integration
Ad

Docker в работе: взгляд на использование в Badoo через год