I container di Windows possono essere ospitati su Linux?


239

È possibile eseguire i contenitori di Windows su Linux ? Lo scenario si basa su un'app scritta in .NET (vecchia rete) e l' utente Linux che desidera eseguirlo con Docker per fornire net462un'API scritta su localhost.

Sto usando la versione beta da Docker Desktop per Windows

In caso negativo, perché Windows può eseguire container Linux e non viceversa?

MODIFICARE:

Con il passare del tempo e questa domanda è popolare. Vorrei aggiungere una nota qui che la soluzione alternativa consiste nell'utilizzare il nuovo netstandard. Mi ha permesso di impacchettare il 4.6.2framework in una nuova libreria.


4
Non possibile: per creare ed eseguire contenitori Windows, è necessario un sistema Windows con supporto contenitore.
ajtrichards,

5
Ok, ma perché allora Windows può eseguire container Linux? Non c'è viceversa per ora?
Sebastian 506563,

10
@ Sebastian506563 perché la finestra mobile esegue la virtualizzazione VirtualBox dietro le quinte per far funzionare i contenitori Linux su Windows. Immagino che teoricamente sia possibile anche nell'altro modo, solo la finestra mobile non lo ha implementato.
Gregory Suvalian,

5
Con le macchine virtuali, ogni VM ha il proprio sistema operativo. Con i contenitori, c'è l'immagine del sistema operativo di base e ogni contenitore aggiunge un nuovo strato sottile sopra la base. In docker questo sistema operativo di base basato su Linux. cioè il tuo contenitore di windows non può usare la base in quanto è diverso. blog.risingstack.com/...
Xen-Dara

3
@PanagiotisKanavos per favore componi risposta
Sebastian 506563,

Risposte:


162

Aggiornamento 3: 06.2019 Alcuni dei commenti dicono che la risposta non è chiara, cercherò di chiarire.

TL; DR:

D: I contenitori di Windows possono essere eseguiti su Linux?

A: No. Non possono. I contenitori utilizzano le risorse e i driver del sistema operativo sottostante, quindi i contenitori Windows possono essere eseguiti solo su Windows e i contenitori Linux possono essere eseguiti solo su Linux.

D: E Docker per Windows? O altre soluzioni basate su VM?

A: Docker per Windows consente di simulare l'esecuzione di contenitori Linux su Windows , ma sotto il cofano viene creata una VM Linux, quindi i contenitori Linux sono in esecuzione su Linux e i contenitori Windows sono in esecuzione su Windows .

Bonus: leggi questo bellissimo articolo sull'esecuzione di contenitori docker Linux su Windows.

D: Quindi, cosa devo fare con un'app .Net Framework 462, se mi piacerebbe eseguire in un contenitore?

A: Dipende. Di seguito diversi consigli:

  • Se possibile, passa a .Net Core. Poiché .Net Core supporta le principali funzionalità di .Net Framework e .Net Framework 4.8 sarà l'ultima versione di .Net framework
  • Se non riesci a migrare su .Net Core - Come accennato da @Sebastian - puoi convertire le tue librerie in .Net Standard e avere 2 versioni di app - una su .Net Framework 4.6.2 e una su .Net Core - non è sempre ovvio, Visual Studio lo supporta abbastanza bene (con multi-targeting), ma alcune dipendenze possono richiedere cure extra.

  • (Meno consigliato) In alcuni casi, è possibile eseguire i contenitori di Windows. I contenitori di Windows stanno diventando sempre più maturi, con un supporto migliore in piattaforme come Kubernetes. Per poter eseguire il codice .Net Framework, è comunque necessario eseguire sull'immagine di base di "Server Core", che occupa circa 1,4 GB. Negli stessi rari casi, è possibile migrare il codice su .Net Core, ma eseguire comunque su server Windows Nano, con una dimensione dell'immagine di 95 MB.

Lasciando anche i vecchi aggiornamenti per la storia

Update2: 08,2018 Se si utilizza Docker-per-Windows, è possibile eseguire ora entrambe le finestre e contenitori Linux simultaneamente : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- e linux-contenitori-simultaneamente-/

Bonus: non direttamente correlato alla domanda, ma ora puoi eseguire non solo il contenitore Linux stesso, ma anche orchestratore come kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stabile-channel /

Aggiornato al 2018:

La risposta originale in generale è corretta, MA diversi mesi fa, Docker ha aggiunto la funzione sperimentale LCOW ( repository ufficiale di github ).

Da questo post :

Docker per Windows non esegue già container Linux? Giusto. Docker per Windows può eseguire container Linux o Windows, con supporto per container Linux tramite una VM Hyper-V Moby Linux (a partire da Docker per Windows 17.10 questa VM si basa su LinuxKit).

L'impostazione per l'esecuzione di container Linux con LCOW è molto più semplice dell'architettura precedente in cui una VM Linux Hyper-V esegue un demone Docker Linux, insieme a tutti i container. Con LCOW, il daemon Docker viene eseguito come processo Windows (come quando si eseguono contenitori Docker Windows), e ogni volta che si avvia un contenitore Linux Docker avvia un hypervisor Hyper-V minimo che esegue una VM con un kernel Linux, runc e i processi contenitore correre in cima.

Poiché esiste un solo demone Docker e poiché quel demone ora funziona su Windows, sarà presto possibile eseguire i contenitori Docker Windows e Linux fianco a fianco, nello stesso spazio dei nomi di rete . Questo sbloccherà molti interessanti scenari di sviluppo e produzione per gli utenti Docker su Windows.

Originale:

Come menzionato nei commenti di @PanagiotisKanavos, i contenitori non sono destinati alla virtualizzazione e utilizzano le risorse del computer host . Di conseguenza, per ora il contenitore di Windows non può eseguire "così com'è" sulla macchina linux.

Ma - puoi farlo utilizzando VM - come funziona su Windows. Puoi installare Windows VM sul tuo host linux, che consentirà di eseguire i contenitori di Windows.

Con esso, IMHO eseguirlo in questo modo sull'ambiente PROD non sarà la migliore idea.

Inoltre, questa risposta fornisce maggiori dettagli.


12
La risposta collegata in realtà non fornisce alcun dettaglio al riguardo: spiega semplicemente come eseguire i contenitori Linux su Windows (l'inverso). È possibile eseguire Docker all'interno di una VM Windows, ma per questo è necessario il supporto di virtualizzazione nidificata. Ciò significa che funziona con VMware, ma non con Virtualbox.
Ralf,

3
Molte parole nella risposta ma non sembra rispondere alla domanda.
Kyberias

2
Non è la risposta alla domanda. Non dovrebbe essere classificato così in alto
Amorfo il

2
Questa NON è una risposta a questa domanda. L'esecuzione di una finestra mobile su Linux è molto diversa dall'eseguire una finestra mobile su Windows. Perché questo è contrassegnato come una risposta? \
Ani

Container = esegui in modo efficiente app isolate diff (che sono state costruite per un sistema operativo specifico), meno memoria, spazio su disco, sovraccarico, utilizzo hardware più efficiente VM = caso d'uso .. esegui interi sistemi operativi per vari casi d'uso ... (Non ho bisogno di acquistare una macchina diff per ogni sistema operativo ... se in realtà ho bisogno di più sistemi operativi per il mio caso d'uso), ma un utilizzo intenso non è eccezionale rispetto ai contenitori. Ottimo video del CTO di Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder

16

No, non è possibile eseguire i contenitori di Windows direttamente su Linux.

Ma puoi eseguire Linux su Windows.

Windows Server / 10 viene fornito con l'immagine di base del sistema operativo ubuntu ( dopo settembre 2016 beta service pack ). Questo è il motivo per cui è possibile eseguire Linux su Windows e non altri saggi. Dai un'occhiata qui. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

È possibile cambiare tra i contenitori del sistema operativo Linux e Windows facendo clic con il tasto destro sulla finestra mobile nel menu della barra delle applicazioni.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


13
L'OP sta cercando di eseguire contenitori Windows su server Linux, quindi questo non risponde alla domanda. Ma non mi piacciono le persone che danno un voto senza un commento, quindi sto dando un voto
margherita

1
@Karthikeyan V: Perché non è una risposta alla domanda.
Stefan Steiger,

Non sono sicuro di quello che ha detto prima, ma la prima affermazione dice che non puoi e la seconda dice che puoi. Probabilmente è una mancanza o qualcosa di confuso.
StingyJack,

9

A differenza della virtualizzazione, la containerizzazione utilizza lo stesso sistema operativo host. Quindi il contenitore costruito su Linux non può essere eseguito su Windows e viceversa.

In Windows, devi prendere l'aiuto del virtuallization (usando Hyper-v) per avere lo stesso sistema operativo del sistema operativo del tuo contenitore e quindi dovresti essere in grado di eseguire lo stesso.

Docker per Windows è un'app simile che si basa su Hyper-v e aiuta a eseguire il contenitore docker di Linux su Windows. Ma per quanto ne so, non esiste nulla in quanto tale che aiuti a eseguire i contenitori di Windows su Linux.


9

I contenitori usano il kernel del sistema operativo. Il contenitore di Windows utilizza i processi per essere eseguito. Quindi teoricamente parlando i contenitori di Windows non possono essere eseguiti su Linux.

Tuttavia, esistono soluzioni alternative che utilizzano le soluzioni VMstyle.

Ho trovato questa soluzione che utilizza Vagrant e Packer su Mac, quindi dovrebbe funzionare anche per Linux: https://github.com/StefanScherer/windows-docker-machine

Questo ambiente Vagrant crea una macchina Docker per funzionare sul tuo MacBook con contenitori Windows. È possibile passare facilmente dai contenitori Docker per Mac Linux ai contenitori Windows.

Esecuzione dei comandi bash inserisci qui la descrizione dell'immagine

costruendo la scatola del vagabondo senza testa

$ 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

Crea la Docker Machine

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

Passa ai contenitori di Windows

$ eval $(docker-machine env 2019)

7

Soluzione 1: utilizzo di VirtualBox

Come Muhammad Sahputra ha suggerito in questo post , è possibile eseguire il sistema operativo Windows all'interno di VirtualBox (utilizzando VBoxHeadless - senza interfaccia grafica) all'interno del contenitore Docker .

Inoltre, un'installazione NAT all'interno delle configurazioni di rete della VM può eseguire un port forwarding che ti dà la possibilità di attraversare tutto il traffico che proviene da e verso il container Docker. Questo alla fine, in una prospettiva ampia, ti consente di eseguire qualsiasi servizio basato su Windows sulla macchina Linux.

Forse questo non è un tipico caso d'uso di un container Docker, ma è sicuramente un approccio interessante al problema.


Soluzione 2 - Utilizzo di Wine

Per applicazioni semplici e forse più complicate, puoi provare a usare il vino all'interno di un contenitore docker .

Questa pagina dell'hub docker può aiutarti a raggiungere il tuo obiettivo.


Spero che Docker rilasci presto una soluzione nativa, come hanno fatto con la docker-machine su Windows diversi anni fa.


6

Puoi utilizzare i contenitori di Windows all'interno di una macchina virtuale (il sistema operativo guest deve soddisfare i requisiti: Windows 10 Pro o Windows 2016).

Ad esempio , puoi usare VirtualBox , basta abilitare Hyper-V all'interno di System / Acceleration / Paravirtualization Interface.

Dopodiché se Docker non si avvia a causa di un errore, utilizzare "Passa ai contenitori di Windows ..." nelle impostazioni.

(questo potrebbe essere spostato come un commento alla risposta accettata, ma non ho abbastanza reputazione per farlo)


3

Mentre Docker per Windows è perfettamente in grado di eseguire container Linux, il contrario, sebbene teoricamente possibile, non è implementato per motivi pratici.

Il più ovvio è che, mentre Docker per Windows può eseguire liberamente una VM Linux, Docker per Linux richiederebbe una licenza Windows per eseguirla all'interno di una VM.

Inoltre, Linux è completamente personalizzabile, quindi la VM Linux utilizzata da Docker per Windows è stata ridotta a pochi MB, contenente solo il minimo necessario per eseguire i contenitori, mentre la distribuzione di Windows più piccola disponibile è di circa 1,5 GB. Potrebbe non essere una dimensione impraticabile, ma è molto più ingombrante rispetto alla controparte Linux su Windows.

Mentre è certamente possibile per qualcuno vendere una variante Docker per Linux in bundle con una licenza Windows e pronta per eseguire contenitori Windows su Linux (e non so se esiste un tale prodotto), la linea di fondo è che non puoi evitare pagamento del prezzo di blocco del fornitore di Windows: sia in termini di denaro che di spazio di archiviazione.


0

Al giorno d'oggi è possibile eseguire MSSQL e .NET Core su Linux, e quindi all'interno di container Linux.

Vedi: https://hub.docker.com/r/microsoft/mssql-server-linux/

Inoltre: https://hub.docker.com/r/microsoft/dotnet/

La domanda diretta alla tua risposta è, ovviamente, a meno che non esista una versione compilata appositamente per Linux, no.


3
Questo è vero, ma non ha nulla a che fare con la domanda. Inoltre MS-SQL è molto più di un semplice motore (che su Linux arriva senza filestream o R), quindi non è nemmeno l'intero motore).
Stefan Steiger,

Devi pensare un passo avanti ... perché lo sta chiedendo? Se lo sta chiedendo perché vuole eseguire uno di questi: voilà.
dagelf,

2
Possibile. Ma IMHO, probabilmente sta ponendo la domanda perché lo ha già fatto, e ora deve eseguire cose come SSRS / SSAS o alcuni controlli di moduli Web, come ReportViewer, su Linux.
Stefan Steiger,

Docker image microsoft / dotnet è per .Net Core, che è qualcosa di completamente diverso dal vecchio .Net 4.x quindi non è possibile eseguire un'app progettata per il vecchio .Net su .Net Core
j123b567

3
Stanno supportando .NET Coree NON .NET - questi sono due ambienti completamente diversi.
Slavik Meltser,

-1

I contenitori di Windows non sono in esecuzione su Linux e inoltre non è possibile eseguire direttamente i contenitori di Linux su Windows.


6
Puoi elaborare un po '?
Matthieu,

18
Puoi eseguire i contenitori Linux su Win 10
Kugel,

2
Ho votato questo ragazzo, perché penso che fosse vero al momento. Tuttavia, ora è possibile eseguire container Linux in Docker su Windows (Docker viene eseguito in una VM chiamata MobyLinux).
JakeJ,

Windows esegue una piccola macchina virtuale Linux per eseguire container Linux. controlla le tue risorse hyper-v per vederlo
Tuğrul Karakaya
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.