Когда следует использовать контейнеры Docker

Завершено

Как мы узнали, Docker имеет несколько функций для использования. Здесь мы рассмотрим преимущества, которые Docker дает нашим командам разработки и эксплуатации. Мы также рассмотрим несколько сценариев, где Docker может быть не лучшим выбором.

Эти сведения помогут решить, подходит ли Docker для вашей стратегии контейнеризации.

Напомним, что существует ряд проблем, с которыми сталкивается наша команда, как они разрабатывают и публикуют наш портал отслеживания заказов. Они ищут решение для:

  • Управляйте нашими средами размещения с легкостью.
  • Обеспечение непрерывности в том, как мы предоставляем наше программное обеспечение.
  • Убедитесь, что мы эффективно используем серверное оборудование.
  • Разрешите переносимость наших приложений.

Docker решает все эти задачи. Давайте еще раз вернемся к преимуществам, рассмотренным на данный момент.

Преимущества Docker

При использовании Docker мы немедленно получаем преимущества, предоставляемые контейнеризацией.

Эффективное использование оборудования

Контейнеры выполняются без использования виртуальной машины. Как мы узнали, контейнер использует ядро узла для таких функций, как файловая система, управление сетями, планирование процессов и управление памятью.

Схема, на которой сравнивается использование ресурсов виртуальной машины и ресурсов Docker.

По сравнению с виртуальной машиной можно увидеть, что для виртуальной машины требуется ос, установленная для предоставления функций ядра запущенным приложениям на виртуальной машине. Помните, что ОС виртуальной машины также требуется место на диске, память и время ЦП. Отказавшись от использования виртуальной машины, мы можем высвободить ресурсы узла и использовать их для запуска дополнительных контейнеров.

Изоляция контейнеров

Docker предоставляет функции безопасности, которые позволяют одновременно запускать несколько контейнеров в одном узле так, что они не влияют друг на друга. Как мы узнали, мы можем настроить хранилище данных и сетевую конфигурацию для изоляции контейнеров или совместного использования данных и подключения между определенными контейнерами.

Сравним это с использованием виртуальных машин.

Схема, на которой показан физический узел с несколькими запущенными виртуальными машинами.

Предположим, что в физическом узле работают две виртуальные машины. У нас есть три приложения, которые требуется изолировать друг от друга. Мы решили развернуть первое приложение на vm1 и второй на VM2, чтобы разделить два приложения друг от друга. Если далее мы решаем установить третье приложение, то в соответствии с этой схемой потребуется установить еще одну виртуальную машину.

Переносимость приложений

Контейнеры выполняются практически везде: настольные компьютеры, физические серверы, виртуальные машины и в облаке. Эта совместимость среды выполнения упрощает перемещение контейнерных приложений между различными средами.

Так как контейнеры являются упрощенными, они не страдают от медленного запуска или завершения работы, таких как виртуальные машины. Этот аспект делает повторное развертывание и другие сценарии развертывания, такие как масштабирование вверх или вниз, плавно и быстро.

Доставка приложений

При использовании Docker единицей распространения приложений становится контейнер. Эта концепция гарантирует, что у нас есть стандартизованный формат контейнера как для разработчиков, так и для операционных групп. Наши разработчики могут сосредоточиться на разработке программного обеспечения, и группа операций может сосредоточиться на развертывании программного обеспечения и управлении ими.

После того как разработчики выпустят сборку приложения, контейнер можно использовать на каждом этапе системы развертывания. Контейнеры являются идеальными кандидатами для непрерывной интеграции и ускоряют время сборки до рабочей среды.

Управление средами размещения

Среда для приложения настраивается внутри контейнера. Благодаря этому команда эксплуатации может более гибко управлять средой приложения. Наша команда может отслеживать обновления ОС, применять исправления безопасности один раз и развертывать обновленный контейнер по мере необходимости.

Команда может также управлять тем, какие приложения следует установить, обновить или удалить, не затрагивая другие контейнеры. Каждый контейнер изолирован, и его ограничения ресурсов задаются отдельно от других контейнеров.

Облачные развертывания

Контейнеры Docker — это архитектура контейнеров по умолчанию, используемые службами контейнеризации Azure, и многие другие облачные платформы также поддерживают их.

Например, можно развернуть контейнеры Docker для Экземпляры контейнеров Azure, службы приложение Azure и Служба Azure Kubernetes. Каждый из этих вариантов предоставляет различные функции и возможности.

Например, служба "Экземпляры контейнеров Azure" позволяет сосредоточиться на проектировании и разработке приложений вместо управления инфраструктурой. При наличии большого количества контейнеров для оркестрации служба Azure Kubernetes позволяет легко развертывать крупномасштабные развертывания контейнеров и управлять ими.

Когда не следует использовать контейнеры Docker

Контейнеры Docker предоставляют множество преимуществ, но помните, что контейнеры могут не соответствовать всем вашим требованиям. Следует учитывать ряд аспектов.

Безопасность и виртуализация

Контейнеры обеспечивают определенную изоляцию. Однако они совместно используют одно ядро ОС узла, которое может стать объектом атаки.

Узлы Windows предоставляют дополнительную модель изоляции, на которой можно использовать специально созданную виртуальную машину для изоляции контейнера на уровне гипервизора. Этот режим называется режимом изоляции Hyper-V и добавляет еще один уровень безопасности между контейнерами и узлом контейнеров.

Мы также должны учитывать такие аспекты, как хранилище и сети, чтобы убедиться, что мы учитываем все аспекты безопасности. Например, все контейнеры используют сеть моста по умолчанию и могут получать доступ друг к другу через IP-адрес.

Не все приложения получают выгоду от контейнеризации. В таких случаях может потребоваться использовать виртуальную машину.

Мониторинг служб

Управление приложениями и контейнерами сложнее, чем традиционные развертывания виртуальных машин. Существуют функции ведения журнала, которые сообщают нам о состоянии запущенных контейнеров, но более подробные сведения о службах внутри контейнера труднее отслеживать.

Например, в Docker есть команда docker stats. Эта команда возвращает сведения для контейнера, например процент использования ЦП, процент использования памяти, операций ввода-вывода, записанных на диск, сетевых данных, отправленных и полученных, а также назначенных идентификаторов обработки. Эта информация полезна как немедленный поток данных; Однако агрегирование не выполняется, так как данные не хранятся. Мы должны установить стороннее программное обеспечение для значимого сбора данных в течение определенного периода времени.