Ist es möglich, Windows Container unter Linux auszuführen ? Das Szenario basiert auf einer in .NET (altes Netz) geschriebenen App und dem Linux-Benutzer , der dies mit Docker ausführen möchte, um eine net462
geschriebene API auf dem .NET bereitzustellen localhost
.
Ich verwende die Beta-Version von Docker Desktop für Windows
Wenn nein, warum kann Windows dann Linux-Container ausführen und nicht umgekehrt?
BEARBEITEN:
Da ist einige Zeit vergangen und diese Frage ist eine beliebte. Ich möchte hier einen Hinweis hinzufügen, dass die Problemumgehung darin besteht, den neuen Netzstandard zu verwenden. Dadurch konnte ich das 4.6.2
Framework in eine neue Bibliothek packen .
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
quelle
quelle
Antworten:
Update3: 06.2019 Einige Kommentare besagen, 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 und Linux-Container nur unter Linux ausgeführt werden können.
F: Aber was ist mit Docker für Windows? Oder andere VM-basierte Lösungen?
A: Mit Docker für Windows können Sie das Ausführen von Linux- Containern unter Windows simulieren. Unter der Haube wird jedoch eine Linux-VM erstellt, sodass weiterhin Linux-Container unter Linux und Windows-Container unter Windows ausgeführt werden .
Bonus: Lesen Sie diesen sehr schönen Artikel über das Ausführen von Linux-Docker-Containern unter Windows.
F: Was soll ich mit einer .Net Framework 462-App tun, wenn ich in einem Container ausgeführt werden möchte?
A: Es kommt darauf an. Folgende mehrere Empfehlungen:
Wenn Sie nicht auf .Net Core migrieren können - wie bei @Sebastian erwähnt - können Sie Ihre Bibliotheken in .Net Standard konvertieren und haben zwei Versionen der App - eine auf .Net Framework 4.6.2 und eine auf .Net Core - dies ist nicht der Fall Visual Studio unterstützt es immer 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 unterstützen Plattformen wie Kubernetes besser. Um jedoch .NET Framework-Code ausführen zu können, müssen Sie weiterhin das Basis-Image von "Server Core" ausführen, das etwa 1,4 GB belegt. In den gleichen seltenen Fällen können Sie Ihren Code auf .Net Core migrieren, aber dennoch auf Windows Nano-Servern mit einer Image-Größe von 95 MB ausführen.
Lassen 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 gleichzeitig ausführen: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- und-Linux-Container-gleichzeitig /
Bonus: Nicht direkt mit der Frage verbunden, aber Sie können jetzt nicht nur den Linux-Container selbst ausführen, sondern auch Orchestrator wie kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stabile-kanal /
Aktualisiert um 2018:
Die ursprüngliche Antwort im Allgemeinen ist richtig, ABER vor einigen Monaten hat Docker das experimentelle Feature LCOW ( offizielles Github-Repository ) hinzugefügt .
Aus diesem Beitrag :
Original:
Wie in den Kommentaren von @PanagiotisKanavos erwähnt, sind Container nicht für die Virtualisierung vorgesehen und verwenden die Ressourcen des Hostcomputers . Daher kann der Windows-Container derzeit nicht "wie besehen" auf einem Linux-Computer ausgeführt werden.
Aber - Sie können es mit VM tun - wie es unter Windows funktioniert. Sie können Windows VM auf Ihrem Linux-Host installieren, um Windows-Container ausführen zu können.
Damit 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.
quelle
Nein, Sie können Windows-Container nicht direkt unter Linux ausführen.
Sie können Linux jedoch unter Windows ausführen.
Windows Server / 10 wird mit einem Basis-Image des Ubuntu-Betriebssystems geliefert ( nach dem Beta-Service-Pack vom September 2016 ). Das ist der Grund, warum Sie Linux unter Windows ausführen können und nicht anders. Hier geht es zur Sache. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
Sie können zwischen Betriebssystemcontainern Linux und Windows wechseln, indem Sie mit der rechten Maustaste auf das Docker-Menü in der Taskleiste klicken.
quelle
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 Virtuallisierung (mit Hyper-v) in Anspruch nehmen, um dasselbe Betriebssystem wie das Betriebssystem Ihrer Container 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 des Linux Docker-Containers unter Windows hilft. Aber soweit ich weiß, gibt es nichts, was dazu beiträgt, Windows-Container unter Linux auszuführen.
quelle
Container verwenden den Betriebssystemkern. Windows Container verwendet Prozesse, um ausgeführt zu werden. Theoretisch können Windows-Container also nicht unter Linux ausgeführt werden.
Es gibt jedoch Problemumgehungen, bei denen VMstyle-Lösungen verwendet werden.
Ich habe diese Lösung gefunden, die Vagrant und Packer auf dem Mac verwendet, daher sollte sie auch unter Linux funktionieren: https://github.com/StefanScherer/windows-docker-machine
quelle
Lösung 1 - Verwenden von VirtualBox
Wie Muhammad Sahputra in diesem Beitrag vorgeschlagen hat , ist es möglich, das Windows-Betriebssystem in VirtualBox (mit VBoxHeadless - ohne grafische Oberfläche) im Docker-Container auszuführen .
Ein NAT-Setup in den VM-Netzwerkkonfigurationen kann auch eine Portweiterleitung durchführen, mit der Sie den gesamten Datenverkehr zum und vom Docker-Container weiterleiten können. Auf diese Weise können Sie in einer weiten Perspektive jeden Windows-basierten Dienst auf einem Linux-Computer ausführen.
Vielleicht ist dies kein typischer Anwendungsfall eines Docker-Containers, aber es ist definitiv eine interessante Herangehensweise an das Problem.
Lösung 2 - Verwenden von 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.
quelle
Sie können Windows-Container in einer virtuellen Maschine verwenden (das Gastbetriebssystem sollte den Anforderungen entsprechen - Windows 10 Pro oder Windows 2016).
Sie können beispielsweise VirtualBox verwenden . Aktivieren Sie einfach Hyper-V in der System- / Beschleunigungs- / Paravirtualisierungsschnittstelle.
Wenn Docker danach aufgrund eines Fehlers nicht gestartet wird, verwenden Sie in den Einstellungen "Zu Windows-Containern wechseln ...".
(Dies könnte als Kommentar zur akzeptierten Antwort verschoben werden, aber ich habe nicht genug Ruf, um dies zu tun.)
quelle
Während Docker für Windows Linux-Container perfekt ausführen kann, ist das Gegenteil, obwohl theoretisch möglich, aus praktischen Gründen nicht implementiert.
Das offensichtlichste ist, dass Docker für Windows zwar eine Linux-VM frei ausführen kann, Docker für Linux jedoch eine Windows-Lizenz benötigt, um sie in einer VM auszuführen.
Außerdem ist Linux vollständig anpassbar, sodass die von Docker für Windows verwendete Linux-VM auf wenige MB reduziert wurde und nur das für die Ausführung der Container erforderliche Minimum enthält, während die kleinste verfügbare Windows-Distribution etwa 1,5 GB beträgt. Es ist vielleicht keine undurchführbare Größe, aber es ist viel umständlicher als das Gegenstück zu Linux unter Windows.
Zwar ist es sicherlich möglich, dass jemand eine Docker für Linux-Variante verkauft, die mit einer Windows-Lizenz gebündelt und bereit ist, Windows-Container unter Linux auszuführen (und ich weiß nicht, ob ein solches Produkt vorhanden ist), aber unter dem Strich können Sie dies nicht vermeiden Bezahlen des Windows-Anbietersperrpreises: sowohl in Geld als auch in Speicherplatz.
quelle
Sie können MSSQL und .NET Core 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/
Die direkte Frage zu Ihrer Antwort lautet natürlich, es sei denn, es gibt eine speziell für Linux kompilierte Version, nein.
quelle
.NET Core
und NICHT.NET
- dies sind zwei völlig unterschiedliche Umgebungen.Windows-Container laufen nicht unter Linux und Sie können Linux-Container auch nicht direkt unter Windows ausführen.
quelle