web-dev-qa-db-fra.com

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

Est-il possible d'exécuter des conteneurs Windows sur Linux ? Le scénario est basé sur une application écrite dans le . NET (ancien réseau) et l’utilisateur de Linux qui veut l'exécuter avec Docker pour fournir une API net462 écrite sur la 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?

MODIFIER:

Comme le temps a passé et que 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'emballer 4.6.2 framework dans une nouvelle bibliothèque.

179
Sebastian 506563

pdate3: 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 s'exécuter sous Linux?

A:Non. Vous ne pouvez pas. Les conteneurs utilisent les ressources et les pilotes du système opérationnel sous-jacent. Par conséquent, les conteneurs Windows ne peuvent s'exécuter que sur Windows et les conteneurs Linux sur Linux uniquement.

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

A: Docker pour Windows vous permet de simuler l'exécution des conteneurs Linux sur = Windows , mais sous le capot Linux VM est créé, donc encore Les conteneurs Linux s'exécutent sous Linux et les conteneurs Windows sous Windows.

Bonus: Lire cet article très sympa à propos de l'exécution de conteneurs de menu fixe Linux sous Windows

Q: Alors, que dois-je faire avec l'application .Net Framework 462, si je souhaite utiliser un conteneur?

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

  • Si cela est possible, passez au noyau .Net. Depuis .Net Core prend en charge la plupart des fonctionnalités principales 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 l'a mentionné @Sebastian - vous pouvez convertir vos bibliothèques en .Net Standard et disposer de 2 versions de l'application - une sur .net Framework 4.6.2 et une sur .Net Core - ce n'est pas le cas. toujours évident, Visual Studio le supporte plutôt bien (avec le ciblage multiple), mais certaines dépendances peuvent nécessiter une attention particulière

  • (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 de plates-formes comme Kubernetes Cependant, pour pouvoir exécuter du code .Net Framework, vous devez toujours utiliser une image de base de "Server Core", avec une taille d’image de 1,4 Go. Dans les mêmes cas rares, vous pouvez migrer votre code vers .Net Core, mais toujours sur des serveurs Windows Nano, d’une taille d’image de 95M.

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

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

Bonus: Pas directement lié à la question, mais vous pouvez maintenant exécuter non seulement le conteneur Linux lui-même, mais également 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 correcte, BUT il y a plusieurs mois, docker ajouté fonctionnalité expérimentale LCOW ( référentiel officiel github ).

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 une prise en charge des conteneurs Linux via un système Moby Linux Hyper-V VM (à partir de Docker pour Windows 17.10, ce VM est basé sur LinuxKit).

La configuration permettant d'exécuter des conteneurs Linux avec LCOW est beaucoup plus simple que l'architecture précédente où un Linux Hyper-V VM exécute un démon Linux Docker, ainsi que tous vos conteneurs. Avec LCOW, le démon Docker s’exécute en tant que processus Windows (comme lorsqu’on exécute des conteneurs Windows Docker) et chaque fois que vous démarrez un conteneur Linux, Docker lance un hyperviseur Hyper-V minimal exécutant un VM avec un noyau Linux. , runc et les processus de conteneur s'exécutant sur le dessus.

Comme il n’ya qu’un démon Docker et que ce démon s’exécute maintenant sous Windows, i il sera bientôt possible d’exécuter les conteneurs Windows et Linux Docker côte à côte, dans le même espace de nom résea. Cela ouvrira de nombreux scénarios de développement et de production pour les utilisateurs de Docker sous Windows.

Original:

Comme mentionné dans les commentaires de @PanagiotisKanavos, les conteneurs ne sont pas destinés à la virtualisation et ils tilisent les ressources de la machine hôte. En conséquence, le conteneur Windows ne peut pas s'exécuter "en l'état" sur la machine Linux.

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

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

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

91
evgenyl

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

Mais vous pouvez exécuter Windows sur Linux.

Windows Server/10 est livré avec l'image de base du système d'exploitation Ubuntu ( après le service pack bêta de septembre 2016 ). C'est la raison pour laquelle vous pouvez exécuter Linux sur Windows et non autrement. Découvrez ici. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Vous pouvez basculer entre les conteneurs de système d'exploitation Linux et Windows en cliquant avec le bouton droit de la souris sur le menu dans le menu.

enter image description here

enter image description here

16
Karthikeyan VK

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

Dans Windows, vous devez utiliser l’aide de la virtuallisation (avec Hyper-v) pour avoir le même système d’exploitation que celui de vos conteneurs. Vous devriez ensuite pouvoir exécuter le même.

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

8
sunil bhardwaj

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

Par exemple, vous pouvez utiliser VirtualBox, activez simplement Hyper-V dans l'interface System/Acceleration/Paravirtualization.

Si Docker ne démarre pas à cause d’une erreur, utilisez l’option "Basculer vers les conteneurs Windows ..." dans les paramètres.

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

6
BalintPogatsa

Solution 1 - Utiliser VirtualBox

Comme Muhammad Sahputra suggéré dans cet article , il est possible d’exécuter le système d’exploitation Windows à l'intérieur VirtualBox (à l'aide de VBoxHeadless - sans interface graphique) à l'intérieur conteneur Docker .

De plus, une configuration NAT à l'intérieur de la configuration réseau VM peut effectuer un transfert de port, ce qui vous permet de transmettre tout trafic en provenance et à destination du conteneur Docker. Cela permet finalement, dans une large perspective, d’exécuter tout service basé sur Windows sur une machine Linux.

Il ne s’agit peut-être pas d’un cas d’utilisation typique d’un conteneur Docker, mais c’est vraiment une approche intéressante du problème.


Solution 2 - Utiliser du vin

Pour des applications simples et peut-être plus compliquées, vous pouvez essayer d'utiliser wine à l'intérieur d'un conteneur de menu fixe .

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


J'espère que Docker publiera bientôt une solution native, comme ce fut le cas avec docker-machine sur Windows il y a plusieurs années.

5
Slavik Meltser

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

Cependant, certaines solutions de contournement utilisent des solutions VMstyle.

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

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

Running bash commandsenter image description here

construire la boîte sans tête 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

Créez la machine Docker

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

Basculer vers les conteneurs Windows

$ eval $(docker-machine env 2019)
5
workaround

Vous pouvez maintenant exécuter MSSQL et DOTNET sous Linux, et donc à l’intérieur des conteneurs Linux.

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

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

1
dagelf

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.

La plus évidente est que, si Docker pour Windows peut exécuter librement un Linux [VM) _, Docker pour Linux nécessiterait une licence Windows pour pouvoir être exécuté dans une machine virtuelle.

De plus, Linux est entièrement personnalisable. Par conséquent, le nombre de Linux VM utilisé par Docker pour Windows a été réduit à quelques Mo seulement. Il ne contient que le strict minimum nécessaire pour exécuter les conteneurs, tandis environ 1,5 Go. Ce n'est peut-être pas une taille irréalisable, mais il est beaucoup plus lourd que son équivalent Linux sur Windows.

S'il est certainement possible pour quelqu'un de vendre une version de Docker pour Linux fournie avec une licence Windows et prête à exécuter des conteneurs Windows sous Linux (et que je ne sache pas si un tel produit existe), l'essentiel est que vous ne pouvez pas éviter prix forfaitaire du fournisseur Windows: à la fois en argent et en espace de stockage.

1
lvella