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

Завершено

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

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

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

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

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

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

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

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

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

Diagram contrasting VM resource use versus Docker resource use.

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

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

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

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

Diagram that shows a physical host running multiple VMs.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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