Чи можна розмістити контейнери Windows на Linux?


238

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

Я використовую бета-версію від Docker Desktop для Windows

Якщо ні, то чому Windows може запускати контейнери Linux, а не навпаки?

Редагувати:

Минув час, і це питання є популярним. Я хотів би додати тут одне зауваження, що вирішення полягає у використанні нового нестандартного стандарту. Це дозволило мені упакувати 4.6.2рамки в нову бібліотеку.


4
Неможливо. Для створення та запуску контейнерів Windows потрібна система Windows із підтримкою контейнерів.
ajtrichards

5
Гаразд, але чому тоді Windows може запускати Linux-контейнери? Зараз немає навпаки?
Себастьян 506563

10
@ Sebastian506563, оскільки докер запускає віртуалізацію VirtualBox за кулісами, щоб змусити Linux-контейнери працювати в Windows. Я б здогадався, теоретично це стане можливим і в інший спосіб, просто докер цього не реалізував.
Григорій Суваліан

5
З VM кожен vm має свою операційну систему. У контейнерах є базове зображення ОС, і кожен контейнер додає новий тонкий шар зверху основи. У докера на цій базі ОС Linux. т. е. ваш контейнер Windows не може користуватися базою, оскільки він інший. blog.risingstack.com/…
xen-dara

3
@PanagiotisKanavos будь ласка, складіть відповідь
Себастьян 506563

Відповіді:


162

Оновлення3: 06.2019 У деяких коментарях сказано, що відповідь не ясна, спробую уточнити.

TL; DR:

Питання: Чи можуть контейнери Windows працювати в Linux?

Відповідь: Ні. Вони не можуть. Контейнери використовують основні ресурси та драйвери Операційної системи, тому контейнери Windows можуть працювати лише в Windows, а контейнери Linux можуть працювати лише на Linux.

З: А як же Docker для Windows? Або інші рішення на основі VM?

Відповідь: Docker для Windows дозволяє імітувати запуск Linux- контейнерів у Windows , але під кришкою створюється Linux VM, тому досі 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 Мб.

Залишаючи також старі оновлення історії

Update2: 08,2018 Якщо ви використовуєте Докер-для-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 -докер-настільний стабільний канал /

Оновлено у 2018 році:

Оригінальна відповідь взагалі правильна, Але декілька місяців тому докер додав експериментальну функцію LCOW ( офіційне сховище github ).

З цього повідомлення :

У Docker для Windows вже не запущені контейнери Linux? Це вірно. Docker для Windows може запускати контейнери Linux або Windows з підтримкою контейнерів для Linux через Hyper-V Moby Linux VM (станом на Docker для Windows 17.10 ця VM заснована на LinuxKit).

Налаштування для запуску контейнерів Linux із LCOW набагато простіше, ніж попередня архітектура, де Hyper-V Linux VM запускає демон Docker Linux, а також усі ваші контейнери. У режимі LCOW демон Docker працює як процес Windows (такий же, як при запуску контейнерів Docker Windows), і кожен раз, коли ви запускаєте контейнер Linux, Docker запускає мінімальний гіпервізор Hyper-V, що працює з VM з ядром Linux, runc та контейнерними процесами працює зверху.

Оскільки є лише один демон Докера і через те, що цей демон зараз працює в Windows, незабаром можна буде запускати контейнери Windows та Linux Docker-контейнери поруч, в тому ж просторі мереж імен . Це дозволить розблокувати безліч захоплюючих сценаріїв розвитку та виробництва для користувачів Docker в Windows.

Оригінал:

Як згадується в коментарях @PanagiotisKanavos, контейнери не для віртуалізації, і вони використовують ресурси хост-машини . Як результат, наразі контейнер Windows не може запускати "як є" на машині Linux.

Але - це можна зробити за допомогою VM - так як він працює на windows. Ви можете встановити Windows VM на своєму Linux-хості, що дозволить запускати контейнери Windows.

З ним IMHO запустити його таким чином у середовищі PROD не буде найкращою ідеєю.

Також ця відповідь надає більше деталей.


12
Зв'язана відповідь насправді не дає жодних деталей щодо цього - вона просто пояснює, як запустити Linux-контейнери в Windows (зворотній). Можна запустити Docker всередині VM Windows, але для цього вам потрібна вкладена підтримка віртуалізації. Це означає, що він працює з VMware, але не з Virtualbox.
Ральф

3
У відповіді багато слів, але, здається, це не відповідає на питання.
Ківерія

2
Це не відповідає на питання. Це не повинно бути настільки високопоставленим
Аморфний

2
Це НЕ відповідь на це питання. Запуск докера в Linux НАЗАГАЛЬНО відрізняється від запуску докера в Windows. Чому це позначено як відповідь? \
Ані

Контейнери = ефективно запускати різні програми (створені для певної ОС), менше пам’яті, дискового простору, накладних витрат, більш ефективне використання апаратних засобів VM = випадок використання .. запущена ціла ОС для різних випадків використання ..., використання обладнання добре (Мені не потрібно купувати різну машину для кожної ОС. Якщо мені справді потрібна декілька ОС для мого використання), але жорстке використання не настільки велике порівняно з контейнерами. Чудове відео від CTO Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder

16

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

Але ви можете запустити Linux у Windows.

Windows Server / 10 поставляється з базовим зображенням ОС ubuntu ( після вересня 2016 року бета-сервісний пакет ). Саме тому ви можете запускати Linux на Windows, а не на інших. Ознайомтесь тут. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Ви можете переходити між контейнерами ОС Linux та Windows, клацнувши правою кнопкою миші на докері в меню лотка.

введіть тут опис зображення

введіть тут опис зображення


13
ОП шукає замість цього запустити контейнери Windows на серверах Linux, тому цей не відповідає на запитання. Але мені не подобаються люди, які без коментарів дають низку, тому я даю підсумок
ромашка

1
@Karthikeyan V: Тому що це не відповідь на питання.
Стефан Штайгер

Я не впевнений, що він говорив раніше, але перше твердження говорить, що ти не можеш, а друге говорить, що ти можеш. Це, мабуть, відсутність або щось, що бентежить.
StingyJack

9

На відміну від віртуалізації, контейнеризація використовує той же хост os. Тож контейнер, побудований на Linux, не може бути запущений у Windows та навпаки.

У Windows вам потрібно скористатися допомогою віртуалізації (використовуючи Hyper-v), щоб він міг бути таким же, як і os ваших контейнерів, і тоді ви повинні мати можливість запускати те саме.

Docker для Windows - це аналогічне додаток, яке створене на Hyper-v і допомагає працювати з контейнером докерів Linux на Windows. Але наскільки я знаю, нічого такого не допомагає запускати Windows-контейнери на Linux.


9

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

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

Я знайшов це рішення, яке використовує Vagrant і Packer на Mac, тому воно повинно працювати і для Linux: https://github.com/StefanScherer/windows-docker-machine

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

Запуск команд bash введіть тут опис зображення

будівництво безголового коробки для бродяг

$ 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

Створіть машину Докер

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

Перехід на контейнери Windows

$ eval $(docker-machine env 2019)

7

Рішення 1 - Використання VirtualBox

Як запропонував Мухаммад Сахпутра в цій публікації , можна запустити ОС Windows всередині VirtualBox (використовуючи VBoxHeadless - без графічного інтерфейсу) всередині контейнера Docker .

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

Можливо, це не типовий випадок використання контейнера Docker, але це, безумовно, цікавий підхід до проблеми.


Рішення 2 - Використання вина

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

Ця сторінка центру докерів може допомогти вам досягти своєї мети.


Я сподіваюся, що Docker незабаром випустить нативне рішення, як це робилося з docker-машиною в Windows кілька років тому.


6

Ви можете використовувати контейнери Windows всередині віртуальної машини (гостьова ОС повинна відповідати вимогам - Windows 10 Pro або Windows 2016).

Наприклад, ви можете використовувати VirtualBox , просто увімкніть Hyper-V всередині інтерфейсу системи / прискорення / паравіртуалізації.

Після цього, якщо Docker не запускається через помилку, використовуйте в налаштуваннях "Переключитися на контейнери Windows ...".

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


3

Хоча Docker для Windows прекрасно вміє запускати Linux-контейнери, навпаки, хоча теоретично це можливо, не реалізується через практичні причини.

Найбільш очевидним є той факт, що Docker для Windows може вільно запускати Linux VM, Docker для Linux потребує ліцензії на Windows, щоб запустити її всередині VM.

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

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


0

Ви можете запускати MSSQL та .NET Core в Linux, а значить, і в Linux контейнери.

Дивіться: https://hub.docker.com/r/microsoft/mssql-server-linux/

Також: https://hub.docker.com/r/microsoft/dotnet/

Прямий питання до вашої відповіді, звичайно, якщо тільки не існує версія, складена спеціально для Linux, ні.


3
Це правда - але це не має нічого спільного з питанням. Плюс MS-SQL - це більше, ніж просто двигун (який, до речі, в Linux поставляється без файлового потоку або R - так це навіть не весь двигун).
Стефан Штайгер

Ви повинні подумати на крок попереду ... чому він питає? Якщо він запитує, бо хоче запустити одне із них: вуаля.
dagelf

2
Можливо. Але IMHO, він, ймовірно, задає це питання, тому що він уже зробив це, і тепер йому доведеться керувати такими речами, як SSRS / SSAS або деякий контроль веб-форм, наприклад ReportViewer, в Linux.
Стефан Штайгер

Docker image microsoft / dotnet призначений для .Net Core, що є чимось абсолютно відмінним від старого .Net 4.x, тому ви не можете запускати додаток, розроблений для старих .Net on .Net Core
j123b567

3
Вони підтримують .NET Coreі НЕ .NET - це два абсолютно різних середовища.
Славік Мельцер

-1

Контейнери Windows не працюють у Linux, а також не можна безпосередньо запускати контейнери Linux у Windows.


6
Ви можете трохи допрацювати?
Матьє

18
Ви можете запустити контейнери Linux на win 10
Kugel

2
Я проголосував за цього хлопця, так як вважаю, що це було правдою в той час. Однак тепер ви можете запускати контейнери Linux у Docker під Windows (Docker працює у вітрині MobyLinux).
JakeJ

Насправді Windows працює з крихітним Linux VM для запуску контейнерів Linux. перевірте свої ресурси гіпер-v, щоб побачити це
Турул Каракая
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.