Начало работы с контейнерами (часть 4)

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

  • Начало работы с контейнерами (часть 2)
  • Начало работы с контейнерами (часть 6)

В моей предыдущей статье я показал вам, как настроить Windows Server 2016 в качестве узла контейнера и как развернуть базовый образ ОС. Теперь, когда у нас есть один или несколько базовых образов, пришло время приступить к созданию контейнеров.

Прежде чем мы создадим что-либо еще, я хочу воспользоваться моментом и показать вам пару командлетов PowerShell, которые вы можете использовать, чтобы убедиться, что необходимые компоненты на месте. Команды, которые я рекомендую запускать:

Get-ContainerHost

Get-VMswitch

Get-ContainerImage

Эти командлеты должны подтвердить существование узла контейнера, коммутатора виртуальной машины и образов контейнера, которые вы разместили в предыдущей статье. Вы можете увидеть пример вывода этих команд на рисунке A.

Изображение 14706
Рисунок A. Рекомендуется убедиться, что все необходимые компоненты установлены.

Теперь, когда хост-контейнер и базовые образы на месте, нам нужно установить Docker. Для этого вам нужно будет использовать командлет PowerShell под названием Invoke-WebRequest. Командлет Invoke-WebRequest — это инструмент PowerShell для загрузки файла из Интернета. Этот командлет требует два параметра. Во-первых, вам нужно будет указать URL-адрес ресурса, который вы собираетесь скачивать. Во-вторых, вы должны указать путь и имя файла, который вы хотите использовать для хранения ресурса в вашей локальной системе.

Если вам интересно, зачем нужен этот шаг, это потому, что Microsoft создала сценарий PowerShell с именем Update-ContainerHost.ps1. Этот сценарий используется для установки Docker на узел контейнера, но по умолчанию этот сценарий не включен в Windows Server. Поэтому вам придется использовать командлет Invoke-WebRequest для загрузки скрипта.

В моем случае я создаю папку на своем сервере Windows с именем C:Scripts и использую эту папку в качестве цели загрузки. Вот команды, которые я использовал:

С:

CD

Скрипты МД

CD-скрипты

Invoke-WebRequest https://aka.ms/tp5/Update-Container-Host -Outfile Update-ContainerHost.ps1

Вы можете увидеть, как выглядят эти шаги на рисунке B.

Изображение 14707
Рисунок B: Я загрузил скрипт Update-ContainerHost.ps1 в папку C:Scripts.

Следующим шагом в этом процессе является использование скрипта для установки Docker. Это простой процесс. Как вы можете видеть на рисунке C, я использовал команду DIR, чтобы убедиться, что скрипт загружен правильно. Затем я выполнил сценарий, чтобы запустить процесс установки.

Изображение 14708
Рисунок C. Сценарий Update-ContainerHost.PS1 устанавливает Docker.

После установки Docker можно приступать к созданию контейнеров. Для тех, кто никогда раньше не работал с Docker, самое главное помнить, что Docker иерархичен. Контейнеры Docker основаны на базовом образе, но часто контейнер будет основан на другом контейнере. Давайте использовать IIS в качестве примера. Предположим на мгновение, что у вас есть конкретное веб-приложение, которое вы хотите контейнеризовать. Веб-приложение может иметь множество движущихся частей. Например, есть серверная операционная система, есть компоненты веб-сервера, есть код веб-приложения и, в зависимости от веб-приложения, могут быть также базы данных и другие компоненты. Я хочу сказать, что контейнеры обычно маленькие, простые и модульные. В воображаемом веб-приложении, которое я только что описал, нет ничего простого. Здесь в игру вступает иерархия контейнеров.

Как я объяснял в начале этой серии, одна из вещей, для которых действительно хороши контейнеры, — это устранение избыточного кода. Предположим на мгновение, что вам нужно разместить десять различных веб-приложений, и по какой-то причине каждому приложению нужен собственный веб-сервер. Теперь предположим, что вы решили разместить эти веб-приложения в виде виртуальных машин. В дополнение к коду веб-приложения у вас будет десять предположительно идентичных копий операционной системы Windows Server и десять идентичных копий IIS. Вся эта избыточность тратит впустую много системных ресурсов.

Базовый образ ОС позволяет устранить избыточность операционной системы. Если бы воображаемая ситуация, которую я только что описал, была основана на использовании контейнеров, то контейнеры могли бы очень легко устранить большую часть избыточности на уровне операционной системы.

Однако, несмотря на это, по-прежнему будет десять избыточных копий IIS, которые используются для размещения веб-приложений. Что, если бы IIS также можно было бы контейнеризовать? Контейнеризируя IIS, вы можете обойтись без единственного экземпляра IIS. Каждое из веб-приложений также может быть контейнеризовано.

Прямо сейчас вы можете подумать: «Хорошо, это здорово, но звучит так, как будто это слишком много работы, чтобы настроить все таким образом». На самом деле настроить иерархическое развертывание IIS довольно просто. Помните, что у Docker уже есть базовый образ ОС. Таким образом, первое, что вы, вероятно, захотите сделать, это создать выделенный базовый образ, который можно было бы использовать специально для IIS.

Так зачем тебе это делать? На самом деле существует несколько преимуществ создания базового образа для IIS, но самым большим преимуществом является согласованность. Создав выделенный базовый образ IIS, вы можете убедиться, что все ваши контейнерные веб-приложения работают на одной и той же платформе. Базовые веб-серверы будут работать с одинаковыми конфигурациями и одинаковым набором исправлений.

Итак, как бы вы создали базовый образ IIS? На самом деле это удивительно легко сделать. Есть две вещи, которые вам понадобятся. Во-первых, вам понадобится имя базового образа, который вы планируете использовать. Если вы снова посмотрите на рисунок A, то увидите, что у меня есть базовый образ с именем WindowsServerCore, и именно его я буду использовать в этом примере. Еще одна вещь, которая вам понадобится, — это имя для базового контейнера, который вы создаете. Пример, который предоставляет Microsoft, — это контейнер с именем IISBase. Команда для создания такого контейнера:

Docker Run — имя IISBase — это WindowsServerCore cmd

Эта команда создает контейнер и открывает сеанс оболочки внутри контейнера. Оттуда вы можете установить IIS, введя эти две команды:

PowerShell.exe Install-WindowsFeature Веб-сервер

Выход

Последнее, что вам нужно будет сделать, — это зафиксировать только что созданный контейнер базового образа IIS с помощью команды Docker Commit. Фактическая команда, которую вы будете использовать:

Docker Commit IISBase WindowsServerCoreIIS

Эта команда создает образ контейнера с именем Windows Server Core IIS.

Вывод

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

  • Начало работы с контейнерами (часть 2)
  • Начало работы с контейнерами (часть 6)