tipos infraestructura hat gestion contenedores aplicaciones linux docker docker-for-windows windows-container docker-desktop

linux - infraestructura - redhat contenedores



¿Se pueden alojar los contenedores de Windows en Linux? (9)

¿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 API escrita net462 en el net462 localhost .

Estoy usando la versión beta de Docker Desktop para Windows

Si no, ¿por qué Windows puede ejecutar contenedores Linux y no al revés?

EDITAR:

Como ha pasado algún tiempo y esta pregunta es muy 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.


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 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.


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 tener 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 el 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.


Los contenedores de Windows no se ejecutan en Linux y tampoco puede ejecutar contenedores de Linux en Windows directamente.


Los contenedores usan el núcleo del sistema operativo. Windows Container utiliza procesos para ejecutarse. Entonces, en teoría, 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

Este entorno vagabundo crea una máquina Docker para trabajar en su MacBook con contenedores de Windows. Puede cambiar fácilmente entre los contenedores Docker para Mac Linux y los contenedores de Windows.

construyendo la caja vagabunda sin cabeza

$ 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

Crea la máquina Docker

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

Cambiar a contenedores de Windows

$ eval $(docker-machine env 2019)


No, no puede ejecutar contenedores de Windows directamente en Linux.

Pero puedes ejecutar Windows en Linux.

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.



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 "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)


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, mientras que 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 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.


Actualización3: 06.2019 Algunos de los comentarios dicen que la respuesta no está clara, intentaré aclarar.

TL; DR:

P: ¿Pueden los contenedores de Windows ejecutarse en Linux?

A: No. No puedes. Los contenedores utilizan los recursos y controladores del sistema operativo subyacente, 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 los contenedores de Linux en Windows , pero bajo el capó se crea Linux VM, 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 la aplicación .Net Framework 462, si me gustaría ejecutar en contenedor?

A: depende. Siguiendo varias recomendaciones:

  • Si es posible, muévase a .Net core. Dado que .Net Core brinda soporte a la mayoría de las características principales de .Net Framework, y .Net Framework 4.8 será la última versión de .Net framework
  • 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 se vuelven 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", con un tamaño de imagen de 1,4 GB. En los mismos casos raros, puede migrar su código a .Net Core, pero aún puede ejecutarse en servidores Windows Nano, con un tamaño de imagen de 95M.

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-and-linux-containers-simultaneously/

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 :

¿Docker para Windows ya no ejecuta contenedores de Linux? Está bien. Docker para Windows puede ejecutar contenedores Linux o Windows, con soporte para contenedores Linux a través de una VM Hyper-V Moby Linux (a partir de Docker para Windows 17.10 esta VM está basada en LinuxKit).

La configuración para ejecutar contenedores de Linux con LCOW es mucho más simple que la arquitectura anterior en la que una máquina virtual Linux de Hyper-V ejecuta un demonio Docker de Linux, junto con todos sus contenedores. Con LCOW, el demonio Docker se ejecuta como un proceso de Windows (igual que cuando se ejecutan contenedores de Windows Docker), y cada vez que inicia un contenedor de Linux, Docker lanza un hipervisor Hyper-V mínimo que ejecuta una VM con un kernel de Linux, runc y los procesos de contenedor. corriendo en la parte superior.

Debido a que solo hay un demonio Docker, y debido a que ese demonio ahora se ejecuta en Windows, pronto será posible ejecutar contenedores Docker de Windows y Linux uno al lado del otro, en el mismo espacio de nombres de red . Esto desbloqueará muchos escenarios interesantes de desarrollo y producción para los usuarios de Docker en Windows.

Original:

Como se menciona 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.