¿Es posible ejecutar Windows Containers en Linux ? El escenario se basa en una aplicación escrita en .NET (red antigua) y el usuario de Linux que quiere ejecutar esto con Docker para proporcionar una net462
API escrita en el localhost
.
Estoy usando la versión beta de Docker Desktop para Windows
Si no, ¿por qué Windows puede ejecutar contenedores de Linux y no al revés?
EDITAR:
Como ha pasado algún tiempo y esta pregunta es popular. Me gustaría agregar una nota aquí que la solución es usar el nuevo estándar de red. Me permitió empaquetar 4.6.2
framework en una nueva biblioteca.
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
fuente
fuente
Respuestas:
Actualización3: 06.2019 Algunos de los comentarios dicen que la respuesta no está clara, intentaré aclarar.
TL; DR:
P: ¿Los contenedores de Windows pueden ejecutarse en Linux?
A: No. No pueden. Los contenedores utilizan los recursos y controladores subyacentes del sistema operativo, por lo que los contenedores de Windows pueden ejecutarse solo en Windows, y los contenedores de Linux pueden ejecutarse solo en Linux.
P: ¿Pero qué pasa con Docker para Windows? ¿U otras soluciones basadas en VM?
R: Docker para Windows le permite simular la ejecución de contenedores de Linux en Windows , pero bajo el capó se crea una máquina virtual Linux, por lo que los contenedores de Linux se ejecutan en Linux y los contenedores de Windows se ejecutan en Windows .
Bonificación: lea este artículo muy bueno sobre la ejecución de contenedores Docker de Linux en Windows
P: Entonces, ¿qué debo hacer con una aplicación .Net Framework 462 si quisiera ejecutarla en un contenedor?
A: depende. Siguiendo varias recomendaciones:
Si no puede migrar a .Net Core, como mencionó @Sebastian, puede convertir sus bibliotecas a .Net Standard y tener 2 versiones de la aplicación, una en .Net Framework 4.6.2 y otra en .Net Core, no es siempre obvio, Visual Studio lo admite bastante bien (con múltiples objetivos), pero algunas dependencias pueden requerir un cuidado adicional.
(Menos recomendado) En algunos casos, puede ejecutar contenedores de Windows. Los contenedores de Windows son cada vez más maduros, con un mejor soporte en plataformas como Kubernetes. Pero para poder ejecutar el código de .Net Framework, aún debe ejecutarse en la imagen base de "Server Core", que ocupa aproximadamente 1,4 GB. En los mismos casos raros, puede migrar su código a .Net Core, pero aun así ejecutarlo en servidores Windows Nano, con un tamaño de imagen de 95 MB.
Dejando también las viejas actualizaciones para la historia
Actualización2: 08.2018 Si está utilizando Docker-for-Windows, ahora puede ejecutar Windows y contenedores de Linux simultáneamente : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- y-linux-contenedores-simultáneamente /
Bonificación: no está directamente relacionado con la pregunta, pero ahora puede ejecutar no solo el contenedor de Linux en sí, sino también el orquestador como kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /
Actualizado en 2018:
La respuesta original en general es correcta, PERO hace varios meses, Docker agregó la función experimental LCOW ( repositorio oficial de github ).
De esta publicación :
Original:
Como se mencionó en los comentarios de @PanagiotisKanavos, los contenedores no son para virtualización y están utilizando los recursos de la máquina host . Como resultado, por ahora el contenedor de Windows no puede ejecutarse "tal cual" en la máquina Linux.
Pero , puede hacerlo utilizando VM, ya que funciona en Windows. Puede instalar Windows VM en su host de Linux, lo que permitirá ejecutar contenedores de Windows.
Con él, en mi humilde opinión, ejecutarlo de esta manera en el entorno PROD no será la mejor idea.
Además, esta respuesta proporciona más detalles.
fuente
No, no puede ejecutar contenedores de Windows directamente en Linux.
Pero puedes ejecutar Linux en Windows.
Windows Server / 10 viene empaquetado con la imagen base del sistema operativo ubuntu ( después del paquete de servicio beta de septiembre de 2016 ). Esa es la razón por la que puede ejecutar Linux en Windows y no de otra manera. Mira aquí. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
Puede cambiar entre los contenedores del sistema operativo Linux y Windows haciendo clic derecho en la ventana acoplable en el menú de la bandeja.
fuente
A diferencia de la virtualización, la contenedorización utiliza el mismo sistema operativo host. Por lo tanto, el contenedor construido en Linux no se puede ejecutar en Windows y viceversa.
En Windows, debe tomar la ayuda de la virtualización (usando Hyper-v) para tener el mismo sistema operativo que el sistema operativo de sus contenedores y luego debería poder ejecutar lo mismo.
Docker para Windows es una aplicación similar que se basa en Hyper-v y ayuda a ejecutar Linux Docker Container en Windows. Pero hasta donde yo sé, no hay nada como tal que ayude a ejecutar contenedores de Windows en Linux.
fuente
Los contenedores usan el núcleo del sistema operativo. Windows Container utiliza procesos para ejecutarse. Entonces, teóricamente, los Contenedores de Windows no pueden ejecutarse en Linux.
Sin embargo, existen soluciones alternativas que utilizan soluciones VMstyle.
He encontrado esta solución que usa Vagrant y Packer en Mac, por lo que también debería funcionar para Linux: https://github.com/StefanScherer/windows-docker-machine
fuente
Solución 1 - Usando VirtualBox
Como Muhammad Sahputra sugirió en esta publicación , es posible ejecutar el sistema operativo Windows dentro de VirtualBox (usando VBoxHeadless - sin interfaz gráfica) dentro del contenedor Docker .
Además, una configuración de NAT dentro de las configuraciones de red de VM puede hacer un reenvío de puertos que le brinda la capacidad de pasar cualquier tráfico que provenga del contenedor Docker. Esto eventualmente, en una perspectiva amplia, le permite ejecutar cualquier servicio basado en Windows sobre la máquina Linux.
Quizás este no sea un caso de uso típico de un contenedor Docker, pero definitivamente es un enfoque interesante para el problema.
Solución 2 - Usar vino
Para aplicaciones simples y quizás más complicadas, puede intentar usar el vino dentro de un contenedor acoplable .
Esta página de Docker Hub puede ayudarlo a lograr su objetivo.
Espero que Docker lance una solución nativa pronto, como lo hicieron con la máquina docker en Windows hace varios años.
fuente
Puede usar Windows Containers dentro de una máquina virtual (el sistema operativo invitado debe cumplir los requisitos: Windows 10 Pro o Windows 2016).
Por ejemplo , puede usar VirtualBox , solo habilite Hyper-V dentro de la interfaz Sistema / Aceleración / Paravirtualización.
Después de eso, si Docker no se inicia debido a un error, use el "Cambiar a contenedores de Windows ..." en la configuración.
(Esto podría moverse como un comentario a la respuesta aceptada, pero no tengo suficiente reputación para hacerlo)
fuente
Si bien Docker para Windows es perfectamente capaz de ejecutar contenedores de Linux, lo contrario, aunque en teoría es posible, no se implementa debido a razones prácticas.
La más obvia es que, si bien Docker para Windows puede ejecutar una máquina virtual Linux libremente, Docker para Linux requeriría una licencia de Windows para ejecutarla dentro de una máquina virtual.
Además, Linux es completamente personalizable, por lo que la VM de Linux utilizada por Docker para Windows se ha reducido a solo unos pocos MB, que contiene solo el mínimo necesario para ejecutar los contenedores, mientras que la distribución más pequeña de Windows disponible es de aproximadamente 1,5 GB. Puede que no sea un tamaño impracticable, pero es mucho más engorroso que el de Linux en Windows.
Si bien es ciertamente posible que alguien venda una variación de Docker para Linux incluida con una licencia de Windows y esté lista para ejecutar contenedores de Windows en Linux (y no sé si ese producto existe), la conclusión es que no se puede evitar pagar el precio de bloqueo del proveedor de Windows: tanto en dinero como en espacio de almacenamiento.
fuente
Puede ejecutar MSSQL y .NET Core en Linux, y por lo tanto dentro de los contenedores de Linux, hoy en día.
Ver: https://hub.docker.com/r/microsoft/mssql-server-linux/
También: https://hub.docker.com/r/microsoft/dotnet/
La pregunta directa a su respuesta es, por supuesto, a menos que haya una versión compilada especialmente para Linux, no.
fuente
.NET Core
y NO.NET
: estos son dos entornos completamente diferentes.Los contenedores de Windows no se ejecutan en Linux y tampoco puede ejecutar contenedores de Linux en Windows directamente.
fuente