Контейнеры в Windows Server 2016
Контейнер - это изолированная среда, в которой вы можете запускать приложение, не опасаясь изменений в ранее установленных приложениях или конфигурации.
В этой статье поговорим о новой технологии Windows Server 2016, которая называется контейнерами. Контейнеры бывают двух типов:
- Контейнеры Windows Server
- Контейнеры Hyper-V
В этой статье мы объясняем, что такое контейнер и почему он важен.
Содержание:
Что такое контейнер
Контейнер, в своей простейшей форме, является точно тем чем и называется - контейнером. Это изолированная среда, в которой вы можете запускать приложение, не опасаясь изменений в ранее установленных приложениях или конфигурации.
Контейнеры совместно используют ключевые компоненты (ядро, системные драйверы и т. д.), что сокращают время запуска и обеспечивают большую компактность, чем вы можете добиться с помощью виртуальной машины. На рисунке ниже показана аннотация контейнера.
Как показано на иллюстрации, ОС хоста может обрабатывать множество контейнеров и при совместном использовании ключевых компонентов ОС, таких как ядро, полностью изолировать их.
Что интересно в контейнере - это само приложение. Приложение может иметь различные требуемые для выполнения зависимости. Эти зависимости существуют только внутри самого контейнера. Это означает, если с приложением A и его двоичными файлами происходит что-то плохое, это не повлияет на приложение B и двоичные файлы, от которых оно зависит.
Например, в большинстве сред, если вы удаляете реестр из приложения A, последствия катастрофичны как для приложения A, так и для приложения B. Однако с контейнерами, приложение A и приложение B автономные и изменения в реестре для приложения A не влияет на приложение B.
Поскольку все двоичные файлы и зависимости размещены внутри контейнера, приложение, запущенное в контейнере, полностью переносимое. По сути, это означает, что вы можете развернуть контейнер на любом хосте, на котором запущено программное обеспечение диспетчера контейнеров, и оно будет запускаться и работать без каких-либо изменений.
Например, разработчик может приступить к разработке своего приложения и используя выпуск Windows 10 Anniversary Edition, развернуть его в контейнере Hyper-V. Когда оно готово к запуску в производство, его можно запустить на Windows Server 2016, включая Nano Server, в публичном, частном или гибридном облаке.
Контейнеры построены на слоях. Первый слой является базовым. Это образ ОС, на котором будут построены все остальные слои. Этот образ хранится в репозитории образов, чтобы вы могли при необходимости ссылаться на него.
Следующий слой (а иногда и последний уровень) - это уровень фреймворка, который может быть разделен между всеми вашими приложениями.
Например, если ваш базовый уровень - Windows Server Core, уровень фреймворка может быть .NET Framework и Internet Information Services (IIS). Второй слой также может быть сохранён как образ, который при вызове также описывает свою зависимость от базового уровня Windows Server Core.
И наконец уровень приложения, где хранится само приложение, со ссылками на уровень фреймворка и, в свою очередь, базовый слой.
Базовый слой и слой приложения в любое время могут ссылаться на любой другой создаваемый вами контейнер приложения. Каждый слой считается доступным только для чтения, за исключением верхнего слоя «образ», который вы развёртываете.
Например, если развернуть контейнер, который зависит только от образа Windows Server Core, этот слой Windows Server Core является верхним слоем контейнера и помещается в песочнице, где хранит все, внесённые во время выполнения, записи и изменения.
Затем, для последующего повторного использования, вы можете сохранить сделанные изменения, как другой образ. То же самое относится и к выполнению развёртывания слоя образа фреймворка. Этот слой будет иметь свою собственную песочницу, и если вы развернёте в ней приложение, то затем сможете его сохранить как многоразовый образ.
В принципе, при развёртывании контейнера на хосте, хост сам определяет, имеет ли контейнер базовый слой. Если его нет, то базовый слой будет получен из репозитория образов.
Далее он повторит этот процесс для слоя фреймворка и затем создаст контейнер приложения, которое вы первоначально пытались развернуть. Затем, если вы захотите создать ещё один контейнер с теми же зависимостями, вы просто выполните команду для создания нового контейнера приложений, и он создастся почти сразу, так как все зависимости уже установлены.
Если у вас есть, зависящий от различных приложений слоя фреймворк, контейнер приложения, как оригинальный базовый слой Windows Server Core, вы можете просто вытащить другой слой приложения фреймворк из хранилища образов и запустить новый контейнер приложения.
Зачем использовать контейнеры
Контейнеры предоставляют некоторые явные преимущества над традиционной моделью развёртывания приложений в виртуальной машине или на физическом компьютере.
Первое преимущество связано с разработкой. Общая боль всех разработчиков, при создании приложений, заключается в их перемещении из среды разработки, в среду тестирования, а затем в производство.
Разработчики тратят много времени и усилий на проверку зависимостей приложения, и его перемещение между средами. Однако, если приложение развёртывается в контейнере, этот контейнер можно перемещать между средами, так как он изолирован и все двоичные файлы находятся в пределах самого контейнера.
Ещё одна причина для использования контейнеров - достижение более высокого, по сравнению с развёртыванием приложения на виртуальной машине, масштабирования. Для достижения различных сред разработки, тестирования и производства, в модели VM, вам нужно по крайней мере три виртуальные машины; в модели контейнера нужен только один контейнер. В одной, управляемой менеджером контейнеров, ВМ можно запустить три контейнера, имитирующих среду разработки, тестирования и производства. С контейнерами, для запуска вашей среды, вам нужно меньше VM и вы можете достичь значительного увеличения масштабирования в облачных средах.
А также контейнеры позволяют быстрое развёртывание и функционирование приложений.
В отличие от VM, контейнеры не имеют базовой ОС, как таковой. Подумайте о развёртывании. Если вы хотите создать новое приложение или масштабировать существующее приложение, просто загрузите новый контейнер, операционная система уже на месте.
Это означает, что время, затрачиваемое на развёртывание или масштабирование контейнера, значительно короче, чем на виртуальной машине, потому что вы никогда не дожидаетесь начала работы ОС.