Thursday, November 14, 2019

Docker: контейнеры это не виртуальные машины

Всем привет!
Docker выпустил небольшую книжечку "Docker for the Virtualization Admin", поэтому я решил ее быстренько пролистать и поделиться своим мнением, что там интересного.
И вот что я для себя выделил.

Когда начинаешь работать с докером, контейнеры описываются как "легкие виртуальные машины” и это понятно, потому как 2 технологии(docker and VMs) используют похожие характеристики.
2 главных критерия сходства:
  • Каждый из них предназначен для обеспечения изолированной
    среды, в которой выполняется некоторое приложение. 
  • Каждая среда представлена в виде двоичного артефакта (binary artifact), и может быть легко перемещена между хостами.

Ключевое различие заключается в архитектуре! Контейнеры и виртуальные машины имеют похожие преимущества изоляции и распределения ресурсов, но функционируют по-разному: контейнеры виртуализируют операционную систему вместо аппаратных ресурсов. Эта облегченная форма показывает эффект создания контейнеров как более портативных, так и более эффективных, чем виртуальные машины. Другая форма сравнения, виртуалка - огромный приусадебный дом, а контейнер - небольшая квартира. Примерно, все тоже самое, но в совсем в других размерах и абстракциях.
Администратор создает образ Docker, который включает в себя только необходимое для запуска своего приложения. Виртуальная машина собирается в обратном направлении: начиная с полной операционной системы и, в зависимости от приложения, добавляются нужные компоненты.
Виртуальная машина по-прежнему рассматривается как сервер, включая традиционное резервное копирование, аварийное восстановления, и другие серверные задачи.
С контейнерами Docker - это движение в сторону микросервисов, единственная служба, которая и является приложением. В архитектуре микросервисов существует множество небольших служб, каждый представлен как одиночный контейнер Docker, содержит
только свое приложение. Большие и тяжелые приложения теперь могут быть деконструированы на небольшие компоненты(контейнеры).

Как забэкапить контейнер?
А никак! Данные приложения не живут в контейнере, они живут в томе(docker volume), который совместно используется между одним или несколькими контейнерами, как определено архитектурой приложения. Тома поддерживают различные виды бэкапирования, включая облачное, поэтому администратор создает резервную копию тома данных, и забывает о контейнере.

Как управлять обновлениями?
Администратор обновляет существующий образ(image) Docker, останавливает выполнение
контейнера, и запускает заново. Контейнер можно запустить за доли секунды, поэтому эти обновления выполняются намного быстрее, чем на виртуальной машине. Нет необходимости перезагружать всю ОС-просто остановите старую версию вашего контейнера и запустите  снова из нового образа.

И самый главный вопрос - где лучше запускать контейнеры на виртуальных серверах или на физических? 
Эксперты докера отвечают "все зависит от ...". А далее от того чем вы располагаете, то к чему стремитесь, что хотите получить в итоге. Любое ИТ-решение основано на множестве переменных: производительности, масштабируемости, надежности, безопасности и др.
Docker предоставляет вам возможность развернуть приложения без проблем, независимо от базовой инфраструктуры, будь то железный сервер или виртуальная машина, центр обработки данных или публичное облако. Основное тут ,что вы можете в дальнейшем перенести ваше приложение на другую платформу.

Задержка (Latency). Приложения с низким порогом задержки лучше разворачивать на  физических серверах. Как пример, торговые приложения(площадки). 

Доступное пространство(Capacity). Если ваши контейнерные приложения не потребляют всю емкость на физическом сервере, виртуализация предлагает преимущество преимущество. Например, можно назначить данное пространство для песочницы для разработчиков.

Смешанные Операционные Системы(Mixed Operating Systems). Если вам потребуются контейнеры разных ОС, Windows и Linux на одном хосте, вам нужно будет
использовать виртуализацию.

Мультиарендность(Multitenancy). Некоторые приложения испытывают рабочие нагрузки, которые не могут совместно использовать ядра или ресурсы. В этом случае виртуальные машины предоставляют дополнительный слой изоляции по сравнению с контейнерами на физическом сервере.

Пулы Ресурсов / Квоты(Resource Pools /Quotas). Многие решения для виртуализации имеют широкий спектр функций управления и приоритизации использования общих ресурсов виртуальными машинами. Docker предоставляет концепцию ограничений ресурсов для
контейнера, но если вы обеспокоены что эти разрешения будут проигнорированы, виртуальные машины могут добавить еще один пограничный слой



No comments:

Post a Comment