Czy kontenery Windows mogą być hostowane na systemie Linux?

238

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ć net462napisany 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.2framework do nowej biblioteki.

Sebastian 506563
źródło
4
Niemożliwe - do zbudowania i uruchomienia kontenerów Windows wymagany jest system Windows z obsługą kontenerów.
ajtrichards
5
Ok, ale dlaczego więc Windows może uruchamiać kontenery Linux Na razie nie ma odwrotnie?
Sebastian 506563,
10
@ Sebastian506563, ponieważ doker uruchamia wirtualizację VirtualBox za kulisami, aby kontenery Linux działały w systemie Windows. Sądzę, że teoretycznie będzie to możliwe również w drugą stronę, po prostu doker go nie wdrożył.
Gregory Suvalian
5
W przypadku maszyn wirtualnych każdy vm ma własny system operacyjny. W przypadku kontenerów istnieje podstawowy obraz systemu operacyjnego, a każdy kontener dodaje nową cienką warstwę na górze bazy. W oknie dokowanym ten podstawowy system operacyjny oparty na systemie Linux. tzn. kontener Windows nie może korzystać z bazy, ponieważ jest inna. blog.risingstack.com/…
-dara,
3
@PanagiotisKanavos proszę napisać odpowiedź
Sebastian 506563

Odpowiedzi:

162

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 to możliwe - przejdź do .Net Core. Ponieważ .Net Core zapewnia obsługę większości głównych funkcji .Net Framework, a .Net Framework 4.8 będzie ostatnią wersją .NET Framework
  • 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 :

Czy Docker dla Windows nie obsługuje już kontenerów Linux? Zgadza się. Docker dla systemu Windows może uruchamiać kontenery Linux lub Windows z obsługą kontenerów Linux za pośrednictwem maszyny Wirtualnej Moby Linux Hyper-V (od Docker dla Windows 17.10 ta maszyna wirtualna jest oparta na LinuxKit).

Konfiguracja do uruchamiania kontenerów Linux z LCOW jest o wiele prostsza niż w poprzedniej architekturze, w której VM VM Hyper-V uruchamia demona Linux Docker wraz ze wszystkimi twoimi kontenerami. W przypadku LCOW demon Docker działa jako proces systemu Windows (tak samo jak podczas uruchamiania kontenerów Docker Windows) i za każdym razem, gdy uruchamiasz kontener Linux Docker uruchamia minimalny hypervisor Hyper-V z maszyną wirtualną z jądrem Linux, runc i procesami kontenerowymi działa na górze.

Ponieważ istnieje tylko jeden demon Docker i ponieważ ten demon działa teraz w systemie Windows, wkrótce będzie można uruchomić kontenery Windows i Linux Docker obok siebie, w tej samej sieciowej przestrzeni nazw . Pozwoli to odblokować wiele ekscytujących scenariuszy rozwoju i produkcji dla użytkowników Docker w systemie Windows.

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.

evgenyl
źródło
12
Połączona odpowiedź tak naprawdę nie zawiera żadnych szczegółów na ten temat - po prostu wyjaśnia, jak uruchomić kontenery Linuksa w systemie Windows (odwrotnie). Możliwe jest uruchomienie Dockera w maszynie wirtualnej z systemem Windows, ale potrzebujesz do tego zagnieżdżonej obsługi wirtualizacji. Oznacza to, że działa z VMware, ale nie Virtualbox.
Ralf
3
Wiele słów w odpowiedzi, ale wydaje się, że nie odpowiada na pytanie.
Kyberias
2
To nie jest odpowiedź na pytanie. To nie powinno być tak wysoko ocenione
Amorphous
2
To NIE jest odpowiedź na to pytanie. Uruchamianie dokera w systemie Linux JEST OZNACZNIE inne niż uruchamianie dokera w systemie Windows. Dlaczego jest to oznaczone jako odpowiedź? \
Ani
Kontenery = wydajne uruchamianie izolowanych aplikacji różnicowych (które zostały zbudowane dla określonego systemu operacyjnego), mniej pamięci, miejsca na dysku, narzutów, bardziej wydajne wykorzystanie sprzętu Maszyny wirtualne = przypadek użycia .. uruchamianie całych systemów operacyjnych dla różnych przypadków użycia ..., wykorzystanie sprzętu jest dobre (Nie muszę kupować maszyny różnicowej dla każdego systemu operacyjnego ... jeśli faktycznie potrzebuję wielu systemów operacyjnych dla mojego przypadku użycia), ale trudne wykorzystanie nie jest tak świetne w porównaniu do kontenerów. Świetne wideo autorstwa CTO Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder
16

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ń.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Karthikeyan VK
źródło
13
OP chce zamiast tego uruchomić kontenery Windows na serwerach Linux, więc ten nie odpowiada na pytanie. Ale nie lubię ludzi, którzy oddają głos bez komentarza, więc oddaję głos
stokrotka,
1
@Karthikeyan V: Ponieważ to nie jest odpowiedź na pytanie.
Stefan Steiger
Nie jestem pewien, co powiedział wcześniej, ale pierwsze stwierdzenie mówi, że nie możesz, a drugie mówi, że możesz. Prawdopodobnie jest to zaginiony lub mylący.
StingyJack
9

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.

sunil bhardwaj
źródło
9

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

To środowisko Vagrant tworzy maszynę dokującą do pracy na komputerze MacBook z kontenerami Windows. Możesz łatwo przełączać się między kontenerami Docker dla komputerów Mac Linux i kontenerami Windows.

Uruchamianie poleceń bash wprowadź opis zdjęcia tutaj

budując bezgłowe pudełko Vagrant

$ 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

Utwórz maszynę dokującą

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

Przejdź do kontenerów Windows

$ eval $(docker-machine env 2019)
obejście
źródło
7

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.

Slavik Meltser
źródło
6

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ć)

BalintPogatsa
źródło
3

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.

lvella
źródło
0

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.

dagelf
źródło
3
To prawda - ale nie ma to nic wspólnego z pytaniem. Plus MS-SQL to coś więcej niż tylko silnik (który w systemie Linux jest przy okazji bez strumienia plików lub R - więc nie jest to nawet cały silnik).
Stefan Steiger
Musisz pomyśleć o krok do przodu ... dlaczego on pyta? Jeśli pyta, bo chce uruchomić jeden z nich: voila.
dagelf
2
Możliwy. Ale IMHO prawdopodobnie zadaje to pytanie, ponieważ już to zrobił, a teraz musi uruchamiać takie rzeczy, jak SSRS / SSAS lub niektóre formanty internetowe, takie jak ReportViewer, w systemie Linux.
Stefan Steiger
Obraz Docker microsoft / dotnet jest przeznaczony dla platformy .Net Core, która jest czymś zupełnie innym niż stary .Net 4.x, więc nie można uruchomić aplikacji zaprojektowanej dla starej
platformy
3
Obsługują .NET Corei NIE .NET - są to dwa zupełnie różne środowiska.
Slavik Meltser
-1

Kontenery systemu Windows nie działają w systemie Linux, a także Kontenery systemu Linux nie można uruchamiać bezpośrednio w systemie Windows.

Ehsan
źródło
6
Czy możesz trochę rozwinąć?
Matthieu,
18
Możesz uruchomić kontenery z linuksem na Win 10
Kugel
2
Głosowałem za tym facetem, ponieważ uważam, że to była prawda. Możesz jednak teraz uruchamiać kontenery Linuksa w Dockerze w systemie Windows (Docker działa na maszynie wirtualnej o nazwie MobyLinux).
JakeJ
W rzeczywistości system Windows uruchamia małą maszynę wirtualną z systemem Linux do uruchamiania kontenerów Linux. sprawdź swoje zasoby hyper-v, aby je zobaczyć
Tuğrul Karakaya