Путь движения приложения от разработки к продуктивному использованию не всегдя прост и прямолинеен. Кроме решения задачи обеспечения работоспособности приложения в различных средах, существуют еще проблемы определения зависимостей, обновления компонент, маштабирование приложения.
Контейнеризация с помощью docker позволяет решить большую часть данных проблем. Приложение разбивается на компоненты по функциям, которые имеют индивидуальную упаковку с зависимостями, а потом могут быть развернуты на архитектуре отличной от стандартной.
Данная возможность упрощает обновления отдельных компонент и маштабирование приложения вцелом.
Изоляция и контейнеризация не новые термины в вычислительных системах. Linux Containers (LXC) технология, появившаяся еще в 2008 году в ядре Linux– была положена в основу дальшешей разработки контейнеризации. Данная технология позволяет организовать изолированое использование ресурсов и пространства имен. Изначально докер, использовал LXC , практически в неизменном виде.
Плюсы контейнеризации docker
Абстрагирование приложение от хоста
Задумка в контейнера – полная стандартизация. Контейнер соединяется с хостом определенным интерфейсом, контейнеризорованное приложение не зависит от архитектуры или ресурсов хоста. Для хоста же контейнер некий «черный ящик», не имеет значение что в нем.
Маштабирование
В продолжение преимущества абстрагирования приложения от хоста, является возможность простого и линейного маштабирования. Т.е на одной машине может быть запущено несколько контейнеров в то же время они могут быть запущены и на тестовом сервере. В продуктивной среде они так же можно их маштабировать.
Управление версиями и зависимостями
Благодаря использованию контейнеров, разработчик привязывает все компоненты и зависимости к приложению, что позволяет работать как цельным объектом. На хосте не нужны установки дополнительных компонент или зависимосте для запуска приложения, которое находится внутри контейнера, достаточно возможности запуска докер контейнера.
Изолирование среды
Изоляция в контенерах не достигает такого же уровня как в виртуализации, но тем не менее обладает легкой средой выполнения и относится к изоляции на уровне процессов. При этом контейнер работает на том же самом ядре, что позвоялет ему очень быстро запускаться. Запуск сотни контейнеров на рабочей машине не будет проблемой.
Использование слоев
Легкость контейнеров заключатеся в их послойности. То есть когда несколько контейнеров используют одинаковый слой, они могут им пользоваться без дублирования, это минимизирует использование дискового пространства.
Компоновка
Возможность написания задания конкретных действий доя создания нового образа. Т.е. настройки среды можно писат как код и сохранять в системе контроля версий.
Недостатки контейнеров докер
Тонкая настройка
При больших масштабируемости и нагрузке необходимо очень четкая и качественная настройка систем.
Обратная совместимость
Докер быстро развивается и одним из минусов такого развития бывает ограниченная обратная совместимость по некоторым направления.
Удаление
Процесс удаления докер контейнеров занимает большое количество времени и требует немалое количество операций ввод вывода.
Производительность
Дополнительные надстройки на системе в любом случае приводит к увеличению нагрузки и расходу ресурсов.
Архитектура
Контейнеризация являет собой надстройку над ОС, тем самым усложняя реализацию задачи.
Поддержка
Для поддержки и сопровождения докер контейнеров необходимо не только навыки системного администратора, но и хорошие знания docker
Вывод
Контейнеризация docker имеет свои достоинства и недостатки, в любом случае преимущество использования контейнеров должно решаться исходя из поставленной задачи. Для некоторых задач без докера не обойтись, а для некоторых он попросту лишний.
Рассмотрим преимущества и не достатке решения с использование docker контейнеров на конкретном примере создания простого веб сервера.
Установка веб сервера без контейнеров | ||
1 | Разворачивание Vesta CSP и установка пользователей и доменных имен 1 сервер | 2ч |
2 | Разворачивание Vesta CSP и установка пользователей и доменных имен 2 сервер | 2ч. |
3 | Организация отказоустойчивости серверов | 3ч. |
4 | Загрузка файлов сайта клиентом | 2ч |
5 | Замена ip адресов на NS серверах | 1ч. |
Итого | 8ч | |
Установка веб сервера с использованием контейнеров | ||
1 | Установка Proxmox | 1ч. |
2 | Установка LXC Контейнеров, машрутизация его сети и автобекапов контейнеров | 3ч. |
3 | Разворачивание Vesta CSP,настройка доменов и установка пользователей | 2ч |
4 | Анаолгичная настройка резервного сервера | 5ч. |
5 | Создание кластера нод proxmox и настройка автомиграции | 1ч |
6 | Установка, настройка прокси сервера, лоад балансинга и отказоустойчивости | 3ч. |
Итого | 15ч. |
Как вы уже заметили, время на реализацию с использованием контейнеров значительно больше.
Давайте разберем плюсы и минусы докер для веб сервера:
Плюсы | Минусы |
Балансировка нагрузки пользователей (второй сервер не простаивает) | Усложнение инфраструктуры из-за маршрутизации трафика |
Отказоустойчивость в случае падения одной из нод | Зависимость от прокси-сервера (в идеале их тоже делают 2) |
Легкое восстановление фул бэкапа засчет снепшотов | Снижение производительности на 2-4% процента засчет контейнеризации |
Хранилище повышенной стойкости ZFS | Необходима поддержка виртуализации KVM на стороне Хостера |
Возможность содержать в контейнерах тест/дев и прод сервера | Стоимость решения и поддержки |
Подключение неограниченного кол-ва таких нод | Время реализации |
Повышение безопасности инфраструктуры |
Как и говорилось выше, в зависимости от поставленной задачи, минусы докер могут нивелировать все плюсы от использования контейнерной виртуализации. Можно сделать вывод, что для сайтов вполне достаточно простой архитектуры из двух серверов, если же планируется значительный рост разработки, а так же огромный прирост посетителей за короткое время, в таком случае стоит рассматривать инфраструктуру с использованием докер.
Наш команда профессиональных DevOps администраторов, имеет большой опыт в внедрении и поддержке контейнеризации в том числе и docker, обращайтесь [email protected]
А нужно ли это поделие сисадмину? изучаю около 2 дня, скоро голова лопнет от кол-ва информации.
Конечно нужно, если планируете работать с большими проектами.
Статья неплохая, но мешает читать обилие опечаток и ошибок грамматики.