Czy można uruchomić Windows Containers w systemie Linux ? Scenariusz oparty jest na aplikacji napisanej w .NET (stara sieć) i na użytkownikach systemu Linux, którzy chcą uruchomić to z Dockerem, aby zapewnić net462
napisany interfejs API w systemie localhost
.
Używam wersji beta z Docker Desktop dla Windows
Jeśli nie, to dlaczego Windows może uruchamiać kontenery z Linuksem, a nie odwrotnie?
EDYTOWAĆ:
Minęło trochę czasu i to pytanie jest popularne. Chciałbym tutaj dodać jedną uwagę, że obejściem jest użycie nowego standardu sieciowego. Pozwoliło mi to spakować 4.6.2
framework do nowej biblioteki.
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
źródło
źródło
Odpowiedzi:
Aktualizacja 3: 06.2019 Niektóre komentarze mówią, że odpowiedź nie jest jasna, postaram się wyjaśnić.
TL; DR:
P: Czy kontenery z systemem Windows mogą działać w systemie Linux?
Odp .: Nie. Nie mogą. Kontenery używają podstawowych zasobów i sterowników systemu operacyjnego, więc kontenery Windows mogą działać tylko w systemie Windows, a kontenery Linux mogą działać tylko w systemie Linux.
P: Ale co z Dockerem dla Windows? A może inne rozwiązania oparte na maszynach wirtualnych?
Odp .: Docker dla systemu Windows umożliwia symulację działania kontenerów Linux w systemie Windows , ale pod maską tworzona jest maszyna wirtualna z systemem Linux, więc nadal kontenery Linux działają w systemie Linux, a kontenery Windows działają w systemie Windows .
Bonus: przeczytaj ten bardzo fajny artykuł na temat uruchamiania kontenerów dokerów Linux w systemie Windows.
P: Więc co powinienem zrobić z aplikacją .Net Framework 462, jeśli chciałbym uruchomić w kontenerze?
Odp .: To zależy. Po kilku zaleceniach:
Jeśli nie możesz przeprowadzić migracji do .Net Core - jak wspomniano w @Sebastian - możesz przekonwertować biblioteki na .Net Standard i mieć 2 wersje aplikacji - jedną w .Net Framework 4.6.2, a drugą w .Net Core - nie jest to zawsze oczywiste, Visual Studio obsługuje go całkiem dobrze (z wieloma celowaniem), ale niektóre zależności mogą wymagać dodatkowej opieki.
(Mniej zalecane) W niektórych przypadkach możesz uruchamiać kontenery Windows. Kontenery Windows stają się coraz bardziej dojrzałe, z lepszą obsługą na platformach takich jak Kubernetes. Ale aby móc uruchomić kod .Net Framework, nadal musisz uruchomić na podstawowym obrazie „Server Core”, który zajmuje około 1,4 GB. W tych samych rzadkich przypadkach możesz migrować kod do .Net Core, ale nadal działać na serwerach Windows Nano o rozmiarze obrazu 95 MB.
Pozostawiając również stare aktualizacje historii
Aktualizacja 2: 08.2018 Jeśli korzystasz z Docker-for-Windows, możesz teraz uruchamiać jednocześnie kontenery Windows i Linux: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- i-kontenery-linux-jednocześnie /
Bonus: Nie jest bezpośrednio związany z pytaniem, ale możesz teraz uruchomić nie tylko sam kontener linux, ale także programistę, takiego jak kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /
Zaktualizowano w 2018 r .:
Oryginalna odpowiedź jest poprawna, ALE kilka miesięcy temu doker dodał eksperymentalną funkcję LCOW ( oficjalne repozytorium github ).
Z tego postu :
Oryginalny:
Jak wspomniano w komentarzach @PanagiotisKanavos, kontenery nie są przeznaczone do wirtualizacji i wykorzystują zasoby komputera hosta . W rezultacie, na razie kontener Windows nie może działać "tak jak jest" na komputerze z systemem Linux.
Ale - możesz to zrobić za pomocą maszyny wirtualnej - ponieważ działa w systemie Windows. Możesz zainstalować Windows VM na swoim hoście Linux, co pozwoli na uruchamianie kontenerów Windows.
Dzięki niemu IMHO uruchomione w ten sposób na środowisku PROD nie będzie najlepszym pomysłem.
Również ta odpowiedź zawiera więcej szczegółów.
źródło
Nie, nie można uruchamiać kontenerów Windows bezpośrednio w systemie Linux.
Ale możesz uruchomić Linuksa w systemie Windows.
Windows Server / 10 jest dostarczany z podstawowym obrazem systemu operacyjnego Ubuntu ( po pakiecie serwisowym beta z września 2016 r .). To jest powód, dla którego możesz uruchamiać Linuksa na Windowsie, a nie w inny sposób. Sprawdź tutaj. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
Możesz przełączać między kontenerami systemu operacyjnego Linux i Windows, klikając prawym przyciskiem myszy okno dokowane w menu paska zadań.
źródło
W przeciwieństwie do wirtualizacji, kontenerizacja używa tego samego systemu operacyjnego. Tak więc kontener zbudowany na systemie Linux nie może być uruchamiany w systemie Windows i odwrotnie.
W systemie Windows musisz skorzystać z wirtualizacji (używając Hyper-v), aby mieć taki sam system operacyjny jak system operacyjny swojego kontenera, a następnie powinieneś być w stanie uruchomić to samo.
Docker dla systemu Windows jest podobną aplikacją opartą na Hyper-v i pomaga w uruchamianiu kontenera dokującego systemu Linux w systemie Windows. Ale o ile wiem, nie ma nic takiego, co pomogłoby uruchamiać kontenery Windows na Linuksie.
źródło
Kontenery używają jądra systemu operacyjnego. Windows Container wykorzystuje procesy do uruchomienia. Więc teoretycznie kontenery Windows nie mogą działać w systemie Linux.
Istnieją jednak obejścia wykorzystujące rozwiązania VMstyle.
Znalazłem to rozwiązanie, które wykorzystuje Vagrant i Packer na Macu, więc powinno działać również w systemie Linux: https://github.com/StefanScherer/windows-docker-machine
źródło
Rozwiązanie 1 - Korzystanie z VirtualBox
Jak zasugerował Muhammad Sahputra w tym poście , możliwe jest uruchomienie systemu operacyjnego Windows w VirtualBox (przy użyciu VBoxHeadless - bez interfejsu graficznego) w kontenerze Docker .
Ponadto konfiguracja NAT w konfiguracjach sieci maszyn wirtualnych może przekierowywać porty, co umożliwia przekazywanie dowolnego ruchu przychodzącego i wychodzącego z kontenera Docker. To ostatecznie, w szerokiej perspektywie, pozwala uruchomić dowolną usługę opartą na systemie Windows na komputerze z systemem Linux.
Może nie jest to typowy przypadek użycia kontenera Docker, ale zdecydowanie interesujące podejście do problemu.
Rozwiązanie 2 - Korzystanie z wina
W przypadku prostych aplikacji i być może bardziej skomplikowanych możesz spróbować użyć wina w pojemniku dokowanym .
Ta strona centrum dokowania może pomóc w osiągnięciu celu.
Mam nadzieję, że Docker wkrótce wyda natywne rozwiązanie, tak jak to zrobili z maszyną dokującą w systemie Windows kilka lat temu.
źródło
Możesz korzystać z kontenerów Windows wewnątrz maszyny wirtualnej (system operacyjny gościa powinien spełniać wymagania - Windows 10 Pro lub Windows 2016).
Na przykład możesz użyć VirtualBox , po prostu włącz Hyper-V w interfejsie System / Acceleration / Paravirtualization.
Następnie, jeśli Docker nie uruchamia się z powodu błędu, użyj „Przełącz do kontenerów Windows ...” w ustawieniach.
(można to przenieść jako komentarz do zaakceptowanej odpowiedzi, ale nie mam wystarczającej reputacji, aby to zrobić)
źródło
Podczas gdy Docker dla Windows jest w pełni zdolny do uruchamiania kontenerów Linux, odwrotnie, chociaż teoretycznie jest to możliwe, nie jest implementowany ze względów praktycznych.
Najbardziej oczywistym z nich jest to, że chociaż Docker dla systemu Windows może swobodnie uruchamiać maszynę wirtualną z systemem Linux, Docker dla systemu Linux wymaga licencji systemu Windows, aby uruchomić ją w maszynie wirtualnej.
Ponadto system Linux można całkowicie dostosować, dlatego maszynę wirtualną z systemem Linux używaną przez program Docker dla systemu Windows zmniejszono do zaledwie kilku MB, zawierając jedynie absolutne minimum potrzebne do uruchomienia kontenerów, podczas gdy najmniejsza dostępna dystrybucja systemu Windows wynosi około 1,5 GB. Może to nie być niewykonalny rozmiar, ale jest o wiele bardziej kłopotliwy niż odpowiednik systemu Linux w systemie Windows.
Chociaż na pewno jest możliwe, aby ktoś sprzedał odmianę Docker dla Linux w pakiecie z licencją Windows i jest gotowy do uruchomienia kontenerów Windows pod Linux (i nie wiem, czy taki produkt istnieje), najważniejsze jest to, że nie można uniknąć płacąca cena blokady dostawcy systemu Windows: zarówno pod względem pieniędzy, jak i przestrzeni dyskowej.
źródło
Obecnie można uruchamiać MSSQL i .NET Core w systemie Linux, a zatem w kontenerach Linux.
Zobacz: https://hub.docker.com/r/microsoft/mssql-server-linux/
Ponadto: https://hub.docker.com/r/microsoft/dotnet/
Bezpośrednie pytanie do twojej odpowiedzi brzmi oczywiście, chyba że istnieje wersja skompilowana specjalnie dla Linuksa, nie.
źródło
.NET Core
i NIE.NET
- są to dwa zupełnie różne środowiska.Kontenery systemu Windows nie działają w systemie Linux, a także Kontenery systemu Linux nie można uruchamiać bezpośrednio w systemie Windows.
źródło