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

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

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

Введение

Теперь, когда мы узнали об основах реализации виртуализации контейнеров в готовящейся к выпуску операционной системе Windows Server 2016 и изучили два «разновидности» технологии контейнеров, появившихся в Windows Server 2016, а именно контейнеры Windows Server и Hyper-V. Контейнеры, мы продолжим эту короткую серию статей, рассмотрев различные наборы инструментов и различные способы управления контейнерами, размещенными на узлах контейнеров Windows Server 2016. В этой серии статей мы продолжим использовать выпуск Technical Preview 4 (TP4) Windows Server 2016, поскольку на момент написания этой статьи вы можете бесплатно развернуть эту версию в Microsoft Azure, если у вас есть пробная подписка на Azure. или если у вас в настоящее время есть подписка MSDN. Мы также уделим особое внимание управлению контейнерами Windows Server, поскольку развертывание контейнеров Hyper-V в Microsoft Azure в настоящее время не поддерживается, и начнем с рассмотрения некоторых способов использования Windows PowerShell для управления контейнерами Windows Server.

Управление контейнерами Windows Server с помощью Windows PowerShell

В статье Docker and Containers (Part 4) — Implementing Windows Server Containers мы уже узнали, как можно использовать Windows PowerShell для выполнения различных задач с помощью Windows Server Containers. В частности, в статье части 4 показано, как вы можете использовать PowerShell для выполнения таких задач, как:

  • Просмотрите список существующих образов контейнеров на узле контейнеров, а также их состояние, обновление и родительский образ с помощью командлета Get-ContainerImage.
  • Создайте новый образ контейнера на узле с помощью командлета New-Container.
  • Запустите или остановите контейнер с помощью командлетов Start-Container или Stop-Container.

Но это только начало. Microsoft неуклонно расширяет поддержку PowerShell для работы с контейнерами Windows, начиная с более раннего выпуска TP3 для Windows Server 2012, и вы можете использовать командлет Get-Command с параметром -Module, как показано ниже, для отображения различных командлетов и функций PowerShell, которые в настоящее время доступно в модуле Containers для PowerShell в TP4:

Например, в статье части 4 мы создали и настроили образ контейнера специально для развертывания контейнеров, которые будут запускать веб-приложения. Затем мы использовали этот образ контейнера для создания нового контейнера с именем Container01 и добавили в этот контейнер роль сервера веб-сервера (IIS). Затем мы остановили Container01 и захватили из него новый образ контейнера, назвав новый образ контейнера IISContainer. Наконец, мы создали новый «рабочий» контейнер с именем WebServer01 на основе IISContainer в качестве шаблона с намерением развертывать и запускать контейнерное веб-приложение в WebServer01.

Чтобы изучить среду, которую мы создали в части 4, мы можем использовать командлет Get-Container, который получает информацию о контейнерах на нашем хосте контейнеров:

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

Дополнительные сведения о командлете Get-Container можно отобразить с помощью командлета Get-Help, но обязательно сначала запустите Update-Help, так как встроенная справка по командлету в Windows Server 2016 TP4 все еще очень неполная, и теперь доступна дополнительная помощь. онлайн.

Вы также можете использовать форматирование PowerShell, такое как Format-List (fl) или Format-Table (ft), для отображения дополнительной информации для некоторых командлетов в модуле Containers для PowerShell в Windows Server 2016. Однако это не всегда работает, например, если вы используйте Format-List (fl) с Get-Container, вы не увидите ничего, кроме вывода по умолчанию:

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

Но когда мы выводим Get-ContainerImage в Format-List (fl), мы видим кучу дополнительной информации об образах контейнеров на нашем хосте:

Некоторые командлеты в модуле Container говорят сами за себя и позволяют использовать их (по крайней мере, в некоторой степени), даже не заглядывая в файл справки. Например, можно предположить, что командлет Get-ContainerNetworkAdapter может отображать информацию не только о самом сетевом адаптере, используемом контейнером, но и об имени коммутатора, к которому подключен контейнер. Если вы вернетесь к статье четвертой части этой серии, вы увидите, что виртуальный коммутатор на хосте Hyper-V, к которому подключен наш контейнер WebServer01, имеет имя «Виртуальный коммутатор». Запустив командлет Get-ContainerNetworkAdapter, мы можем легко убедиться в этом факте:

Обратите внимание на приведенный выше вывод, что динамически сгенерированный адрес управления доступом к среде (MAC) 000000000000 в настоящее время назначается виртуальному сетевому адаптеру. Допустим, вместо этого мы хотим дать нашему сетевому адаптеру контейнера статический MAC-адрес 112233AABBCC. Мы должны быть в состоянии сделать это с помощью командлета Set-ContainerNetworkAdapter, но на момент написания документации (и, возможно, также функциональности) для этого командлета кажется, что он неполный, поскольку я продолжал получать следующую ошибку, когда пытался запустить этот командлет с различным вводом:

Мораль этой истории заключается в том, что нам нужно будет вернуться к этой теме управления контейнером Windows Server с помощью PowerShell в будущем, когда Windows Server достигнет общедоступной версии (GA) и контейнеры Windows Server в их окончательном виде можно будет развернуть в Microsoft Azure.

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