Почему контейнеры важны?

Завершено

В этом уроке вы будете следовать команде Tailspin, как они обсуждают некоторые необходимые улучшения в процессе DevOps. В этом сценарии команда использует Docker для контейнеризации своего веб-приложения. Затем команда обновляет конвейер CI/CD для поддержки.

Это было несколько грубых недель

Последние несколько недель были сложным временем в Tailspin. Команды борются за крайние сроки по ряду причин, и есть озабоченность по поводу производительности по всей компании. Энди призвал некоторых ключевых заинтересованных лиц из команды веб-сайта Space Game вместе собрать отзывы о предстоящей презентации для управления.

Энди: Спасибо за остановку. Я знаю, что последние несколько недель были грубыми для всех, но у меня есть некоторые хорошие новости. Управление держит свой сайт завтра, чтобы услышать предложения по изменениям, которые мы можем сделать для повышения производительности. Они пригласили меня представить примеры наших успехов DevOps и сказали, что они также открыты для любых других идей, которые мы могли бы иметь. Я надеялся, что мы могли бы использовать эту встречу в качестве возможности для мозгового штурма. Кто хочет пойти первым?

Все смотрят на Амиту. В последнее время она была особенно расстроенной.

Амита: Я пойду сначала. Как вы знаете, я тестируем для нескольких команд, и это может быть сложно, потому что каждая команда использует свой собственный стек технологий. Даже если они используют те же базовые платформы, например .NET или Java, они часто предназначены для разных версий. Я чувствую, что иногда я иногда тратю половину своего дня, просто получая тестовые среды в состоянии, где они могут запускать код, который мне нужно тестировать. Если что-то не работает, трудно определить, есть ли ошибка в коде или если я случайно настроили версию 4.2.3 вместо 4.3.2.

Энди пишет "Проблемы управления версиями зависимостей для QA" на доске.

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

Энди пишет "Накладные расходы из-за решения изоляции приложений с виртуальными машинами" на доске.

Мара: У меня есть что-то с стороны развития. Несколько недель назад я разрабатывала систему однорангового обновления, и на моей машине все работало. Но когда я передал его для развертывания, он не работал в рабочей среде. Я забыл, что мне нужно было открыть порт 315 в рамках службы. Это заняло нас в течение дня устранения неполадок, чтобы понять, что происходит. Когда мы открыли это в рабочей среде, все работало должным образом.

Энди пишет "Несоответствия конфигурации между этапами развертывания" на доске.

Энди: Я думаю, что это разговор хороший старт. Позвольте мне исследовать эти вопросы и посмотреть, что я могу придумать. Вот опасения, которые я слышал:

  • Проблемы управления версиями зависимостей для QA
  • Издержки из-за решения изоляции приложений с помощью виртуальных машин
  • Несоответствия конфигурации между этапами развертывания

Объединение всех элементов (в одном контейнере)

На следующее утро Энди вызывает собрание, чтобы представить новую идею команде.

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

Амита: Что такое контейнер? Это как ZIP-файл ?

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

Тим: Как это обрабатывает безопасность и изоляцию?

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

Амита: Это звучит отлично для рабочей среды, но решает ли она проблемы, с которыми мы сталкиваемся ранее в конвейере?

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

Мара: Насколько трудно разработать приложение контейнера? Нужно ли вносить значительные изменения в существующий код?

Энди: Контейнеры являются более технологией упаковки и развертывания. Они не влияют на базовое программное обеспечение, которое мы пишем. Мы можем просто указать нашим средствам создать контейнер Docker в конце сборки. Затем при отладке приложение выходит из этого локального контейнера вместо локального веб-сервера. На самом деле, такие инструменты, как Visual Studio, даже позволяют переключаться между средами отладки, такими как Docker и IIS Express, чтобы дать нам необходимую гибкость. Я на самом деле вил наш проект веб-сайта вчера вечером и преобразовал его в сборку как контейнер Docker для тестирования процесса. Мне нужно только добавить базовую конфигурацию контейнера; Мне не нужно изменять существующий код.

Мара: Это здорово знать. Мы можем даже обновить конвейер выпуска в Azure Pipelines из вилки, чтобы создать и развернуть версию Docker.

Энди: Ты читала мое мнение.

Что такое Docker?

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

Команда Tailspin выбрала контейнеры Docker для этого сценария, так как она соответствовала всем своим потребностям:

  • Проблемы управления версиями зависимостей для QA: приложения упаковываются в виде контейнеров, которые предоставляют правильные версии их зависимостей.

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

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

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

Проверьте свои знания

1.

Какой из следующих параметров не является хорошей причиной для использования Docker?

2.

Как похожи контейнеры и виртуальные машины?

3.

Сколько накладных расходов требуется перенос существующего приложения .NET Core для использования контейнера Docker?