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 net462
API é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.2
framework dans une nouvelle bibliothèque.
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
la source
la source
Réponses:
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 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 :
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.
la source
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.
la source
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.
la source
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
la source
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.
la source
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)
la source
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.
la source
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.
la source
.NET Core
et NON.NET
- ce sont deux environnements complètement différents.Les conteneurs Windows ne s'exécutent pas sous Linux et vous ne pouvez pas exécuter directement les conteneurs Linux sous Windows.
la source