Назад | Перейти на главную страницу

Может ли наносервер Windows работать в докере Linux?

https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment_nano говорит о запуске образа докера наносервера под Windows:

докер тянуть microsoft / nanoserver

Означает ли это, что мы должны иметь возможность запускать наносервер везде, где работает Docker (например, Linux)?

Контейнеры обеспечивают изоляцию процессов в общей ОС, а не изоляцию ОС на общем оборудовании, которое вы получаете с виртуальными машинами. Поскольку ОС является общей, ОС хоста должна иметь возможность запускать нужные двоичные файлы. Вы увидите это в архитектуре движка докеров и в архитектуре образа, который вы хотите запустить, они должны быть совместимы:

$ docker system info --format '{{.OSType}} {{.Architecture}}'
linux x86_64

$ docker image inspect busybox --format '{{.Os}} {{.Architecture}}'
linux amd64

Если вы попытаетесь запустить архитектуру, несовместимую с вашим хостом, вы получите сообщение об ошибке, потому что двоичный формат не распознается ядром:

$ docker image pull --platform arm64 busybox:latest
latest: Pulling from library/busybox
acafde7ce2e7: Pull complete
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Downloaded newer image for busybox:latest

$ docker run -it --rm busybox:latest echo hello
standard_init_linux.go:190: exec user process caused "no such file or directory"

Настольные версии Docker и версия Docker для Windows Server включают виртуальную машину Linux под оболочкой для запуска контейнеров Linux (контейнеры Linux являются доминирующей контейнерной средой, поэтому Docker реализует это с помощью Linuxkit, чтобы упростить рабочий процесс разработчика). Для Windows в движке есть переключатель, позволяющий использовать виртуальную машину Linux или запускать собственные контейнеры Windows.

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

коротко и просто: нет

Контейнеры связаны с виртуализацией ядра / ОС.

Это группа процессов, которые вы запускаете на хостах-контейнерах с общим ядром. Если этот хост контейнера является демоном Linux, он не может совместно использовать ядро ​​Windows, которое требуется образу наносервера.

возможно - если вы используете кубернеты: https://kubernetes.io/docs/getting-started-guides/windows/