2. ПланПлан
• Почему Docker?
• Сравнение Docker, VZ контейнеров и Виртуальных машин
• Проблемы и решения
• Пример развертывания Docker
2
3. Что такое Docker и что он может?Что такое Docker и что он может?
• Система разработки, распространения и менеджмента приложений
– Создавать легко переносимые приложения
– Делиться приложениями на Docker Hub
– Распределенные приложения
• Содержит более 100,000 приложений
• Web-приложения(Wordpress, Apache, MySQL), тестовые среды(docker-
dev, CRIU) и менеджмент контейнеров(Compose, Kubernetes, cAdvisor)
3
4. Docker на хостеDocker на хосте
5
+ Низкие накладные
расходы
- Для одного пользователя
- Только доверенные
приложения
5. Docker в виртуальных машинахDocker в виртуальных машинах
6
+ Многопользовательская
аренда
- Высокие накладные
расходы
6. Docker в Virtuozzo контейнерахDocker в Virtuozzo контейнерах
7
+ Многопользовательская
аренда
+ Низкие накладные
расходы
7. Проблемы возникавшие с Docker в VZ контейнерахПроблемы возникавшие с Docker в VZ контейнерах
• Вложенные namespace'ы
• Вложенные cgroup'ы
• Сеть внутри Viruozzo контейнеров
• Альтернатива VFS граф-драйверу
8
8. Вложенные namespace'ыВложенные namespace'ы
• Docker использует clone NEW_{NET,IPC,UTS,MNT,PID}
• Разборка вложенных netns при остановке CT
• Мигрировать CT с вложенными ns нельзя(ограничено в VZ6)
• Capabilitiles – части нет в 2.6.32-ядрах(ограничены в VZ6)
• Добавили CAP_LAST_CAP и Child sub-reaper из мейнстрима
9
9. Вложенные cgroup'ыВложенные cgroup'ы
• Распространение ограничений на количество доступных cpu
• Распространение ограничений сpuset маски
• Эмулируем memory контроллер через наши beancounter'ы
• Конфигурируем systemd и патчим dind чтобы понимали наши мульти-
иерархии
• Простая реализация cgroup nsamespace
10
10. Сеть внутри Virtuozzo контейнеровСеть внутри Virtuozzo контейнеров
• Создание и конфигурация veth и bridge в CT
• Проблема с forwarding таблицами bridge
• Не поддерживаются bridge в Docker CT в VZ CT(sysfs)(ограничено в VZ6)
11
11. Альтернатива VFS граф-драйверуАльтернатива VFS граф-драйверу
• Только VFS граф-драйвер для Docker
– Были dm-thin и btrfs
– Нельзя дать полный доступ к блочному устройству
– Внешняя модификация образа диска под контейнером опасна для хоста
• Наш proxy граф-драйвер https://github.com/mpatlasov/docker
– Проксируем(контролируем) запросы через демон на хосте
• Мейнстримный граф-драйвер(Brian Goff из Docker'а)
– Успешно предложили изменения в дизайн
– Сможем использовать12
12. Извесные ограниченияИзвесные ограничения
• Запрещена миграция при вложенных пространствах имен
• Proxy граф-драйвера пока нет в мейнстриме
• Не поддерживаются bridge внутри Docker CT внутри VZ CT
• Игнорируем выходящие за рамки Capability
13
15. РезюмеРезюме
• Virtuozzo CT - многопользовательский Docker на одном хосте без
накладных расходов
• Столкнулисть с проблемами и решили их, осталось несколько
ограничений
• Будем использовать мейнстримный proxy graph-driver
• Docker быстро развивается и требователен к ядру – поддерживаем
новые фичи по мере появления
16
16. ●
Запускаем Docker в Virtuozzo контейнерах:
http://kb.odin.com/en/125115
●
Запускаем Docker в OpenVZ:
https://openvz.org/Docker_inside_CT
●
Наш proxy граф-драйвер:
https://github.com/mpatlasov/docker
●
Запускаем Docker в Virtuozzo контейнерах:
http://kb.odin.com/en/125115
●
Запускаем Docker в OpenVZ:
https://openvz.org/Docker_inside_CT
●
Наш proxy граф-драйвер:
https://github.com/mpatlasov/docker
Павел Тихомиров <ptikhomirov@virtuozzo.com>