Оновлення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 не буде найкращою ідеєю.
Також ця відповідь надає більше деталей.