Почему вам стоит использовать Docker и контейнеры

В книге под названием « Прибивая желе к дереву» , опубликованной в 1981 году,  программное обеспечение описывается как «туманное и сложное для понимания». Так было в 1981 году, и не менее верно почти четыре десятилетия спустя. Программное обеспечение, будь то приложение, которое вы купили или созданное вами, по-прежнему сложно развертывать, трудно управлять и трудно запускать.

Контейнеры Docker позволяют получить доступ к программному обеспечению. Вы можете использовать Docker, чтобы обернуть приложение таким образом, чтобы проблемы его развертывания и времени выполнения - как выставить его в сети, как управлять его использованием хранилища, памяти и ввода-вывода, как управлять разрешениями доступа - решались вне самого приложения и согласованно для всех «контейнерных» приложений. Вы можете запустить свой контейнер Docker на любом совместимом с ОС хосте (Linux или Windows), на котором установлена ​​среда выполнения Docker.

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

В этой статье я исследую, как контейнеры Docker упрощают создание и развертывание программного обеспечения - контейнеры проблем решают, как они их решают, когда они являются правильным ответом на проблему, а когда нет.

До контейнеров Docker

Уже много лет корпоративное программное обеспечение обычно развертывается либо на «голом железе» (т. Е. Устанавливается в операционной системе, которая имеет полный контроль над базовым оборудованием), либо на виртуальной машине (т. Е. Устанавливается в операционной системе, которая совместно использует базовое оборудование. с другими «гостевыми» операционными системами). Естественно, установка на «голое железо» затрудняла перемещение и обновление программного обеспечения - два ограничения, из-за которых ИТ-специалистам было сложно быстро реагировать на изменения в потребностях бизнеса.

Затем пришла виртуализация. Платформы виртуализации (также известные как «гипервизоры») позволяли нескольким виртуальным машинам совместно использовать одну физическую систему, причем каждая виртуальная машина имитировала поведение всей системы, в комплекте со своей собственной операционной системой, хранилищем и вводом-выводом изолированно. . Теперь ИТ-специалисты могут более эффективно реагировать на изменения в бизнес-требованиях, поскольку виртуальные машины можно клонировать, копировать, переносить и запускать или отключать для удовлетворения спроса или экономии ресурсов.

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

Но у виртуальных машин все еще есть свои проблемы. Виртуальные машины большие (гигабайты), на каждой из которых установлена ​​полноценная операционная система. Только определенное количество виртуализированных приложений может быть объединено в одну систему. Подготовка виртуальной машины по-прежнему занимает много времени. Наконец, переносимость виртуальных машин ограничена. По прошествии определенного времени виртуальные машины не могут обеспечить скорость, маневренность и экономию, которые требуются быстро развивающимся компаниям.

Преимущества контейнера Docker

Контейнеры работают примерно так же, как виртуальные машины, но гораздо более конкретным и детализированным образом. Они изолируют отдельное приложение и его зависимости - все внешние программные библиотеки, необходимые приложению для запуска - как от базовой операционной системы, так и от других контейнеров. Все контейнерные приложения используют одну общую операционную систему (Linux или Windows), но они отделены друг от друга и от системы в целом.

Преимущества контейнеров Docker проявляются во многих местах. Вот некоторые из основных преимуществ Docker и контейнеров:

Docker позволяет более эффективно использовать системные ресурсы

Экземпляры контейнерных приложений используют гораздо меньше памяти, чем виртуальные машины, они запускаются и останавливаются быстрее, и их можно гораздо плотнее упаковать на своем хост-оборудовании. Все это означает меньше затрат на ИТ.

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

Docker ускоряет циклы доставки программного обеспечения

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

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

Docker обеспечивает переносимость приложений

Имеет значение, где вы запускаете корпоративное приложение - за брандмауэром, чтобы все было под рукой и в безопасности; или в публичном облаке для облегчения публичного доступа и высокой эластичности ресурсов. Поскольку контейнеры Docker инкапсулируют все, что необходимо приложению для запуска (и только эти вещи), они позволяют легко перемещать приложения между средами. Любой хост с установленной средой выполнения Docker - будь то ноутбук разработчика или экземпляр общедоступного облака - может запускать контейнер Docker.

Докер блестит для архитектуры микросервисов

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

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

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

Проблемы, которые не решают контейнеры Docker

Первое, что нужно помнить о контейнерах, - это тот же совет, который применим к любой программной технологии: это не серебряная пуля. Сами по себе контейнеры Docker не могут решить все проблемы. В частности:

Докер не исправит ваши проблемы с безопасностью

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

Docker не превращает приложения волшебным образом в микросервисы

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

Поместите монолитное приложение старой школы или приложение в стиле SOA в контейнер, и вы получите, ну, в общем, старое приложение в контейнере. Это не делает его более полезным для вашей работы; во всяком случае, это может сделать его менее полезным. 

Докер не заменяет виртуальные машины

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

Кейс для контейнеров Docker

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