ADG Оставить заявку
Блог Инфраструктура 4 мин чтения

Windows Server 2016 TP4: IIS в контейнере стартует за секунды

Microsoft выпустила TP4 с поддержкой Windows-контейнеров. Подняли IIS в контейнере - стартует за секунды. Для клиентов с ASP.NET-легаси это неожиданно интересный поворот.

Контекст момента

Microsoft объявляет поддержку Windows-контейнеров в Windows Server 2016 TP4 - IIS и .NET-приложения запускаются в изолированных контейнерах без Linux

Microsoft выпустила Technical Preview 4 Windows Server 2016, и главное изменение - Windows-контейнеры перестали быть обещанием на слайдах. В TP4 это работающая фича: Docker-клиент подключается к Windows-хосту и запускает контейнеры с Windows внутри. Не Wine, не кросс-компиляция - настоящие Windows-процессы в изоляции.

Когда мы смотрели на TP2 в июле, контейнеры были анонсированы, но пощупать нормально было нельзя. В TP4 Microsoft сделала достаточно, чтобы провести осмысленный тест.

Откуда вообще интерес

У нас немало клиентов с ASP.NET-приложениями на Windows Server 2008/2012. Это не плохой код и не плохие команды - просто так сложилось исторически, и переписывать ради переписывания никто не будет. Когда мы смотрели на контейнеры для таких проектов, единственный ответ был: «переходите на ASP.NET 5 и Linux». Это или большой рефакторинг, или вообще другое приложение.

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

Это было достаточным поводом потратить день на стенд.

Как устроено

В Windows Server 2016 Microsoft реализовала два режима изоляции:

  • Windows Server Containers - аналог Linux-контейнеров: общее ядро хоста, изоляция через пространства имён. Быстро, малый overhead, но меньше изоляции.
  • Hyper-V Containers - каждый контейнер получает собственный лёгкий гипервизор и своё ядро. Изоляция как у полноценной ВМ, но старт быстрее и образ тот же самый.

Переключение между режимами - параметр при запуске контейнера, не разные инструменты. Один и тот же образ можно запустить как в Server Container, так и в Hyper-V Container.

Docker-клиент работает стандартный. Microsoft портировала Docker Engine на Windows - теперь docker run, docker build, docker pull выполняются прямо на Windows-хосте без виртуалки с Linux.

Что проверяли

Взяли TP4 в Hyper-V, настроили роль контейнерного хоста через PowerShell, поставили Docker. Microsoft заранее опубликовала базовый образ microsoft/windowsservercore - это Server Core в виде контейнерного образа. Несколько гигабайт, зато полноценная база под .NET и IIS.

Первый тест - IIS в контейнере:

docker run -d -p 80:80 microsoft/iis

Контейнер запустился. IIS поднялся внутри и ответил на запрос с хоста. Время от docker run до первого HTTP-ответа - несколько секунд. Не минут, секунд.

Для сравнения: виртуальная машина с Server Core и IIS на тех же ресурсах стартует несколько минут. Это принципиальная разница не в скорости деплоя - это разница в том, что такое «перезапустить приложение».

Второй тест - собственный образ. Взяли простое ASP.NET-приложение на .NET 4.5, написали Dockerfile:

FROM microsoft/windowsservercore
RUN powershell -Command Add-WindowsFeature Web-Server
COPY ./app C:/inetpub/wwwroot/app

docker build отработал. Образ собрался. Контейнер запустился, приложение ответило. Это работает.

Где шероховато

Без ложки дёгтя не обошлось.

Размер образов. microsoft/windowsservercore весит несколько гигабайт. Linux-образы обычно начинаются с десятков мегабайт. Docker pull занимает существенное время, и хранение нескольких версий образов требует дискового пространства в других порядках.

Только Windows-хост. Windows-контейнеры запускаются только на Windows Server 2016. Docker на Linux их не запустит. Это очевидно, но означает что смешанные кластеры из Linux и Windows нод для Windows-контейнеров не работают - нужны выделенные Windows-хосты.

Оркестрация пока в воздухе. Docker Swarm Windows-контейнеры формально поддерживает, но мы до этого в тесте не дошли. Kubernetes поддержки Windows-нод в TP4 нет вообще. Это значит что для продакшна с оркестрацией вопрос остаётся открытым.

Nano Server и IIS не дружат. Nano Server - самый лёгкий вариант хостовой ОС, но IIS на нём не поддерживается. Под IIS-контейнеры нужен полный windowsservercore. Nano Server годится для других ролей - например, ASP.NET 5 или простые сервисы без IIS.

Что это значит практически

Мы параллельно работаем с Docker Swarm в production для Linux-сервисов. Windows-контейнеры - пока отдельная история с другим инструментарием и другим жизненным циклом.

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

Это не серебряная пуля. Производительность, оркестрация, размер образов - всё это требует проработки под конкретный проект. Но сам факт что IIS в контейнере запускается за секунды и отвечает на запросы - это уже не слайд с roadmap.

TP4 - всё ещё Technical Preview, в продакшн его никто не потащит. Но для того чтобы начать разговор с клиентом о контейнеризации ASP.NET-легаси - хватает.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.