Мы в Badoo используем Docker больше года и на нашем примере попробуем поговорить о возможных моделях его применения.
+ 85% наших сервисов работают в контейнерах: для чего и почему мы перенесли свои сервисы в контейнеры.
+ Как мы подходим к сборке образов? Базовый образ: используем слои, следим за системными обновлениями.
+ Автоматизация процесса сборки образов с нашими сервисами: Jira flow, Teamcity и другие страшные для админа слова.
+ Лучшее ли место для тестирования production? Путь образа от сборки до Production.
+ baDocker: webUI своими руками: зачем и почему?
+ Как дать возможность управлять запущенными сервисами и их версиями разработчику.
+ Docker: мониторинг и анализ работающих контейнеров.
25. Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
• Поддержка в работающем состоянии
• Нет времени объяснять – нужно сделать!
26. Грабли: (r)?syslog(-ng)?
syslog into container
• “One container – One Service”
• Поддержка в работающем состоянии
• Нет времени объяснять – нужно сделать!
Решение:
docker run -v /dev/log:/dev/log
28. Грабли: (r)?syslog(-ng)?
docker run -v /dev/log:/dev/log
• УРА!!! Всё работает, сообщения уходят!
• … до первого изменения/перезапуска
syslog на хост-системе…
29. Грабли: (r)?syslog(-ng)?
docker run -v /dev/log:/dev/log
• УРА!!! Всё работает, сообщения уходят!
• … до первого изменения/перезапуска
syslog на хост-системе…
Решение:
syslog into container
37. Грабли: mounts
Решение:
• docker run --privileged
• 100 раз подумать: так ли необходимо?
• избегать использование
“динамических точек монтирования”
40. Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
41. Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
• Вспомнить про
conntrack_generic_timeout = 600
42. Грабли: NAT
Как можно решать:
• Увеличить таблицу conntrack
• Увеличить hashsize ~ conntrack / 8
• Вспомнить про
conntrack_generic_timeout = 600
• Ждать когда “бомбанёт”
47. Грабли: BTRFS
• root of docker MUST be on a BTRFS
• Запись на диск сразу не идет, сначала – в журнал
(Performance ~ native / 2)
48. Грабли: 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
56. Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
57. Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
• несколько FROM в одном Dockerfile
“FROM can appear multiple times within
a single Dockerfile"
58. Грабли: Misc
• Больше ОДНОГО сервиса в контейнере
- свой ENTRYPOINT
РЕШЕНИЕ: S6 http://skarnet.org/software/s6/
• несколько FROM в одном Dockerfile
“FROM can appear multiple times within
a single Dockerfile”
• docker exec Version < 1.8
72. docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
• Выполнить сборку
• Отправить результат в Registry(y/n)
73. docker_build
• Сгенерировать структуру директорий, конфиги
• Сгенерировать инструкцию(Dockerfile_source)
• Доставить исполняемые файлы
• Выполнить сборку
• Отправить результат в Registry(y/n)
• Сообщить о результате
* Обязательно: работать в режиме cli
78. Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
79. Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
• Отсылаем всё в Graphite
80. Мониторинг: контейнер
• Docker CLI внутри
• Снимаем то же, что и docker stats: CPU/MEM
• SAR:
$ sar -A -s %s 60 1 -f /var/log/sa/sa%s
• Отсылаем всё в Graphite
• Мониторим контейнер и его статус Zabbix’ом