Обновление 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. Поскольку .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- и-Linux-контейнеры-одновременно /
Бонус: не имеет прямого отношения к вопросу, но теперь вы можете запускать не только сам контейнер linux, но и оркестратор, такой как kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-настольный устойчиво-канал /
Обновлено в 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 Docker вместе со всеми вашими контейнерами. В LCOW демон Docker запускается как процесс Windows (так же, как при запуске контейнеров Docker Windows), и каждый раз, когда вы запускаете контейнер Linux, Docker запускает минимальный гипервизор Hyper-V, на котором запущена виртуальная машина с ядром Linux, runc и процессами контейнера. работает на вершине.
Поскольку существует только один демон Docker, и поскольку этот демон теперь работает в Windows, вскоре станет возможным запускать контейнеры Docker для Windows и Linux параллельно в одном сетевом пространстве имен . Это откроет множество захватывающих сценариев разработки и производства для пользователей Docker в Windows.
Оригинал:
Как уже упоминалось в комментариях @PanagiotisKanavos, контейнеры не предназначены для виртуализации, и они используют ресурсы хост-машины . В результате на данный момент контейнер Windows не может работать "как есть" на машине с Linux.
Но - вы можете сделать это с помощью VM - как это работает на Windows. Вы можете установить Windows VM на хост Linux, что позволит запускать контейнеры Windows.
С этим, IMHO, запустить его таким образом в среде PROD не будет лучшей идеей.
Кроме того, этот ответ предоставляет более подробную информацию.