Windows и контейнеры

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016

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

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

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

Экосистема контейнеров Майкрософт

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

  • Запускайте контейнеры под управлением Windows или Linux в среде Windows 10 для разработки и тестирования с помощью Docker Desktop, который использует встроенные функции контейнеров Windows. Можно также выполнять контейнеры с помощью встроенных подсистем Windows Server.

  • Разрабатывайте, тестируйте, публикуйте и развертывайте контейнеры на основе Windows используя комплексную поддержку контейнеров в Visual Studio и Visual Studio Code, которые включают поддержку Docker, Docker Compose, Kubernetes, Helm и других полезных технологий.

  • Публикуйте свои приложения как образы контейнеров, сделав их общедоступными на DockerHub для использования другими пользователями или в частном реестре контейнеров Azure для собственной разработки и развертывания вашей организации, отправляя и получая их непосредственно в Visual Studio и Visual Studio Code.

  • Развертывание контейнеров в Azure или других облаках:

    • Извлекайте свое приложение (образ контейнера) из реестра контейнеров, например Реестра контейнеров Azure, а затем развертывайте его и управляйте им с помощью оркестратора, например Azure Kubernetes Service (AKS) или Azure Service Fabric.
    • Служба Azure Kubernetes развертывает контейнеры на виртуальных машинах Azure и управляет ими при любом масштабе, будь то десятки контейнеров, сотни или даже тысячи. Виртуальные машины Azure запускают настроенный образ Windows Server (при развертывании приложения на основе Windows) или настраиваемый образ Ubuntu Linux (при развертывании приложения на основе Linux).
  • Развертывайте контейнеры локально с помощью AKS в Azure Stack HCI, Azure Stack с обработчиком AKS или Azure Stack с OpenShift. Вы также можете самостоятельно настроить Kubernetes в Windows Server (см. Kubernetes в Windows); мы работаем над поддержкой запуска контейнеров Windows на платформе контейнеров RedHat OpenShift.

Как работают контейнеры

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

Схема архитектуры, показывающая, как контейнеры работают поверх ядра

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

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

Контейнеры и виртуальные машины

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

Схема архитектуры, показывающая, работу полноценной операционной системы в ВМ наряду с операционной системой сервера

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

Дополнительные сведения о сходствах и различиях этих взаимно дополняющих технологий см. в статье Контейнеры и виртуальные машины.

Образы контейнеров

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

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

  • Windows — содержит полный набор API-интерфейсов Windows и системных служб (за исключением ролей сервера).
  • Windows Server — содержит полный набор API Windows и системных служб.
  • Windows Server Core — образ меньшего размера, который содержит подмножество API-интерфейсов Windows Server (.NET Framework полностью). Он также включает в себя большинство серверных ролей, за исключением роли сервера факсов.
  • Nano Server — самый маленький образ Windows Server с поддержкой интерфейсов API .NET Core и некоторых ролей сервера.

Как упоминалось ранее, образы контейнеров образованы рядом слоев. Каждый слой содержит набор файлов, которые при наложении вместе составляют образ контейнера. Из-за многоуровневой природы контейнеров для создания контейнера Windows не нужно всегда ориентироваться на базовый образ. Вместо этого можно выбрать другой образ, который уже содержит нужную платформу. Например, команда .NET публикует образ .NET Core, который содержит среду выполнения .NET Core. Таким образом пользователи избавляются от необходимости дублировать процесс установки .NET Core, а также получают возможность повторно использовать слои этого образа контейнера. Образ .NET Core собран на основе образа Nano Server.

Дополнительные сведения см. в разделе Базовые образы контейнеров.

Пользователи контейнеров

Контейнеры для разработчиков

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

Контейнеры являются переносимыми и универсальными, позволяют запускать приложения, написанные на любом языке, и совместимы с любыми компьютерами под управлением Windows 10 версии 1607 или более поздней, или Windows Server 2016 или более поздней версии. Разработчики могут создать и протестировать контейнер локально на своем ноутбуке или настольном компьютере, а затем развернуть этот образ контейнера в частном или общедоступном облаке или у поставщика услуг. Адаптивность контейнеров позволяет использовать современные модели разработки приложений в крупномасштабных, виртуализированных и облачных средах. Наиболее важное преимущество для разработчиков — возможность изолировать среду таким образом, чтобы приложение всегда получало указанную вами версию библиотек, избегая конфликтов с зависимостями.

Контейнеры для ИТ-специалистов

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

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

Оркестрация контейнеров

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

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

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

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

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

Попробуйте контейнеры в Windows

Чтобы приступить к работе с контейнерами в Windows Server или Windows 10, см. следующие сведения:

Дополнительные сведения о том, какие службы Azure доступны для вашего сценария, см. в статьях Службы контейнеров Azure и Выбор служб Azure, которые будут использоваться для размещения приложений.

Ресурсы

Ознакомьтесь со следующими ресурсами по использованию контейнеров Windows Server: