wake-up-neo.net

Können Windows-Container unter Linux gehostet werden?

Ist es möglich, Windows Container unter Linux auszuführen? Das Szenario basiert auf einer App, die im . NET (alten Netz) geschrieben wurde, und dem Linux-Benutzer , mit dem dies ausgeführt werden soll Docker, um eine net462 geschriebene API für localhost bereitzustellen.

Ich verwende die Beta-Version von Docker Desktop für Windows

Wenn nein, warum kann Windows Linux-Container ausführen und nicht umgekehrt?

BEARBEITEN:

Da ist einige Zeit vergangen und diese Frage ist eine beliebte. Ich möchte hier noch einen Hinweis hinzufügen, dass die Problemumgehung darin besteht, den neuen Netzstandard zu verwenden. Ich konnte das Framework 4.6.2 in eine neue Bibliothek packen.

179

Update3: 06.2019 In einigen Kommentaren heißt es, dass die Antwort nicht klar ist. Ich werde versuchen zu klären.

TL; DR:

F: Können Windows-Container unter Linux ausgeführt werden?

A: Nein. Sie können nicht. Container verwenden die zugrunde liegenden Betriebssystemressourcen und -treiber, sodass Windows-Container nur unter Windows ausgeführt werden können , und Linux-Container können nur unter Linux ausgeführt werden.

F: Aber was ist mit Docker für Windows? Oder andere VM-basierte Lösungen?

A: Mit Docker für Windows können Sie die Ausführung der Linux -Container simulieren Windows , aber unter der Haube wird Linux VM erstellt, also immer noch Linux Container laufen unter Linux und Windows Container laufen unter Windows .

Bonus: Lesen Sie diesen sehr netten Artikel über das Ausführen von Linux-Docker-Containern unter Windows

F: Also, was soll ich mit der .Net Framework 462 App machen, wenn ich möchte im Container laufen?

A: Es kommt darauf an. Nachfolgend einige Empfehlungen:

  • Wenn es möglich ist, wechseln Sie zum .Net-Core. Da .Net Core die meisten wichtigen Funktionen von .Net Framework und .Net Framework 4.8 unterstützt wird die letzte Version von .Net Framework sein
  • Wenn Sie nicht auf .Net Core migrieren können - wie @Sebastian bereits erwähnt -, können Sie Ihre Bibliotheken auf .Net Standard konvertieren und haben 2 Versionen der App - eine auf .net Framework 4.6.2 und eine auf .Net Core - ist dies nicht Immer offensichtlich, Visual Studio unterstützt es ziemlich gut (mit Multi-Targeting), aber einige Abhängigkeiten können besondere Sorgfalt erfordern

  • (Weniger empfohlen) In einigen Fällen können Sie Windows-Container ausführen. Windows-Container werden immer ausgereifter und werden auf Plattformen wie Kubernetes besser unterstützt. Um .NET Framework-Code ausführen zu können, müssen Sie jedoch weiterhin ein Basis-Image von "Server Core" mit einer Image-Größe von 1,4 GB verwenden. In den gleichen seltenen Fällen können Sie Ihren Code auf .Net Core migrieren, jedoch weiterhin auf Windows Nano-Servern mit einer Abbildgröße von 95 MB ausführen.

Belassen Sie auch die alten Updates für die Geschichte

Update2: 08.2018 Wenn Sie Docker-for-Windows verwenden, können Sie jetzt sowohl Windows- als auch Linux-Container ausführen gleichzeitig : https://blogs.msdn.Microsoft.com/premier_developer/2018/04/20/running-docker-windows-and-linux-containers-simultaneous/ =

Bonus: Nicht direkt mit der Frage verbunden, aber Sie können jetzt nicht nur den Linux-Container selbst, sondern auch einen Orchestrator wie kubernetes: https: //blog.docker) ausführen .com/2018/07/kubernetes-ist-jetzt-im-docker-desktop-stable-channel verfügbar /

Aktualisiert um 2018:

Die ursprüngliche Antwort ist im Allgemeinen richtig, ABER vor einigen Monaten, Docker hinzugefügt experimentelles Feature LCOW ( offizielles Github-Repository ) .

Von dieser Post :

Läuft Docker für Windows nicht bereits mit Linux-Containern? Stimmt. Docker für Windows kann Linux- oder Windows-Container ausführen, wobei Linux-Container über ein Hyper-V Moby Linux VM unterstützt werden (ab Docker für Windows 17.10 basiert dieses VM auf LinuxKit).

Das Setup zum Ausführen von Linux-Containern mit LCOW ist viel einfacher als die vorherige Architektur wobei ein Hyper-V-Linux VM zusammen mit allen einen Linux Docker-Daemon ausführt Ihre Container. Mit LCOW wird der Docker-Daemon als Windows-Prozess ausgeführt (genauso wie beim Ausführen von Docker-Windows-Containern). Bei jedem Start eines Linux-Containers startet Docker einen minimalen Hyper-V-Hypervisor, auf dem ein VM mit einem Linux-Kernel ausgeführt wird , runc und die darauf laufenden Containerprozesse.

Da es nur einen Docker-Daemon gibt und dieser nun unter Windows ausgeführt wird, ist i wird es bald möglich sein, Windows- und Linux-Docker-Container nebeneinander im selben Netzwerk-Namespace auszuführen . Dies wird für Docker-Benutzer unter Windows eine Menge aufregender Entwicklungs- und Produktionsszenarien eröffnen.

Original:

Wie in den Kommentaren von @PanagiotisKanavos erwähnt, sind Container nicht für die Virtualisierung vorgesehen und verwendet die Ressourcen des Host-Computers . Infolgedessen kann Windows Container derzeit nicht "wie besehen" auf einem Linux-Computer ausgeführt werden.

Aber - Sie können dies tun, indem Sie VM verwenden - so wie es unter Windows funktioniert. Sie können Windows VM auf Ihrem Linux-Host installieren, wodurch Windows-Container ausgeführt werden können.

Mit ihm wird es meiner Meinung nach nicht die beste Idee sein, es auf diese Weise in einer PROD-Umgebung auszuführen.

Auch diese Antwort liefert weitere Details.

91
evgenyl

Nein, Sie können Windows-Container nicht direkt unter Linux ausführen.

Aber Sie können Windows unter Linux ausführen.

Windows Server/10 wird mit einem Basisimage des Ubuntu-Betriebssystems ( nach dem Beta-Service Pack vom September 2016 geliefert. Aus diesem Grund können Sie Linux unter Windows ausführen und nicht auf andere Weise. Schau hier raus. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Sie können zwischen Betriebssystemcontainern für Linux und Windows wechseln, indem Sie mit der rechten Maustaste auf das Docker-Menü in der Taskleiste klicken.

enter image description here

enter image description here

16
Karthikeyan VK

Im Gegensatz zur Virtualisierung verwendet die Containerisierung dasselbe Host-Betriebssystem. Der unter Linux erstellte Container kann also nicht unter Windows ausgeführt werden und umgekehrt.

In Windows müssen Sie die Virtualisierung (mit Hyper-v) unterstützen, um dasselbe Betriebssystem wie das Betriebssystem Ihres Containers zu haben, und dann sollten Sie in der Lage sein, dasselbe auszuführen.

Docker für Windows ist eine ähnliche App, die auf Hyper-V basiert und beim Ausführen von Linux Docker Container unter Windows hilft. Aber meines Wissens gibt es nichts, was Windows-Container unter Linux unterstützen könnte.

8
sunil bhardwaj

Sie können Windows Container in einer virtuellen Maschine verwenden (das Gastbetriebssystem sollte den Anforderungen entsprechen - Windows 10 Pro oder Windows 2016).

Zum Beispiel Sie können VirtualBox verwenden, aktivieren Sie einfach Hyper-V in System/Acceleration/Paravirtualization Interface.

Wenn Docker dann aufgrund eines Fehlers nicht startet, verwenden Sie in den Einstellungen "Zu Windows-Containern wechseln ...".

(Dies könnte als Kommentar zur akzeptierten Antwort verschoben werden, aber ich habe nicht genug Ansehen, um dies zu tun.)

6
BalintPogatsa

Lösung 1 - Verwenden von VirtualBox

Wie Muhammad Sahputra in diesem Beitrag vorgeschlagen hat, ist es möglich, Windows-Betriebssysteme innerhalb VirtualBox (mit VBoxHeadless - ohne grafische Oberfläche) innerhalb Docker-Container .

Ein NAT Setup in den VM Netzwerkkonfigurationen kann auch eine Portweiterleitung durchführen, die es Ihnen ermöglicht, jeglichen Verkehr, der zum und vom Docker-Container kommt, durchzuleiten. Auf diese Weise können Sie schließlich in einer weiten Perspektive jeden Windows-basierten Dienst auf einem Linux-Computer ausführen.

Vielleicht ist dies kein typischer Anwendungsfall für einen Docker-Container, aber definitiv eine interessante Herangehensweise an das Problem.


Lösung 2 - Mit Wein

Für einfache und möglicherweise kompliziertere Anwendungen können Sie versuchen, Wein in einem Docker-Container zu verwenden.

Diese Docker-Hub-Seite kann Ihnen helfen, Ihr Ziel zu erreichen.


Ich hoffe, dass Docker bald eine native Lösung veröffentlicht, wie sie es vor einigen Jahren mit Docker-Machine unter Windows getan haben.

5
Slavik Meltser

Container verwenden den Betriebssystemkernel. Windows Container verwenden Prozesse, um ausgeführt zu werden. Theoretisch können Windows-Container also nicht unter Linux ausgeführt werden.

Es gibt jedoch Problemumgehungen bei der Verwendung von VMstyle-Lösungen.

Ich habe diese Lösung gefunden, die Vagrant und Packer auf Mac verwendet, daher sollte sie auch für Linux funktionieren: https://github.com/StefanScherer/windows-docker-machine

In dieser Vagrant-Umgebung wird ein Docker-Computer erstellt, der mit Windows-Containern auf Ihrem MacBook funktioniert. Sie können problemlos zwischen Docker für Mac Linux-Containern und Windows-Containern wechseln.

Running bash commandsenter image description here

Aufbau der kopflosen 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

Docker-Maschine erstellen

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

Zu Windows-Containern wechseln

$ eval $(docker-machine env 2019)
5
workaround

Sie können MSSQL und DOTNET heutzutage unter Linux und damit in Linux-Containern ausführen.

Siehe: https://hub.docker.com/r/Microsoft/mssql-server-linux/

Außerdem: https://hub.docker.com/r/Microsoft/dotnet/

1
dagelf

Während Docker für Windows Linux-Container perfekt ausführen kann, wird das Gegenteil aus praktischen Gründen nicht implementiert, obwohl dies theoretisch möglich ist.

Während Docker für Windows ein Linux VM frei ausführen kann, ist für Docker für Linux eine Windows-Lizenz erforderlich, um es in einer VM auszuführen.

Außerdem ist Linux vollständig anpassbar, sodass das von Docker für Windows verwendete Linux VM auf nur wenige MB reduziert wurde. Es enthält nur das Nötigste, um die Container auszuführen, während die kleinste verfügbare Windows-Distribution vorhanden ist etwa 1,5 GB. Es ist zwar keine unpraktikable Größe, aber viel umständlicher als das Gegenstück zu Linux unter Windows.

Es ist sicherlich möglich, dass jemand eine Docker for Linux-Variante verkauft, die mit einer Windows-Lizenz gebündelt ist und bereit ist, Windows-Container unter Linux auszuführen (und ich weiß nicht, ob es ein solches Produkt gibt) Bezahlen Sie den Lock-In-Preis eines Windows-Anbieters: sowohl für Geld als auch für Speicherplatz.

1
lvella