TL;DR :
Q : Les conteneurs Windows peuvent-ils fonctionner sous Linux ?
A : Non. Ils ne peuvent pas.
Les conteneurs utilisent les ressources et les pilotes du système d'exploitation sous-jacent. Ainsi, les conteneurs Windows ne peuvent fonctionner que sous Windows, et les conteneurs Linux ne peuvent fonctionner que sous Linux.
Q : Mais qu'en est-il de Docker pour Windows ? Ou d'autres solutions basées sur les VM ?
A : Docker pour Windows vous permet de simuler le fonctionnement Linux les conteneurs sur Windows mais sous le capot une VM Linux est créée, donc toujours Les conteneurs Linux fonctionnent sous Linux, et les conteneurs Windows fonctionnent sous Windows. .
Bonus : Lire 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 l'exécuter dans un conteneur ?
A : Cela dépend. En suivant plusieurs recommandations :
-
Si cela 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 format Norme .NET Si l'on a besoin d'une version de l'application, et que l'on dispose de deux versions de l'application - une sur .NET Framework 4.6.2, et une sur .NET Core - ce n'est pas toujours évident. Visual Studio le prend assez bien en charge (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 un meilleur support dans des plateformes telles que Kubernetes . Mais pour pouvoir exécuter le code .NET Framework, vous devez toujours utiliser l'image de base de "Server Core", qui occupe environ 1,4 Go. Dans de rares cas, vous pouvez migrer votre code vers .NET Core, mais toujours l'exécuter sur une image de base de Serveur Windows Nano avec une taille d'image de 95 MB.
En laissant aussi les anciennes mises à jour pour l'histoire
Mise à jour 2 : 08.2018
Si vous utilisez Docker-for-Windows, vous pouvez maintenant exécuter les conteneurs Windows et Linux. simultanément : _Exécution simultanée de conteneurs Docker Windows et Linux_
Bonus : Ce n'est pas directement lié à la question, mais vous pouvez désormais faire fonctionner non seulement le conteneur Linux lui-même, mais aussi un orchestrateur comme Kubernetes : Kubernetes est maintenant disponible dans le canal stable de Docker Desktop
Mis à jour en 2018 :
La réponse originale en général est juste, MAIS Il y a plusieurs mois, Docker a ajouté caractéristique expérimentale LCOW ( Dépôt officiel sur GitHub ).
De ce poste :
Docker pour Windows ne fait-il pas déjà fonctionner les conteneurs Linux ? C'est exact. Docker pour Windows peut exécuter des conteneurs Linux ou Windows. Linux via une VM Hyper-V Moby Linux (à partir de Docker pour Windows). Windows 17.10, cette VM est basée sur LinuxKit).
La configuration pour faire fonctionner des conteneurs Linux avec LCOW est beaucoup plus simple que celle qui est décrite ci-dessous. l'architecture précédente où une VM Linux Hyper-V exécute un Docker Linux ainsi que tous vos conteneurs. Avec LCOW, le démon Docker s'exécute en tant que processus Windows (comme pour l'exécution de Docker Windows). ), et chaque fois que vous démarrez un conteneur Linux, Docker lance un hyperviseur Hyper-V minimal qui exécute une VM avec un noyau Linux, runc et thomson. runc et les processus de conteneur s'exécutant par-dessus.
Parce qu'il n'y a qu'un seul démon Docker, et parce que ce démon maintenant fonctionne sous Windows, je l sera bientôt possible de faire fonctionner Windows et Linux Docker côte à côte, dans le même espace de noms de réseau. . Ce site permettra de débloquer de nombreux scénarios de développement et de production passionnants 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 utilisent les ressources de la machine hôte . Par conséquent, pour l'instant, un conteneur Windows ne peut pas fonctionner "tel quel" sur une machine Linux.
Mais - vous pouvez le faire en utilisant VM - comme 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 l'exécuter de cette façon dans un production environnement ne sera pas la meilleure idée.
También, cette réponse fournit plus de détails.
4 votes
Impossible - Pour construire et exécuter des conteneurs Windows, il faut un système Windows prenant en charge les conteneurs.
6 votes
Ok, mais pourquoi alors Windows peut faire tourner des conteneurs linux ? Il n'y a pas de vice-versa pour le moment ?
1 votes
Pas de vice-versa pour aucun système d'exploitation pour toujours. Les conteneurs sont PAS de mécanismes complets de virtualisation . Si vous voulez éviter de réécrire votre application, vous devrez l'exécuter sur une VM avec un invité Windows. Ou réécrire l'application en .NET Core.
13 votes
@Sebastian506563 parce que docker exécute la virtualisation VirtualBox en arrière-plan pour faire fonctionner les conteneurs Linux sur Windows. Je suppose que théoriquement, il sera également possible de faire l'inverse, mais que Docker ne l'a pas mis en œuvre.
0 votes
@GSA plus maintenant. Il utilise HyperV maintenant, mais c'est toujours une VM. Docker ne mélange pas les systèmes d'exploitation de quelque manière que ce soit. Il s'agit toujours le même système d'exploitation à l'intérieur et à l'extérieur du conteneur
5 votes
Avec les VMs, chaque vm a son propre système d'exploitation. Avec les conteneurs, il y a une image du système d'exploitation de base et chaque conteneur ajoute une nouvelle couche fine par-dessus la base. Dans Docker, ce système d'exploitation de base est basé sur Linux. Autrement dit, votre conteneur Windows ne peut pas utiliser la base car elle est différente. blog.risingstack.com/
3 votes
@PanagiotisKanavos s'il vous plaît composez la réponse.
0 votes
@PanagiotisKanavos Rien n'empêche en théorie docker d'exécuter le système d'exploitation Windows virtualisé dans Linux et d'instancier le conteneur Windows en mode d'isolation des processus. Quel que soit l'hyperviseur utilisé dans Windows (Hyper-V ou Virtual Box), ils font la même chose pour Linux sous Windows.
1 votes
@GSA sauf le noyau du système d'exploitation, les bibliothèques et les services manquants.
2 votes
@PanagiotisKanavos Docker fait actuellement tourner un Linux virtuel dans Windows et exécute un conteneur Linux par-dessus. Il peut facilement faire la même chose sur Linux. Il s'agit de créer un OS virtuel Windows, d'y installer Docker et de le gérer à distance comme il le fait actuellement sous Windows. Rien ne manquera. Docker fait exactement la même chose sur Windows actuellement, d'où cette question. Le problème sera évidemment celui de la licence, puisque Docker aura besoin d'un système d'exploitation virtuel complet pour fonctionner, ce qui n'est pas le cas avec Linux, d'où la divergence possible.
1 votes
@GSA il dirige un Linux VM qui est utilisé comme hôte. Les conteneurs s'exécutent à l'intérieur de cette VM. Vous ne pouvez pas utiliser les conteneurs Linux en dehors de la VM Linux. Essayez-le. Ouvrez
Hyper-V Manager
et vérifiez le nom du VM . C'est cette VM qui offre le support Linux, pas une quelconque fonctionnalité de conteneur.0 votes
@PanagiotisKanavos. Correctement, Docker fait fonctionner des conteneurs Linux sur des hôtes Windows en créant un OS virtuel Linux sur l'hôte Windows. Il peut théoriquement faire l'inverse. C'est-à-dire exécuter un système d'exploitation virtuel Windows sur un hôte Linux et créer un conteneur Windows dans un système d'exploitation virtuel Windows fonctionnant sur un hôte Linux. Rien n'empêche Docker de le faire, à l'exception des frais de licence et de gestion. En fait, j'exécute actuellement des conteneurs Windows dans un système d'exploitation virtuel Windows qui est hébergé sur l'hyper-viseur Vmware, qui est basé sur Linux.
0 votes
Vous pourriez vouloir voir cette question, les réponses ont quelques explications liées à votre question : stackoverflow.com/questions/16047306/
1 votes
Avez-vous essayé d'exécuter votre net462 sous mono ? Faites-le si ce n'est pas possible, migrez vers netstandard/core.
0 votes
Windows ne fait pas "tourner" les conteneurs Linux, il les émule. La même chose peut être réalisée de manière opposée. Mais comme Linux est extrêmement léger comparé à Windows, il est beaucoup plus facile (et logique) de mettre en place un émulateur Linux plutôt qu'un émulateur Windows.