¿Ejecutando contenedores dentro de una máquina virtual?

15

Tengo entendido que los contenedores son mucho más livianos que las máquinas virtuales porque no virtualizan el hardware, sino que simplemente aíslan el software que se ejecuta en ellos del software que se ejecuta en otros contenedores en el sistema.

Mi situación es tal que no puedo permitirme comprar servidores adicionales, y todos los servidores que tengo están ejecutando hipervisores. Necesito aprovisionar al menos 6 "servidores" para alojar instancias de aplicaciones web relativamente pequeñas (cada instancia es para un cliente diferente). Sería un desperdicio aprovisionar una nueva VM para cada uno de estos servidores, por lo que planeo configurar 2 VM y realizar una de las siguientes acciones:

  1. Ejecute varias instancias de la aplicación en cada VM utilizando hosts virtuales (apache). o
  2. Configurar contenedores en las máquinas virtuales que me permitiría aislar los entornos.

Considerando esto, ¿existe una sobrecarga no despreciable asociada con los sistemas de contenedores que haría una mala idea usarlos dentro de una VM, o hay alguna otra razón técnica por la que no quisiera usar contenedores?

Chris L
fuente

Respuestas:

13

Docker es MUY liviano en comparación con una VM y un sistema VM debería funcionar con contenedores que funcionen bien. Cada contenedor funciona esencialmente como un sistema aislado, por lo que es muy bueno para el aislamiento desde una perspectiva de estabilidad del sistema. Según su descripción, parece el caso de uso ideal para Docker. Si experimenta con Docker, asegúrese de usar la versión más nueva posible, algunas de las más antiguas tienen algunas vulnerabilidades bastante desagradables. Hay algunas consideraciones de seguridad al ejecutar Docker.

SELinux : SELinux reconoce los contenedores y creará automáticamente una etiqueta MCS con nombre aleatorio para cada contenedor. Esto ayuda a garantizar el aislamiento, ya que los contenedores LXC no se consideran realmente "contener" por sí mismos, aunque esto está mejorando.

Directiva del USUARIO : en cada Dockerfile se recomienda utilizar la directiva del USUARIO y hacer que el usuario se ejecute como una cuenta que no sea root, la predeterminada. El problema aquí es que el usuario debe existir en el sistema. También puede ser frustrante crear archivos y directorios para este nuevo usuario, pero ayuda a reducir el riesgo. Por lo general, recomiendo que cree un "contenedor de usuario" o algo así en sus sistemas para ayudar a garantizar que un usuario común esté disponible en todos los sistemas que no se superpongan con ninguna otra parte del sistema.

De lo contrario, la parte más difícil es administrar los contenedores y actualizarlos cuando sea necesario.

thetrribletrivium
fuente
3

¿Hay una sobrecarga no despreciable asociada con los sistemas de contenedores que haría una mala idea usarlos dentro de una VM

¿ Docker Containers Performance en VMware vSphere lo ayuda?

¿O hay alguna otra razón técnica por la que no quisiera usar contenedores?

No sé sobre Docker en general porque aún no he trabajado con él. Creo que el software de administración aún carece de madurez en comparación con el software de administración de VM ... pero soy un administrador de vSphere y, por lo tanto, probablemente sea parcial.

Teniendo en cuenta Docker en máquinas virtuales, CoreOS ahora es oficialmente compatible con vSphere 5.5 . Entonces, al menos VMware cree que Docker / contenedores en máquinas virtuales está bien.

Mario Lenz
fuente