Les conteneurs Windows peuvent-ils être hébergés sur Linux?

239

Est-il possible d'exécuter des conteneurs Windows sous Linux ? Le scénario est basé sur une application écrite dans le .NET (ancien réseau) et l' utilisateur Linux qui souhaite l'exécuter avec Docker pour fournir une net462API écrite sur le localhost.

J'utilise la version bêta de Docker Desktop pour Windows

Si non, pourquoi Windows peut-il exécuter des conteneurs Linux et non l'inverse?

ÉDITER:

Comme un certain temps s'est écoulé et cette question est populaire. Je voudrais ajouter une note ici que la solution de contournement consiste à utiliser le nouveau netstandard. Cela m'a permis d'intégrer le 4.6.2framework dans une nouvelle bibliothèque.

Sebastian 506563
la source
4
Impossible - Pour créer et exécuter des conteneurs Windows, un système Windows avec prise en charge des conteneurs est requis.
ajtrichards
5
Ok, mais pourquoi Windows peut-il alors exécuter des conteneurs Linux? Il n'y a pas vice-versa pour l'instant?
Sebastian 506563
10
@ Sebastian506563 car Docker exécute la virtualisation VirtualBox en arrière-plan pour faire fonctionner les conteneurs Linux sur Windows. Je suppose que théoriquement, cela sera également possible dans l'autre sens, juste Docker ne l'a pas mis en œuvre.
Gregory Suvalian
5
Avec les machines virtuelles, chaque VM a son propre système d'exploitation. Avec les conteneurs, il y a une image de base du système d'exploitation et chaque conteneur ajoute une nouvelle couche mince sur le dessus de la base. Dans Docker, ce système d'exploitation de base est basé sur Linux. c'est-à-dire que votre conteneur Windows ne peut pas utiliser la base car elle est différente. blog.risingstack.com/…
xen-dara
3
@PanagiotisKanavos s'il vous plaît composez la réponse
Sebastian 506563

Réponses:

162

Update3: 06.2019 Certains commentaires disent que la réponse n'est pas claire, je vais essayer de clarifier.

TL; DR:

Q: Les conteneurs Windows peuvent-ils fonctionner sous Linux?

R: Non. Ils ne peuvent pas. Les conteneurs utilisent les ressources et les pilotes du système d'exploitation sous-jacent, de sorte que les conteneurs Windows peuvent s'exécuter uniquement sur Windows et les conteneurs Linux peuvent s'exécuter uniquement sur Linux.

Q: Mais qu'en est-il de Docker pour Windows? Ou d'autres solutions basées sur VM?

R: Docker pour Windows vous permet de simuler l'exécution de conteneurs Linux sur Windows , mais sous le capot, une machine virtuelle Linux est créée, de sorte que les conteneurs Linux fonctionnent toujours sur Linux et que les conteneurs Windows fonctionnent sur Windows .

Bonus: lisez ce très bel article sur l'exécution de conteneurs Docker Linux sur Windows.

Q: Alors, que dois-je faire avec une application .Net Framework 462, si je souhaite exécuter dans un conteneur?

R: Cela dépend. Suite à plusieurs recommandations:

  • Si c'est possible - passez à .Net Core. Étant donné que .Net Core prend en charge la plupart des principales fonctionnalités de .Net Framework, et .Net Framework 4.8 sera la dernière version de .Net Framework
  • Si vous ne pouvez pas migrer vers .Net Core - Comme @Sebastian l'a mentionné - vous pouvez convertir vos bibliothèques en .Net Standard et avoir 2 versions d'application - une sur .Net Framework 4.6.2 et une sur .Net Core - ce n'est pas toujours évident, Visual Studio le supporte assez bien (avec multi-ciblage), mais certaines dépendances peuvent nécessiter des précautions supplémentaires.

  • (Moins recommandé) Dans certains cas, vous pouvez exécuter des conteneurs Windows. Les conteneurs Windows deviennent de plus en plus matures, avec une meilleure prise en charge dans des plateformes comme Kubernetes. Mais pour pouvoir exécuter le code .Net Framework, vous devez toujours exécuter l'image de base de "Server Core", qui occupe environ 1,4 Go. Dans les mêmes cas rares, vous pouvez migrer votre code vers .Net Core, mais toujours exécuter sur des serveurs Windows Nano, avec une taille d'image de 95 Mo.

Laissant également les anciennes mises à jour pour l'histoire

Update2: 08.2018 Si vous utilisez Docker-for-Windows, vous pouvez maintenant exécuter simultanément les conteneurs Windows et Linux: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- et-linux-containers-simultanément /

Bonus: pas directement lié à la question, mais vous pouvez désormais exécuter non seulement le conteneur Linux lui-même, mais aussi un orchestrateur comme kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /

Mis à jour en 2018:

La réponse originale en général est juste, MAIS il y a plusieurs mois, Docker a ajouté la fonctionnalité expérimentale LCOW ( dépôt github officiel ).

De ce post :

Docker pour Windows n'exécute-t-il pas déjà des conteneurs Linux? C'est vrai. Docker pour Windows peut exécuter des conteneurs Linux ou Windows, avec prise en charge des conteneurs Linux via une machine virtuelle Hyper-V Moby Linux (à partir de Docker pour Windows 17.10, cette machine virtuelle est basée sur LinuxKit).

La configuration pour exécuter des conteneurs Linux avec LCOW est beaucoup plus simple que l'architecture précédente où une machine virtuelle Hyper-V Linux exécute un démon Linux Docker, avec tous vos conteneurs. Avec LCOW, le démon Docker s'exécute comme un processus Windows (comme lors de l'exécution de conteneurs Docker Windows), et chaque fois que vous démarrez un conteneur Linux, Docker lance un hyperviseur Hyper-V minimal exécutant une machine virtuelle avec un noyau Linux, runc et les processus de conteneur courir sur le dessus.

Parce qu'il n'y a qu'un seul démon Docker, et parce que ce démon s'exécute maintenant sous Windows, il sera bientôt possible d'exécuter côte à côte les conteneurs Windows et Linux Docker, dans le même espace de nom réseau . Cela débloquera de nombreux scénarios de développement et de production passionnants pour les utilisateurs Docker sous Windows.

Original:

Comme mentionné dans les commentaires de @PanagiotisKanavos, les conteneurs ne sont pas destinés à la virtualisation et utilisent les ressources de la machine hôte . Par conséquent, pour l'instant, le conteneur Windows ne peut pas fonctionner "tel quel" sur une machine Linux.

Mais - vous pouvez le faire en utilisant VM - car cela fonctionne sur Windows. Vous pouvez installer Windows VM sur votre hôte Linux, ce qui permettra d'exécuter des conteneurs Windows.

Avec elle, IMHO l'exécuter de cette façon sur l'environnement PROD ne sera pas la meilleure idée.

En outre, cette réponse fournit plus de détails.

evgenyl
la source
12
La réponse liée ne fournit en fait aucun détail à ce sujet - elle explique simplement comment exécuter des conteneurs Linux sur Windows (l'inverse). Il est possible d'exécuter Docker dans une machine virtuelle Windows, mais vous avez besoin d'un support de virtualisation imbriqué pour cela. Cela signifie qu'il fonctionne avec VMware, mais pas Virtualbox.
Ralf
3
Beaucoup de mots dans la réponse mais cela ne semble pas répondre à la question.
Kyberias
2
Ce n'est pas la réponse à la question. Il ne devrait pas être aussi bien classé
Amorphous
2
Ce n'est PAS une réponse à cette question. Exécuter Docker sous Linux est VRAIMENT différent de l'exécution de Docker sous Windows. Pourquoi est-ce marqué comme réponse? \
Ani
Conteneurs = exécuter efficacement différentes applications isolées (qui ont été conçues pour un système d'exploitation spécifique), moins de mémoire, d'espace disque, de surcharge, une utilisation matérielle plus efficace des machines virtuelles = cas d'utilisation .. exécuter des systèmes d'exploitation entiers pour divers cas d'utilisation ..., l'utilisation du matériel est bonne (Je n'ai pas besoin d'acheter une machine diff pour chaque système d'exploitation ... si j'ai réellement besoin de plusieurs systèmes d'exploitation pour mon cas d'utilisation), mais une utilisation intensive n'est pas aussi grande que les conteneurs. Superbe vidéo par CTO de Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder
16

Non, vous ne pouvez pas exécuter de conteneurs Windows directement sur Linux.

Mais vous pouvez exécuter Linux sur Windows.

Windows Server / 10 est fourni avec une image de base d'ubuntu OS ( après septembre 2016 beta service pack ). C'est la raison pour laquelle vous pouvez exécuter Linux sur Windows et pas autrement. Découvrez ici. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Vous pouvez basculer entre les conteneurs OS Linux et Windows en cliquant avec le bouton droit sur le menu fixe dans le menu de la barre d'état.

entrez la description de l'image ici

entrez la description de l'image ici

Karthikeyan VK
la source
13
L'OP cherche à exécuter des conteneurs Windows sur des serveurs Linux à la place, donc celui-ci ne répond pas à la question. Mais je n'aime pas les gens qui donnent un downvote sans un commentaire, donc je donne un upvote
daisy
1
@Karthikeyan V: Parce que ce n'est pas une réponse à la question.
Stefan Steiger
Je ne sais pas ce qu'il a dit auparavant, mais la première déclaration dit que vous ne pouvez pas et la seconde dit que vous pouvez. C'est probablement un manquant ou quelque chose qui prête à confusion.
StingyJack
9

Contrairement à la virtualisation, la conteneurisation utilise le même système d'exploitation hôte. Ainsi, le conteneur construit sur Linux ne peut pas être exécuté sur Windows et vice versa.

Dans Windows, vous devez prendre l'aide de la virtuallisation (en utilisant Hyper-v) pour avoir le même système d'exploitation que celui de vos conteneurs, puis vous devriez pouvoir exécuter le même.

Docker pour Windows est une application similaire qui est basée sur Hyper-v et aide à exécuter le conteneur Docker Linux sur Windows. Mais pour autant que je sache, rien en tant que tel ne permet d'exécuter des conteneurs Windows sous Linux.

sunil bhardwaj
la source
9

Les conteneurs utilisent le noyau OS. Le conteneur Windows utilise des processus pour s'exécuter. Donc, théoriquement, les conteneurs Windows ne peuvent pas fonctionner sous Linux.

Cependant, il existe des solutions de contournement utilisant des solutions VMstyle.

J'ai trouvé cette solution qui utilise Vagrant et Packer sur Mac, elle devrait donc également fonctionner pour Linux: https://github.com/StefanScherer/windows-docker-machine

Cet environnement Vagrant crée une Docker Machine pour travailler sur votre MacBook avec des conteneurs Windows. Vous pouvez facilement basculer entre les conteneurs Docker pour Mac Linux et les conteneurs Windows.

Exécution de commandes bash entrez la description de l'image ici

la construction de la boîte Vagrant sans tête

$ 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

Créer la machine Docker

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

Passer aux conteneurs Windows

$ eval $(docker-machine env 2019)
solution de contournement
la source
7

Solution 1 - Utilisation de VirtualBox

Comme l'a suggéré Muhammad Sahputra dans cet article , il est possible d'exécuter Windows OS à l' intérieur de VirtualBox (en utilisant VBoxHeadless - sans interface graphique) à l'intérieur du conteneur Docker .

En outre, une configuration NAT à l'intérieur des configurations de réseau de machine virtuelle peut effectuer une redirection de port qui vous donne la possibilité de traverser tout trafic entrant et sortant du conteneur Docker. Finalement, dans une large perspective, cela vous permet d'exécuter n'importe quel service Windows sur une machine Linux.

Ce n'est peut-être pas un cas d'utilisation typique d'un conteneur Docker, mais c'est certainement une approche intéressante du problème.


Solution 2 - Utilisation de Wine

Pour les applications simples et peut-être plus compliquées, vous pouvez essayer d'utiliser du vin dans un conteneur docker .

Cette page hub docker peut vous aider à atteindre votre objectif.


J'espère que Docker publiera bientôt une solution native, comme ils l'ont fait avec Docker-machine sur Windows il y a plusieurs années.

Slavik Meltser
la source
6

Vous pouvez utiliser des conteneurs Windows à l'intérieur d'une machine virtuelle (le système d'exploitation invité doit correspondre aux exigences - Windows 10 Pro ou Windows 2016).

Par exemple, vous pouvez utiliser VirtualBox , il suffit d'activer Hyper-V dans l'interface Système / Accélération / Paravirtualisation.

Après cela, si Docker ne démarre pas en raison d'une erreur, utilisez le "Basculer vers les conteneurs Windows ..." dans les paramètres.

(cela pourrait être déplacé en tant que commentaire dans la réponse acceptée, mais je n'ai pas assez de réputation pour le faire)

BalintPogatsa
la source
3

Alors que Docker pour Windows est parfaitement capable d'exécuter des conteneurs Linux, l'inverse, bien que théoriquement possible, n'est pas implémenté pour des raisons pratiques.

Le plus évident est que, tandis que Docker pour Windows peut exécuter une machine virtuelle Linux librement, Docker pour Linux aurait besoin d'une licence Windows pour l'exécuter à l'intérieur d'une machine virtuelle.

En outre, Linux est entièrement personnalisable, de sorte que la machine virtuelle Linux utilisée par Docker pour Windows a été réduite à quelques Mo, ne contenant que le strict minimum nécessaire pour exécuter les conteneurs, tandis que la plus petite distribution Windows disponible est d'environ 1,5 Go. Ce n'est peut-être pas une taille impraticable, mais c'est beaucoup plus lourd que l'homologue Linux sur Windows.

Bien qu'il soit certainement possible pour quelqu'un de vendre une variante Docker pour Linux fournie avec une licence Windows et prête à exécuter des conteneurs Windows sous Linux (et je ne sais pas si un tel produit existe), l'essentiel est que vous ne pouvez pas éviter payer le prix de verrouillage du fournisseur Windows: en argent et en espace de stockage.

lvella
la source
0

Vous pouvez exécuter MSSQL et .NET Core sous Linux, et donc à l'intérieur des conteneurs Linux, de nos jours.

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

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

La question directe à votre réponse est, bien sûr, à moins qu'il n'y ait une version compilée spécialement pour Linux, non.

dagelf
la source
3
C'est vrai - mais cela n'a rien à voir avec la question. De plus, MS-SQL est plus que le moteur (qui sur Linux est livré sans filestream ou R d'ailleurs - ce n'est donc même pas le moteur entier).
Stefan Steiger
Vous devez penser à une longueur d'avance ... pourquoi demande-t-il? S'il demande parce qu'il veut diriger l'un d'entre eux: le tour est joué.
dagelf
2
Possible. Mais à mon humble avis, il pose probablement la question parce qu'il l'a déjà fait, et maintenant il doit exécuter des choses comme SSRS / SSAS ou un contrôle de formulaire Web, tel que ReportViewer, sur Linux.
Stefan Steiger
Docker image microsoft / dotnet est pour .Net Core, qui est quelque chose de complètement différent de l'ancien .Net 4.x, vous ne pouvez donc pas exécuter l'application conçue pour l'ancien .Net sur .Net Core
j123b567
3
Ils prennent en charge .NET Coreet NON .NET - ce sont deux environnements complètement différents.
Slavik Meltser
-1

Les conteneurs Windows ne s'exécutent pas sous Linux et vous ne pouvez pas exécuter directement les conteneurs Linux sous Windows.

Ehsan
la source
6
Pouvez-vous élaborer un peu?
Matthieu
18
Vous pouvez exécuter des conteneurs Linux sur la victoire 10
Kugel
2
J'ai voté pour ce type, car je pense que c'était vrai à l'époque. Cependant, vous pouvez désormais exécuter des conteneurs Linux dans Docker sur Windows (Docker s'exécute dans une machine virtuelle appelée MobyLinux).
JakeJ
En réalité, Windows exécute une petite machine virtuelle Linux pour exécuter des conteneurs Linux. vérifiez vos ressources hyper-v pour le voir
Tuğrul Karakaya