Подтвердить что ты не робот

Можно ли разместить Контейнеры Windows в Linux?

Можно ли запускать контейнеры Windows в Linux? Сценарий основан на приложении, написанном на .NET (старая сеть), и на пользователе Linux, который хочет запустить это с Docker, чтобы предоставить net462 написанный API на localhost net462.

Я использую бета-версию от Docker Desktop для Windows

Если нет, то почему Windows может запускать контейнеры Linux, а не наоборот?

РЕДАКТИРОВАТЬ:

Прошло время и этот вопрос популярен. Я хотел бы добавить здесь одно замечание, что обходной путь должен использовать новый стандарт netstand. Это позволило мне упаковать фреймворк 4.6.2 в новую библиотеку.

4b9b3361

Ответ 1

Обновление 3: 06.2019 В некоторых комментариях говорится, что ответ не ясен, я постараюсь уточнить.

TL; DR:

В: Могут ли контейнеры Windows работать в Linux?

A: Нет.Они не могут. Контейнеры используют ресурсы и драйверы операционной системы, поэтому контейнеры Windows могут работать только в Windows, а контейнеры Linux могут работать только в Linux.

Q: А как насчет Docker для Windows? Или другие решения на основе виртуальных машин?

A: Docker для Windows позволяет имитировать работающие контейнеры Linux в Windows, но под капотом создается виртуальная машина Linux, поэтому все еще контейнеры Linux работают на Контейнеры Linux и Windows работают в Windows.

Бонус: прочитайте эту замечательную статью о запуске Docker-контейнеров 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-simultaneously/

Бонус: Не имеет прямого отношения к вопросу, но теперь вы можете запускать не только сам контейнер 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 намного проще, чем предыдущая архитектура, где виртуальная машина Hyper-V Linux работает с докером Linux демон вместе со всеми вашими контейнерами. С LCOW, демон Docker работает как процесс Windows (так же, как при запуске Docker Windows контейнеры), и каждый раз, когда вы запускаете контейнер Docker для Linux запускает минимальный гипервизор Hyper-V под управлением виртуальной машины с Linux ядра, runc и контейнерные процессы, работающие поверх.

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

Оригинал:

Как упоминалось в комментариях @PanagiotisKanavos, контейнеры не предназначены для виртуализации, и они используют ресурсы хост-машины. В результате на данный момент контейнер Windows не может работать "как есть" на компьютере с Linux.

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

С ним, IMHO, запускать его таким образом в среде PROD не будет лучшей идеей.

Кроме того, этот ответ содержит более подробную информацию.

Ответ 2

Нет, вы не можете запускать контейнеры Windows непосредственно в Linux.

Но вы можете запустить Linux на Windows.

Windows Server/10 поставляется с базовым образом операционной системы Ubuntu (после сентябрьского 2016 года бета-версии пакета обновления). Это причина, по которой вы можете запускать Linux на Windows, а не иначе. Проверьте здесь. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Вы можете переключаться между ОС контейнеров Linux и Windows, щелкнув правой кнопкой мыши на панели управления в меню в трее.

enter image description here

enter image description here

Ответ 3

В отличие от виртуализации, контейнеризация использует ту же ОС хоста. Таким образом, контейнер, построенный на Linux, не может быть запущен на Windows, и наоборот.

В Windows вы должны воспользоваться помощью виртуализации (используя Hyper-v), чтобы иметь ту же ОС, что и ваши контейнеры ОС, и тогда вы сможете запускать ее.

Docker для Windows - это похожее приложение, которое построено на Hyper-v и помогает запускать контейнер Linux Docker для Windows. Но, насколько я знаю, нет ничего, что помогло бы запускать контейнеры Windows в Linux.

Ответ 4

Контейнеры используют ядро ОС. Контейнер Windows использует процессы для запуска. Таким образом, теоретически контейнеры Windows не могут работать в Linux.

Однако есть обходные пути, использующие решения VMstyle.

Я нашел это решение, которое использует Vagrant и Packer на Mac, поэтому оно должно работать и для Linux: https://github.com/StefanScherer/windows-docker-machine

Эта среда Vagrant создает Docker Machine для работы на вашем MacBook с контейнерами Windows. Вы можете легко переключаться между Docker для контейнеров Mac Linux и контейнеров Windows.

Running bash commands enter image description here

building the headless Vagrant box

$ git clone https://github.com/StefanScherer/packer-windows
$ cd packer-windows

$ packer build --only=vmware-iso windows_2019_docker.json
$ vagrant box add windows_2019_docker windows_2019_docker_vmware.box

Create the Docker Machine

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019

Switch to Windows containers

$ eval $(docker-machine env 2019)

Ответ 5

Контейнеры Windows можно использовать внутри виртуальной машины (гостевая ОС должна соответствовать требованиям - Windows 10 Pro или Windows 2016).

Например, вы можете использовать VirtualBox, просто включите Hyper-V в интерфейсе System/Acceleration/Paravirtualization.

После этого, если Docker не запускается из-за ошибки, используйте "Переключиться на контейнеры Windows..." в настройках.

(это можно переместить как комментарий к принятому ответу, но у меня недостаточно репутации для этого)

Ответ 6

Решение 1. Использование VirtualBox

Как Мухаммед Сахпутра предложил в этом посте, можно запустить ОС Windows внутри VirtualBox (используя VBoxHeadless - без графического интерфейса) внутри Докер контейнер.

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

Возможно, это не типичный вариант использования контейнера Docker, но это определенно интересный подход к проблеме.


Решение 2 - Использование Wine

Для простых приложений и, возможно, для более сложных, вы можете попробовать использовать wine внутри док-контейнера.

Эта страница докера-концентратора может помочь вам в достижении вашей цели.


Я надеюсь, что Docker скоро выпустит нативное решение, как это было с docker-machine в Windows несколько лет назад.

Ответ 7

Несмотря на то, что Docker для Windows прекрасно умеет запускать контейнеры Linux, обратное, хотя теоретически возможно, не реализовано по практическим причинам.

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

Кроме того, Linux полностью настраиваемый, поэтому виртуальная машина Linux, используемая Docker для Windows, была сокращена до нескольких МБ, содержащих только минимальный необходимый для запуска контейнеров минимум, в то время как самый маленький доступный дистрибутив Windows составляет около 1,5 ГБ. Это может быть неосуществимый размер, но он гораздо более громоздок, чем аналог Linux на Windows.

Хотя кто-то, безусловно, может продать вариант Docker для Linux в комплекте с лицензией Windows и готов к запуску контейнеров Windows под Linux (и я не знаю, существует ли такой продукт), суть в том, что вы не можете избежать платить цену блокировки Windows-поставщика: как деньгами, так и местом для хранения.

Ответ 9

Контейнеры Windows не работают в Linux, а также вы не можете напрямую запускать контейнеры Linux в Windows.

Ответ 10

image Операционная система Windows не может быть использована на этой платформе

Я думаю, что вопрос - Может ли mcr.microsoft.com/windows/servercore:ltsc2016 быть запущен на Mac OSX или Linux с запущенным докером?