Можно ли запускать контейнеры Windows в Linux ? Сценарий основан на приложении, написанном на .NET (старая сеть), и на пользователе Linux, который хочет запустить это с Docker, чтобы предоставить net462
письменный API для localhost
.
Я использую бета-версию от Docker Desktop для Windows
Если нет, то почему Windows может запускать контейнеры Linux, а не наоборот?
РЕДАКТИРОВАТЬ:
Прошло время и этот вопрос популярен. Я хотел бы добавить здесь одно замечание, что обходной путь должен использовать новый стандарт netstand. Это позволило мне упаковать 4.6.2
фреймворк в новую библиотеку.
linux
docker
docker-for-windows
windows-container
docker-desktop
Себастьян 506563
источник
источник
Ответы:
Обновление 3: 06.2019 В некоторых комментариях написано, что ответ не ясен, попробую уточнить.
TL; DR:
В: Могут ли контейнеры Windows работать в Linux?
A: Нет. Они не могут. Контейнеры используют ресурсы и драйверы операционной системы, поэтому контейнеры Windows могут работать только в Windows, а контейнеры Linux могут работать только в Linux.
Q: Но как насчет Docker для Windows? Или другие решения на базе VM?
A: Docker для Windows позволяет имитировать работу контейнеров Linux в Windows , но под капотом создается виртуальная машина Linux, поэтому контейнеры Linux все еще работают в Linux, а контейнеры Windows - в Windows .
Бонус: прочитайте эту очень хорошую статью о запуске докерских контейнеров Linux в Windows.
Q: Итак, что мне делать с приложением .Net Framework 462, если я хочу работать в контейнере?
A: Это зависит Следуя нескольким рекомендациям:
Если вы не можете перейти на .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- и-Linux-контейнеры-одновременно /
Бонус: не имеет прямого отношения к вопросу, но теперь вы можете запускать не только сам контейнер linux, но и оркестратор, такой как kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-настольный устойчиво-канал /
Обновлено в 2018 году:
Оригинальный ответ в целом правильный, НО несколько месяцев назад докер добавил экспериментальную функцию LCOW ( официальный репозиторий github ).
Из этого поста :
Оригинал:
Как уже упоминалось в комментариях @PanagiotisKanavos, контейнеры не предназначены для виртуализации, и они используют ресурсы хост-машины . В результате на данный момент контейнер Windows не может работать "как есть" на машине с Linux.
Но - вы можете сделать это с помощью VM - как это работает на Windows. Вы можете установить Windows VM на хост Linux, что позволит запускать контейнеры Windows.
С этим, IMHO, запустить его таким образом в среде PROD не будет лучшей идеей.
Кроме того, этот ответ предоставляет более подробную информацию.
источник
Нет, вы не можете запускать контейнеры Windows непосредственно в Linux.
Но вы можете запустить Linux на Windows.
Windows Server / 10 поставляется с базовым образом операционной системы Ubuntu ( после сентябрьского 2016 года бета-версия пакета обновления ). Это причина, по которой вы можете запускать Linux на Windows, а не иначе. Проверьте здесь. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
Вы можете переключаться между контейнерами ОС Linux и Windows, щелкнув правой кнопкой мыши на панели настройки в меню в трее.
источник
В отличие от виртуализации, контейнеризация использует ту же ОС хоста. Таким образом, контейнер, построенный на Linux, не может быть запущен на Windows, и наоборот.
В Windows вы должны воспользоваться помощью виртуализации (используя Hyper-v), чтобы иметь ту же операционную систему, что и операционная система ваших контейнеров, и тогда вы сможете запускать ее.
Docker для Windows - это похожее приложение, которое построено на Hyper-v и помогает запускать контейнер Linux Docker для Windows. Но, насколько я знаю, нет ничего, что помогло бы запускать контейнеры Windows в Linux.
источник
Контейнеры используют ядро ОС. Контейнер Windows использует процессы для запуска. Теоретически говоря, контейнеры Windows не могут работать в Linux.
Однако есть обходные пути, использующие решения VMstyle.
Я нашел это решение, которое использует Vagrant и Packer на Mac, поэтому оно должно работать и для Linux: https://github.com/StefanScherer/windows-docker-machine
источник
Решение 1 - Использование VirtualBox
Как предложил Мухаммед Сахпутра в этом посте , можно запускать ОС Windows внутри VirtualBox (используя VBoxHeadless - без графического интерфейса) внутри контейнера Docker .
Кроме того, настройка NAT внутри сетевых конфигураций виртуальной машины может выполнять переадресацию портов, что дает вам возможность пропускать любой трафик, поступающий в контейнер Docker и из него. В конечном итоге это, в широком смысле, позволяет запускать любой сервис на базе Windows поверх компьютера с Linux.
Возможно, это не типичный вариант использования контейнера Docker, но это определенно интересный подход к проблеме.
Решение 2 - Использование Wine
Для простых приложений и, возможно, более сложных, вы можете попробовать использовать вино внутри док-контейнера .
Эта страница центра докеров может помочь вам в достижении вашей цели.
Я надеюсь, что Docker скоро выпустит нативное решение, как это было с Docker-машиной в Windows несколько лет назад.
источник
Контейнеры Windows можно использовать внутри виртуальной машины (гостевая ОС должна соответствовать требованиям - Windows 10 Pro или Windows 2016).
Например, вы можете использовать VirtualBox , просто включите Hyper-V в интерфейсе System / Acceleration / Paravirtualization.
После этого, если Docker не запускается из-за ошибки, используйте «Переключиться на контейнеры Windows ...» в настройках.
(это можно переместить как комментарий к принятому ответу, но у меня недостаточно репутации для этого)
источник
В то время как Docker для Windows прекрасно способен запускать контейнеры Linux, обратное, хотя теоретически возможно, не реализовано по практическим причинам.
Наиболее очевидным является то, что в то время как Docker для Windows может свободно запускать виртуальную машину Linux, Docker для Linux потребует лицензию Windows для запуска его внутри виртуальной машины.
Кроме того, Linux полностью настраиваемый, поэтому виртуальная машина Linux, используемая Docker для Windows, была сокращена до нескольких МБ, содержащих только минимальный необходимый объем для запуска контейнеров, в то время как самый маленький доступный дистрибутив Windows составляет около 1,5 ГБ. Это может быть неосуществимый размер, но он гораздо более громоздок, чем аналог Linux на Windows.
Хотя кто-то, безусловно, может продать вариант Docker для Linux в комплекте с лицензией Windows и готовый запускать контейнеры Windows под Linux (и я не знаю, существует ли такой продукт), суть в том, что вы не можете избежать платить цену блокировки Windows-поставщика: как деньгами, так и местом для хранения.
источник
В настоящее время вы можете запускать MSSQL и .NET Core в Linux и, следовательно, в контейнерах Linux.
Видеть: https://hub.docker.com/r/microsoft/mssql-server-linux/
Также: https://hub.docker.com/r/microsoft/dotnet/
Прямой вопрос к вашему ответу, конечно, если нет версии, скомпилированной специально для Linux, нет.
источник
.NET Core
а НЕ.NET
- это две совершенно разные среды.Контейнеры Windows не работают в Linux, а также вы не можете напрямую запускать контейнеры Linux в Windows.
источник