Поделиться через


Средства платформы контейнеров в Windows

Платформа контейнеров Windows расширяется! Docker был первым элементом пути к контейнеру, теперь мы создадим другие инструменты платформы контейнеров.

  • containerd/cri — новые возможности Windows Server 2019/Windows 10 1809.
  • runhcs — аналог узла контейнера Windows, подобие runc для Windows-контейнеров.
  • hcs — служба вычислений хоста + удобные обертки для упрощения использования.

В этой статье рассказывается о платформе контейнеров Windows и Linux, а также о каждом средстве платформы контейнеров.

Платформа контейнеров Windows и Linux

В средах Linux средства управления контейнерами, такие как Docker, основаны на более гранулярном наборе инструментов контейнеров: runc и containerd.

архитектура Docker в Linux

runc — это средство командной строки Linux для создания и запуска контейнеров в соответствии с спецификацией среды выполнения контейнеров OCI.

containerd — это демон, который управляет жизненным циклом контейнера: от скачивания и распаковки образа контейнера до выполнения контейнера и контроля за ним.

В Windows мы приняли другой подход. Когда мы начали сотрудничать с Docker для поддержки контейнеров Windows, мы построили решение напрямую на HCS (служба вычислений хоста). Эта запись блога полна информации о том, почему мы создали HCS и почему мы приняли этот подход к контейнерам изначально.

начальная архитектура подсистемы Docker в Windows

На данном этапе Docker по-прежнему взаимодействует напрямую с HCS. В будущем средства управления контейнерами расширяются для поддержки контейнеров Windows и хоста контейнеров Windows, которые смогут взаимодействовать с контейнерd и runhcs аналогично тому, как это происходит с контейнерами и runc на Linux.

runhcs

runhcs является разветвлением runc. Как и runc, runhcs является клиентом командной строки для запуска приложений, упакованных в соответствии с форматом Open Container Initiative (OCI) и является соответствующей реализацией спецификации Open Container Initiative.

Функциональные различия между runc и runhcs включают:

  • runhcs работает в Windows. Он взаимодействует с HCS для создания контейнеров и управления ими.

  • runhcs может выполнять различные типы контейнеров.

Использование:

runhcs run [ -b bundle ] <container-id>

<container-id> — это ваше имя для запускаемого экземпляра контейнера. Имя должно быть уникальным на хосте контейнера.

Каталог пакета (с помощью -b bundle) является необязательным. Как и в случае с runc, контейнеры настраиваются с помощью пакетов. Пакет контейнера — это каталог с файлом спецификации OCI контейнера , "config.json". Значением по умолчанию для "bundle" является текущий каталог.

Файл спецификации OCI ,config.json", должен иметь два поля для правильного выполнения:

  • Путь к временному пространству контейнера
  • Путь к каталогу слоя контейнера

Команды контейнеров, доступные в runhcs, включают:

  • Средства для создания и запуска контейнера

    • выполнение создает и запускает контейнер
    • создать контейнер
  • Средства управления процессами, выполняемыми в контейнере:

    • запускает выполнение пользовательского процесса в созданном контейнере.
    • exec запускает новый процесс внутри контейнера
    • приостановка приостановка всех процессов внутри контейнера
    • заново возобновляет все процессы, которые ранее были приостановлены
    • ps ps отображает процессы, выполняемые внутри контейнера
  • Средства управления состоянием контейнера

    • состояние выводит состояние контейнера
    • Команда kill отправляет указанный сигнал (по умолчанию: SIGTERM) в инициализирующий процесс контейнера.
    • удаление удаляет все ресурсы, удерживаемые контейнером, часто используемое с отсоединенным контейнером.

Единственная команда, которую можно считать многоконтейнерной, — это список. В нем перечислены запущенные или приостановленные контейнеры, запущенные с помощью runhcs с заданным корнем.

HCS

У нас есть две оболочки, доступные на сайте GitHub для работы с HCS. Так как HCS — это API C, оболочки упрощают вызов HCS с языков более высокого уровня.

  • hcsshim - HCSShim написан в Go, и это основа для runhcs. Скачайте последнюю сборку с AppVeyor или создайте её самостоятельно.
  • dotnet-computevirtualization — dotnet-computevirtualization — это оболочка C# для HCS.

Если вы хотите использовать HCS (напрямую или через оболочку), или вы хотите сделать оболочку Rust/Haskell/InsertYourLanguage вокруг HCS, оставьте комментарий.

Для более глубокого взгляда на HCS, просмотрите презентации DockerCon Джона Старка.

containerd/cri

Важный

Поддержка CRI доступна только в Windows Server 2019/Windows 10 1809 и более поздних версий.

Хотя спецификации OCI определяют единственный контейнер, CRI (интерфейс среды выполнения контейнера) описывает контейнеры как рабочие нагрузки в общей песочнице, называемой pod. Модули Pod могут содержать одну или несколько рабочих нагрузок контейнера. Pod позволяют оркестраторам контейнеров, таким как Kubernetes и Service Fabric Mesh, обрабатывать групповые рабочие нагрузки, которые должны располагаться на одном узле с некоторыми общими ресурсами, такими как память и vNETs.

Хотя runHCS и containerd могут работать на любой системе Windows Server 2016 или более поздней версии, поддержка Pod (групп контейнеров) требует значительных изменений в инструментах для работы с контейнерами в Windows. Поддержка CRI доступна в Windows Server 2019/Windows 10 1809 и более поздних версий.