Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа контейнеров Windows расширяется! Docker был первым элементом пути к контейнеру, теперь мы создадим другие инструменты платформы контейнеров.
- containerd/cri — новые возможности Windows Server 2019/Windows 10 1809.
- runhcs — аналог узла контейнера Windows, подобие runc для Windows-контейнеров.
- hcs — служба вычислений хоста + удобные обертки для упрощения использования.
В этой статье рассказывается о платформе контейнеров Windows и Linux, а также о каждом средстве платформы контейнеров.
Платформа контейнеров Windows и Linux
В средах Linux средства управления контейнерами, такие как Docker, основаны на более гранулярном наборе инструментов контейнеров: runc и containerd.
архитектура Docker 
runc — это средство командной строки Linux для создания и запуска контейнеров в соответствии с спецификацией среды выполнения контейнеров OCI.
containerd — это демон, который управляет жизненным циклом контейнера: от скачивания и распаковки образа контейнера до выполнения контейнера и контроля за ним.
В Windows мы приняли другой подход. Когда мы начали сотрудничать с Docker для поддержки контейнеров Windows, мы построили решение напрямую на HCS (служба вычислений хоста). Эта запись блога полна информации о том, почему мы создали HCS и почему мы приняли этот подход к контейнерам изначально.
На данном этапе 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может выполнять различные типы контейнеров.- Hyper-V изоляция Windows и Linux
- Контейнеры процессов Windows (образ контейнера должен соответствовать узлу контейнера)
Использование:
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 и более поздних версий.