Docker и контейнеры (часть 4) — реализация контейнеров Windows Server

Опубликовано: 18 Апреля, 2023

  • Докер и контейнеры (Часть 6)

В предыдущей статье этой серии были рассмотрены основы реализации виртуализации контейнеров в готовящейся к выпуску операционной системе Windows Server 2016. Как мы видели в предыдущей статье, в Windows Server 2016 появятся две «разновидности» технологии контейнеров. Эти две разновидности:

  • Контейнеры Windows Server
  • Контейнеры Hyper-V

Теперь, когда у вас есть общее представление о различиях (и сходствах) между этими двумя подходами к контейнеризации в Windows Server 2016, давайте сосредоточимся конкретно на первом подходе (контейнеры Windows Server) и посмотрим, как вы можете реализовать его в Windows Server 2016. Предварительный выпуск Technical Preview 4 (TP4) новой платформы.

Хотя мы можем более легко создавать контейнеры с помощью Docker Engine, который включен в Windows Server 2016 TP4, в конечном итоге полезнее узнать, как вы можете сделать это с помощью Windows PowerShell, а не с помощью набора инструментов Docker. Это объясняется тем, что большинство администраторов Windows Server уже в какой-то степени знакомы с PowerShell и имеют хотя бы некоторый опыт написания сценариев PowerShell для автоматизации общих задач администрирования в своей среде. В результате в этой статье основное внимание уделяется тому, как можно использовать PowerShell для создания нового контейнера с помощью контейнеров Windows Server.

Кроме того, мы собираемся использовать Microsoft Azure для этого пошагового руководства, поскольку на момент написания статьи Azure включает базовый образ для Windows Server 2016 TP4 со встроенной поддержкой контейнеров Windows. Это не только позволит вам научиться создавать контейнеры с помощью контейнеров Windows Server, но также даст вам возможность узнать о портале Azure.

Как ИТ-специалист я нахожу все больше и больше способов использовать Azure для создания и тестирования демонстраций вместо того, чтобы выделять оборудование из ограниченной доступности моей собственной локальной лабораторной среды. А поскольку Microsoft предлагает бесплатную пробную подписку сроком на один месяц, которая предоставляет вам 200 долларов США на кредитах Azure, которые вы можете потратить на любые службы Azure, которые хотите протестировать, любой может попробовать выполнить действия, описанные в этом пошаговом руководстве, даже если у них нет правильная лабораторная установка дома или на работе. Чтобы подписаться на бесплатную месячную пробную версию Azure, перейдите по ссылке https://azure.microsoft.com/en-us/pricing/free-trial/.

Создание узла контейнера в Azure

Начните с входа на портал Azure по адресу https://portal.azure.com и выберите параметр «Создать» в столбце меню слева. В Marketplace выберите Virtual Machines, а затем в разделе Featured Apps выберите Windows Server 2016 Core с Tech Preview 4, как показано здесь:

Рис. 1. Шаг 1 создания узла контейнера в Azure.

Если TP4 недоступен (его пробный период истекает 15 июля 2016 г.), вы сможете выбрать RTM-версию Windows Server 2016 Core из списка рекомендуемых приложений. Также обратите внимание, что список рекомендуемых приложений может различаться в зависимости от вашей пробной подписки — это пошаговое руководство выполняется с использованием Visual Studio Premium с подпиской MSDN, которая предоставляет вам до 150 долларов США в месяц в виде бесплатных кредитов Azure на весь срок действия вашей подписки. Подписки MSDN — отличная идея, если вы ИТ-специалист или разработчик. Вы можете узнать больше о том, как подписаться на MSDN.

Выбрав Windows Server 2016 Core с Containers Tech Preview, оставьте диспетчер ресурсов выбранным в качестве модели развертывания (см. нижнюю часть следующего рисунка) и нажмите «Создать», чтобы создать новую виртуальную машину (ВМ), которую вы будете использовать в качестве модели развертывания. хост вашего контейнера:

Рис. 2. Шаг 2 создания узла контейнера в Azure.

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

На странице Basics мастера создания виртуальной машины мы укажем TESTCON в качестве имени для нашего нового узла контейнера виртуальной машины. Мы также укажем имя пользователя, пароль и имя группы ресурсов для нашей новой виртуальной машины:

Рис. 3. Шаг 3 создания узла контейнера в Azure.

На странице «Размер» мы выберем подходящий вариант размера для новой виртуальной машины, как показано ниже:

Рис. 4. Шаг 4 создания узла контейнера в Azure.

На странице «Настройки» все должно быть в порядке с настройками по умолчанию, поэтому просто проверьте настройки и нажмите «ОК» внизу:

Рис. 5. Шаг 5 создания узла контейнера в Azure.

На странице «Сводка» показано, достаточно ли вы указали информации для создания новой виртуальной машины. Мы видим, что проверка прошла, поэтому просто нажмите OK ниже:

Рис. 6. Шаг 6 создания узла контейнера в Azure.

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

Рис. 7. Шаг 7 создания узла контейнера в Azure.

Обратите внимание, что значок оповещения на приведенном выше снимке экрана имеет число над ним. Это указывает на то, что вам нужно прочитать предупреждающее сообщение. Если щелкнуть значок Предупреждение, должно появиться сообщение о том, что развертывание началось.

Рис. 8. Шаг 8 создания узла контейнера в Azure.

Если вы выберете опцию «Виртуальные машины» (не «классическую») в левом меню, вы также должны увидеть, что ваша новая виртуальная машина создается в данный момент:

Рис. 9. Шаг 9 создания узла контейнера в Azure.

Как только новая виртуальная машина будет создана, она будет отображаться как «Работает» в разделе «Статус» в консоли:

Рис. 10. Узел контейнера создан в Azure.

Теперь, когда наш узел контейнера виртуальных машин запущен в Azure, давайте подключимся к нему с нашего локального компьютера. Для этого щелкните правой кнопкой мыши новую виртуальную машину и выберите «Подключиться», как показано здесь:

Рисунок 11: Подключение к хосту контейнера.

Вы увидите панель уведомлений в нижней части экрана с вопросом, хотите ли вы открыть или сохранить TESTCON.rdp на локальном компьютере. Сохраните его на рабочий стол или в другое удобное место:

Рисунок 12: Загрузка файла.rdp для подключения к хосту контейнера.

Теперь дважды щелкните файл TESTCON.rdp, чтобы привычным образом запустить подключение к удаленному рабочему столу. После подключения к узлу контейнера виртуальной машины, работающему в Azure, вы должны увидеть пустое черное окно с одним окном командной строки (CMD.exe):

Рис. 13. На узле контейнера установлено ядро Windows Server.

Помните, что вы подключаетесь к серверному ядру, поэтому на хосте контейнера нет графического интерфейса!

Создание образа контейнера

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

Давайте воспользуемся PowerShell для создания образа контейнера именно для этой цели, то есть для развертывания новых контейнеров для запуска веб-приложений. В окне командной строки введите «powershell», чтобы запустить оболочку Windows PowerShell:

Рисунок 14: Шаг 1 создания образа контейнера.

Давайте начнем с использования командлета Get-ContainerImage, чтобы узнать, присутствуют ли какие-либо существующие образы контейнеров на нашем узле контейнеров:

Рисунок 15: Шаг 2 создания образа контейнера.

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

Рисунок 16: Шаг 3 создания образа контейнера.

Используйте командлет New-Container для создания нового контейнера с именем Container01 следующим образом:

Изображение 14734
Рисунок 17: Шаг 4 создания образа контейнера.

Посмотрим, запущен новый контейнер или нет:

Изображение 14735
Рисунок 18: Шаг 5 создания образа контейнера.

Нам нужно, чтобы наш новый контейнер работал, поэтому давайте воспользуемся командлетом Start-Container следующим образом:

Изображение 14736
Рисунок 19: Шаг 6 создания образа контейнера.

Еще раз проверьте состояние контейнера:

Изображение 14737
Рисунок 20: Шаг 7 создания образа контейнера.

Теперь мы хотим настроить наш новый контейнер, добавив к нему роль веб-сервера, чтобы мы могли запускать некоторые веб-приложения на нашем хосте контейнера. Для этого нам нужно запустить сеанс PowerShell из нашего нового контейнера. Мы можем сделать это с помощью командлета Enter-PSSession следующим образом:

Изображение 14738
Рисунок 21: Шаг 8 создания образа контейнера.

Теперь мы можем использовать командлет Install-WindowsFeature для установки роли веб-сервера в наш контейнер:

Изображение 14739
Рисунок 22: Шаг 9 создания образа контейнера.

На данный момент мы настроили наш новый контейнер Container01, добавив в него роль веб-сервера. Теперь нам нужно остановить контейнер и захватить из него образ контейнера. Сделав это, мы можем удалить Container01, так как он нам больше не понадобится. Серия команд PowerShell, показанная ниже, выполняет это и оставляет нам новый образ контейнера с именем IISContainer:

Изображение 14740
Рис. 23. Шаг 10 создания образа контейнера.

Создание контейнера с использованием образа контейнера

На данный момент мы готовы создать новый «рабочий» контейнер, т. е. тот, который мы можем использовать для запуска контейнерного веб-приложения на нашем узле контейнера виртуальной машины в Azure. Для этого мы просто используем командлет New-Container еще раз, только на этот раз мы указываем IISContainer в качестве имени образа контейнера, который должен использоваться для создания нашего нового контейнера. После того, как мы создали наш новый контейнер, который мы назовем WebServer01, мы можем запустить его и проверить, работает ли он следующим образом:

Изображение 14741
Рисунок 24: Создание нового контейнера из образа контейнера.

Прежде чем мы сможем получить доступ к нашему новому контейнерному веб-серверу, работающему в Azure, нам нужно будет выполнить еще несколько шагов. Это связано с тем, что виртуальный коммутатор для узла контейнера виртуальной машины по умолчанию использует преобразование сетевых адресов (NAT), поэтому мы не можем просто ввести IP-адрес сетевого интерфейса контейнера в веб-браузер нашего локального компьютера и увидеть отображаемую веб-страницу IIS по умолчанию.. На самом деле, какой IP-адрес сетевого интерфейса нашего нового контейнера? Мы можем использовать PowerShell, чтобы найти это:

Изображение 14742
Рисунок 25: Отображение внутреннего (частного) IP-адреса контейнера.

Теперь, если бы мы развернули наш контейнер на хосте, используя классический метод, а не диспетчер ресурсов, мы могли бы просто создать статическое сопоставление портов в NAT для TCP-порта 80, а затем настроить входящее правило брандмауэра, чтобы разрешить доступ к TCP-порту 80 на нашем узел контейнера в Azure из внешнего мира. Но мы выбрали здесь Resource Manager в качестве метода развертывания, а это означает, что для выполнения всего этого нам потребуется использовать группу безопасности сети (NSG). Коллега из Microsoft, с которым я работал над электронной книгой System Center для Microsoft, напишет для нас кое-что о NSG, после чего мы продолжим остальную часть этой демонстрации.

  • Docker и контейнеры (часть 3) — контейнеры и Windows Server
  • Докер и контейнеры (Часть 6)