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

Контейнеры — это технология упаковки и запуска приложений Windows и Linux в различных локальных средах и в облаке.Containers are a technology for packaging and running Windows and Linux applications across diverse environments on-premises and in the cloud. Контейнеры предоставляют нетребовательную к ресурсам изолированную среду, которая упрощает разработку, развертывание и управление приложениями.Containers provide a lightweight, isolated environment that makes apps easier to develop, deploy, and manage. Контейнеры быстро запускаются и останавливаются, что делает их идеальными для приложений, которые нужно быстро адаптировать в условиях изменяющегося спроса.Containers start and stop quickly, making them ideal for apps that need to rapidly adapt to changing demand. Упрощенная природа контейнеров также делает их полезным инструментом для повышения плотности и использования инфраструктуры.The lightweight nature of containers also make them a useful tool for increasing the density and utilization of your infrastructure.

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

Экосистема контейнеров МайкрософтThe Microsoft container ecosystem

Корпорация Майкрософт предоставляет ряд средств и платформ, помогающих разрабатывать и развертывать приложения в контейнерах.Microsoft provides a number of tools and platforms to help you develop and deploy apps in containers:

  • Запускайте контейнеры под управлением Windows или Linux в среде Windows 10 для разработки и тестирования с помощью Docker Desktop, который использует встроенные функции контейнеров Windows.Run Windows-based or Linux-based containers on Windows 10 for development and testing using Docker Desktop, which makes use of containers functionality built-in to Windows. Можно также выполнять контейнеры с помощью встроенных подсистем Windows Server.You can also run containers natively on Windows Server.

  • Разрабатывайте, тестируйте, публикуйте и развертывайте контейнеры на основе Windows используя комплексную поддержку контейнеров в Visual Studio и Visual Studio Code, которые включают поддержку Docker, Docker Compose, Kubernetes, Helm и других полезных технологий.Develop, test, publish, and deploy Windows-based containers using the powerful container support in Visual Studio and Visual Studio Code, which include support for Docker, Docker Compose, Kubernetes, Helm, and other useful technologies.

  • Публикуйте свои приложения как образы контейнеров, сделав их общедоступными на DockerHub для использования другими пользователями или в частном реестре контейнеров Azure для собственной разработки и развертывания вашей организации, отправляя и получая их непосредственно в Visual Studio и Visual Studio Code.Publish your apps as container images to the public DockerHub for others to use, or to a private Azure Container Registry for your org's own development and deployment, pushing and pulling directly from within Visual Studio and Visual Studio Code.

  • Развертывание контейнеров в Azure или других облаках:Deploy containers at scale on Azure or other clouds:

    • Извлекайте свое приложение (образ контейнера) из реестра контейнеров, например Реестра контейнеров Azure, а затем развертывайте его и управляйте им с помощью оркестратора, например Azure Kubernetes Service (AKS) или Azure Service Fabric.Pull your app (container image) from a container registry, such as the Azure Container Registry, and then deploy and manage it at scale using an orchestrator such as Azure Kubernetes Service (AKS) or Azure Service Fabric.
    • Служба Azure Kubernetes развертывает контейнеры на виртуальных машинах Azure и управляет ими при любом масштабе, будь то десятки контейнеров, сотни или даже тысячи.Azure Kubernetes Service deploys containers to Azure virtual machines and manages them at scale, whether that's dozens of containers, hundreds, or even thousands. Виртуальные машины Azure запускают настроенный образ Windows Server (при развертывании приложения на основе Windows) или настраиваемый образ Ubuntu Linux (при развертывании приложения на основе Linux).The Azure virtual machines run either a customized Windows Server image (if you're deploying a Windows-based app), or a customized Ubuntu Linux image (if you're deploying a Linux-based app).
  • Развертывайте контейнеры локально с помощью Azure Stack с обработчиком AKS (в предварительной версии с контейнерами Linux) или Azure Stack с OpenShift.Deploy containers on-premises by using Azure Stack with the AKS Engine (in preview with Linux containers) or Azure Stack with OpenShift. Вы также можете самостоятельно настроить Kubernetes в Windows Server (см. Kubernetes в Windows); мы работаем над поддержкой запуска контейнеров Windows на платформе контейнеров RedHat OpenShift.You can also set up Kubernetes yourself on Windows Server (see Kubernetes on Windows), and we're working on support for running Windows containers on RedHat OpenShift Container Platform as well.

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

Контейнер — это изолированный, нетребовательный к ресурсам приемник команд, предназначенный для запуска приложения в операционной системе сервера.A container is an isolated, lightweight silo for running an application on the host operating system. Контейнеры создаются на основе ядра операционной системы сервера (которое можно рассматривать как скрытые подсистемы операционной системы), как показано на этой схеме.Containers build on top of the host operating system's kernel (which can be thought of as the buried plumbing of the operating system), as shown in this diagram.

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

Хотя контейнер использует ядро операционной системы сервера, контейнер не получает неограниченный доступ к ядру.While a container shares the host operating system's kernel, the container doesn't get unfettered access to it. Вместо этого контейнер получает изолированное, а в некоторых случаях виртуализированное, представление системы.Instead, the container gets an isolated–and in some cases virtualized–view of the system. Например, контейнер может обращаться к виртуализированной версии файловой системы и реестра, но любые изменения затрагивают только контейнер и удаляются при его остановке.For example, a container can access a virtualized version of the file system and registry, but any changes affect only the container and are discarded when it stops. Чтобы сохранить данные, контейнер может подключить постоянное хранилище, например диск Azure или общую папку (в том числе файлы Azure).To save data, the container can mount persistent storage such as an Azure Disk or a file share (including Azure Files).

Контейнер собирается поверх ядра, но ядро не предоставляет все интерфейсы API и службы, необходимые для запуска приложения. Большинство из них предоставляются системными файлами (библиотеками), которые работают на уровне выше ядра в пользовательском режиме.A container builds on top of the kernel, but the kernel doesn't provide all of the APIs and services an app needs to run–most of these are provided by system files (libraries) that run above the kernel in user mode. Поскольку контейнер изолирован от среды пользовательского режима сервера, контейнеру требуется собственная копия этих системных файлов пользовательского режима, которые упаковываются в базовый образ.Because a container is isolated from the host's user mode environment, the container needs its own copy of these user mode system files, which are packaged into something known as a base image. Базовый образ выступает в качестве основного уровня, на котором собирается контейнер, предоставляя ему службы операционной системы, не предоставляемые ядром.The base image serves as the foundational layer upon which your container is built, providing it with operating system services not provided by the kernel. Но подробнее о контейнерах мы поговорим дальше.But we'll talk more about container images later.

Контейнеры и виртуальные машиныContainers vs. virtual machines

В отличие от контейнера, виртуальная машина (ВМ) работает под управлением полноценной операционной системы, включая ее собственное ядро, как показано на этой схеме.In contrast to a container, a virtual machine (VMs) runs a complete operating system–including its own kernel–as shown in this diagram.

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

Контейнеры и виртуальные машины имеют свои преимущества: на самом деле многие среды контейнеров используют виртуальные машины в качестве операционной системы сервера, а не работают непосредственно на оборудовании, в частности при работе с контейнерами в облаке.Containers and virtual machines each have their uses–in fact, many deployments of containers use virtual machines as the host operating system rather than running directly on the hardware, especially when running containers in the cloud.

Дополнительные сведения о сходствах и различиях этих взаимно дополняющих технологий см. в статье Контейнеры и виртуальные машины.For more details on the similarities and differences of these complementary technologies, see Containers vs. virtual machines.

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

Все контейнеры создаются из образов контейнеров.All containers are created from container images. Образы контейнеров представляют собой набор файлов, организованных в стек слоев, расположенных на локальном компьютере или в удаленном реестре контейнеров.Container images are a bundle of files organized into a stack of layers that reside on your local machine or in a remote container registry. Образ контейнера состоит из файлов операционной системы пользовательского режима, необходимых для поддержки приложения, вашего приложения, любых сред выполнения или зависимостей приложения, а также любого другого файла конфигурации, необходимого для правильной работы приложения.The container image consists of the user mode operating system files needed to support your app, your app, any runtimes or dependencies of your app, and any other miscellaneous configuration file your app needs to run properly.

Корпорация Майкрософт предлагает несколько образов (называемых основными образами), которые можно использовать в качестве отправной точки при создании собственного образа контейнера.Microsoft offers several images (called base images) that you can use as a starting point to build your own container image:

  • Windows — содержит полный набор API-интерфейсов Windows и системных служб (за исключением ролей сервера).Windows - contains the full set of Windows APIs and system services (minus server roles).
  • Windows Server Core — образ меньшего размера, который содержит подмножество API-интерфейсов Windows Server (.NET Framework полностью).Windows Server Core - a smaller image that contains a subset of the Windows Server APIs–namely the full .NET framework. Он также включает в себя большинство серверных ролей, за исключением роли сервера факсов.It also includes most server roles, though sadly to few, not Fax Server.
  • Nano Server — самый маленький образ Windows Server с поддержкой интерфейсов API .NET Core и некоторых ролей сервера.Nano Server - the smallest Windows Server image, with support for the .NET Core APIs and some server roles.
  • Windows 10 IoT Core — версия Windows, используемая производителями оборудования для небольших устройств Интернета вещей под управлением процессоров с архитектурой ARM или x86/x64.Windows 10 IoT Core - a version of Windows used by hardware manufacturers for small Internet of Things devices that run ARM or x86/x64 processors.

Как упоминалось ранее, образы контейнеров образованы рядом слоев.As mentioned earlier, container images are composed of a series of layers. Каждый слой содержит набор файлов, которые при наложении вместе составляют образ контейнера.Each layer contains a set of files that, when overlaid together, represent your container image. Из-за многоуровневой природы контейнеров для создания контейнера Windows не нужно всегда ориентироваться на базовый образ.Because of the layered nature of containers, you don't have to always target a base image to build a Windows container. Вместо этого можно выбрать другой образ, который уже содержит нужную платформу.Instead, you could target another image that already carries the framework you want. Например, команда .NET публикует образ .NET Core, который содержит среду выполнения .NET Core.For example, the .NET team publishes a .NET core image that carries the .NET core runtime. Таким образом пользователи избавляются от необходимости дублировать процесс установки .NET Core, а также получают возможность повторно использовать слои этого образа контейнера.It saves users from needing to duplicate the process of installing .NET core–instead they can reuse the layers of this container image. Образ .NET Core собран на основе образа Nano Server.The .NET core image itself is built based upon Nano Server.

Дополнительные сведения см. в разделе Базовые образы контейнеров.For more details, see Container Base Images.

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

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

Контейнеры помогают разработчикам быстрее создавать и поставлять высококачественные приложения.Containers help developers build and ship higher-quality apps, faster. С помощью контейнеров разработчики могут создавать образы контейнеров, которые одинаково развертываются в разных средах за считанные секунды.With containers, developers can create a container image that deploys in seconds, identically across environments. Контейнеры служат простым механизмом совместного использования кода в группах и позволяют обеспечить начальную загрузку среды разработки, не затрагивая файловую систему сервера.Containers act as an easy mechanism to share code across teams and to bootstrap a development environment without impacting your host filesystem.

Контейнеры являются переносимыми и универсальными, позволяют запускать приложения, написанные на любом языке, и совместимы с любыми компьютерами под управлением Windows 10 версии 1607 или более поздней, или Windows Server 2016 или более поздней версии.Containers are portable and versatile, can run apps written in any language, and they're compatible with any machine running Windows 10, version 1607 or later, or Windows Server 2016 or later. Разработчики могут создать и протестировать контейнер локально на своем ноутбуке или настольном компьютере, а затем развернуть этот образ контейнера в частном или общедоступном облаке или у поставщика услуг.Developers can create and test a container locally on their laptop or desktop, and then deploy that same container image to their company's private cloud, public cloud, or service provider. Адаптивность контейнеров позволяет использовать современные модели разработки приложений в крупномасштабных, виртуализированных и облачных средах.The natural agility of containers supports modern app development patterns in large-scale, virtualized cloud environments.

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

Контейнеры помогают администраторам создавать инфраструктуру, которую проще обновлять и обслуживать, а это позволяет более полно использовать аппаратные ресурсы.Containers help admins create infrastructure that's easier to update and maintain, and that more fully utilizes hardware resources. Благодаря использованию контейнеров рабочим группам по разработке и контролю качества, а также технологическому отделу доступны стандартизированные среды.IT professionals can use containers to provide standardized environments for their development, QA, and production teams. При использовании контейнеров системные администраторы не должны учитывать различия в установленных операционных системах и особенности базовых инфраструктур.By using containers, systems administrators abstract away differences in operating system installations and the underlying infrastructure.

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

Оркестрация является важнейшим элементом инфраструктуры при настройке среды на основе контейнеров.Orchestrators are a critical piece of infrastructure when setting up a container-based environment. Хотя несколькими контейнерами можно управлять вручную с помощью Docker и Windows, приложения часто используют пять, десять или даже сотни контейнеров, когда оркестрация уже неизбежна.While you can manage a few containers manually using Docker and Windows, apps often make use of five, ten, or even hundreds of containers, which is where orchestrators come in.

Оркестраторы контейнеров созданы для упрощения управления контейнерами при изменении масштаба и в рабочей среде.Container orchestrators were built to help manage containers at scale and in production. Оркестрация предоставляет следующие функциональные возможности:Orchestrators provide functionality for:

  • развертывание при любом масштабе;Deploying at scale
  • планирование рабочей нагрузки;Workload scheduling
  • наблюдение за работоспособностью;Health monitoring
  • отработка отказов при сбое сервера;Failing over when a node fails
  • увеличение или уменьшение масштаба;Scaling up or down
  • сеть;Networking
  • обнаружение служб;Service discovery
  • координирование обновления приложений;Coordinating app upgrades
  • единообразие узлов кластера.Cluster node affinity

Существует множество различных оркестраторов, которые можно использовать с контейнерами Windows. Ниже приведены варианты, предоставляемые корпорацией Майкрософт.There are many different orchestrators that you can use with Windows containers; here are the options Microsoft provides:

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

Чтобы приступить к работе с контейнерами в Windows Server или Windows 10, см. следующие сведения:To get started with containers on Windows Server or Windows 10, see the following:

Дополнительные сведения о том, какие службы Azure доступны для вашего сценария, см. в статьях Службы контейнеров Azure и Выбор служб Azure, которые будут использоваться для размещения приложений.For help deciding which Azure services are right for your scenario, see Azure container services and Choosing what Azure services to use to host your application.