Update3: 06.2019 В некоторых комментариях написано, что ответ непонятен, постараюсь уточнить.
TL;DR:
В: Могут ли контейнеры Windows работать в Linux?
A: Нет. Они не могут. Контейнеры используют ресурсы и драйверы базовой операционной системы, поэтому контейнеры Windows могут работать только в Windows, а контейнеры Linux могут работать только в Linux.
В: А как насчет Docker для Windows? Или другие решения на базе ВМ?
A: Docker для Windows позволяет имитировать запуск контейнеров Linux в Windows, но внутри создается виртуальная машина Linux, поэтому контейнеры Linux работают в Linux, а контейнеры Windows - в Windows.
Бонус: прочтите эту прекрасную статью о запуске контейнеров докеров Linux. в Windows.
В: Итак, что мне делать с приложением .Net Framework 462, если я хочу работать в контейнере?
A: Это зависит от обстоятельств. Следуя нескольким рекомендациям:
- Если есть возможность - переходите на .Net Core. Поскольку .Net Core обеспечивает поддержку большинства основных функций .Net Framework и .Net Framework 4.8 будет последней версией .Net framework
Если вы не можете перейти на .Net Core - как упоминал @Sebastian - вы можете преобразовать свои библиотеки в .Net Standard и иметь 2 версии приложения - одну на .Net Framework 4.6.2 и одну на .Net Core - это не так. всегда очевидно, Visual Studio поддерживает это довольно хорошо (с множественным таргетингом), но некоторые зависимости могут потребовать дополнительной осторожности.
(Рекомендуется реже) В некоторых случаях вы можете запускать контейнеры Windows. Контейнеры Windows становятся все более зрелыми и лучше поддерживаются такими платформами, как Kubernetes. Но чтобы иметь возможность запускать код .Net Framework, вам все равно нужно запускать базовый образ «Server Core», который занимает около 1,4 ГБ. В тех же редких случаях вы можете перенести свой код в .Net Core, но по-прежнему работать на серверах Windows Nano с размером образа 95 МБ.
Сохранение старых обновлений в истории
Обновление2: 08.2018. Если вы используете Docker-for-Windows, теперь вы можете запускать контейнеры Windows и linux одновременно: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows-and-linux-containers-simhibitedly/
Бонус: не имеет прямого отношения к вопросу, но теперь вы можете запускать не только сам контейнер linux, но и оркестратор, например kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in-docker-desktop-stable-channel/
Обновлено в 2018 г .:
Исходный ответ в целом правильный, НО несколько месяцев назад докер добавил экспериментальная функция LCOW (официальный репозиторий github).
Из этого сообщения:
Разве Docker для Windows еще не запускает контейнеры Linux? Верно. Docker для Windows может запускать контейнеры Linux или Windows с поддержкой контейнеров Linux через виртуальную машину Hyper-V Moby Linux (начиная с Docker для Windows 17.10 эта виртуальная машина основана на LinuxKit).
Настройка запуска контейнеров Linux с помощью LCOW намного проще, чем в предыдущей архитектуре, где виртуальная машина Linux Hyper-V запускает демон Linux Docker вместе со всеми вашими контейнерами. С LCOW демон Docker работает как процесс Windows (так же, как при запуске контейнеров Docker Windows), и каждый раз, когда вы запускаете контейнер Linux, Docker запускает минимальный гипервизор Hyper-V, на котором запущена виртуальная машина с ядром Linux, runc и процессами контейнера. работает сверху.
Поскольку существует только один демон Docker, и поскольку этот демон теперь работает в Windows, скоро появится возможность запускать контейнеры Docker Windows и Linux бок о бок в одном и том же сетевом пространстве имен. Это откроет множество захватывающих сценариев разработки и производства для пользователей Docker в Windows.
Оригинал:
Как упоминалось в комментариях @PanagiotisKanavos, контейнеры не предназначены для виртуализации и используют ресурсы хост-машины. В результате на данный момент контейнер Windows не может работать «как есть» на Linux-машине.
Но - вы можете сделать это с помощью виртуальной машины - так как она работает в Windows. Вы можете установить виртуальную машину Windows на свой хост Linux, что позволит запускать контейнеры Windows.
С ним, ИМХО, запускать его таким образом в среде PROD - не лучшая идея.
Кроме того, этот ответ содержит более подробную информацию.
person
evgenyl
schedule
12.02.2017
Hyper-V Manager
и проверьте имя ВМ. Это та виртуальная машина, которая предлагает поддержку Linux, а не какую-то функцию контейнера. - person Panagiotis Kanavos   schedule 10.02.2017