7 casos en los que no debería utilizar Docker

Docker es un cambio de juego. Pero no es una solución única para todos.

Docker tiene muchas cosas buenas. Empaqueta, envía y ejecuta aplicaciones como una herramienta de contenedorización ligera, portátil y autosuficiente. Docker es ideal para empresas de todos los tamaños. Cuando se trabaja en un fragmento de código en un equipo pequeño, se elimina el problema de "pero funciona en mi máquina". Mientras tanto, las empresas pueden utilizar Docker para crear canalizaciones de entrega de software ágiles para enviar nuevas funciones de forma más rápida y segura.

Con su sistema de contenedorización integrado, Docker es una excelente herramienta para la computación en la nube. A su vez, Docker Swarm promueve la agrupación y el diseño descentralizado. Suena demasiado bueno para ser verdad, ¿verdad? Bueno, todavía hay varios casos en los que no se debe usar Docker. Aquí hay siete de ellos.

no use la ventana acoplable

Repasemos estos uno por uno.

No use Docker si necesita aumentar la velocidad

Los contenedores de Docker son más pequeños y requieren menos recursos que una máquina virtual con un servidor y una base de datos. Al mismo tiempo, Docker utilizará tantos recursos del sistema como lo permita el programador del kernel del host. No debe esperar que Docker acelere una aplicación de ninguna manera.

Es más, Docker incluso podría hacerlo más lento. Si está trabajando con él, debe establecer límites en la cantidad de memoria, CPU o IO de bloque que puede usar el contenedor. De lo contrario, si el kernel detecta que la memoria de la máquina host se está agotando demasiado para realizar funciones importantes del sistema, podría comenzar a matar procesos importantes. Si se mata el proceso incorrecto (incluido el propio Docker), el sistema será inestable.

Desafortunadamente, los ajustes de memoria de Docker, la prioridad de falta de memoria en el demonio de Docker, no resuelven este problema. Por el contrario, una capa adicional entre una aplicación y el sistema operativo también podría resultar en una reducción de la velocidad. Sin embargo, esta disminución será insignificante. Los contenedores Docker no están completamente aislados y no contienen un sistema operativo completo como cualquier máquina virtual.

No utilice Docker si prioriza la seguridad

La mayor ventaja de seguridad de Docker es que divide la aplicación en partes más pequeñas. Si la seguridad de una parte se ve comprometida, el resto no se verá afectado.

Sin embargo, aunque los procesos aislados en contenedores prometen una seguridad mejorada, todos los contenedores comparten el acceso a un único sistema operativo host. Corre el riesgo de ejecutar contenedores de Docker con aislamiento incompleto. Cualquier código malicioso puede tener acceso a la memoria de su computadora.

Existe una práctica popular de ejecutar muchos contenedores en un solo entorno. Así es como haces que tu aplicación esté predispuesta al tipo de ataques de abuso de recursos a menos que limites las capacidades del contenedor de recursos. Para lograr la máxima eficiencia y aislamiento, cada contenedor debe abordar un área específica de preocupación.

Otro problema es la configuración predeterminada de Docker: los usuarios no tienen espacios de nombres. Los espacios de nombres permiten que los recursos de software utilicen otros recursos solo si pertenecen a un espacio de nombres específico.

Ejecutar aplicaciones con Docker implica ejecutar el demonio de Docker con privilegios de root. Cualquier proceso que se salga del contenedor Docker tendrá los mismos privilegios en el host que en el contenedor. Ejecutar sus procesos dentro de los contenedores como un usuario sin privilegios no puede garantizar la seguridad. Depende de las capacidades que agregue o elimine. Para mitigar los riesgos de la ruptura del contenedor Docker, no debe descargar contenedores listos para usar de fuentes que no sean de confianza.

No utilice Docker si desarrolla una aplicación GUI de escritorio

Docker no se adapta a aplicaciones que requieren una interfaz de usuario enriquecida. Docker está diseñado principalmente para contenedores aislados con aplicaciones basadas en consola. Las aplicaciones basadas en GUI no son una prioridad, su soporte dependerá del caso y la aplicación específicos. Los contenedores de Windows se basan en Nano o Core Server; no permite a los usuarios iniciar una interfaz basada en GUI o un servidor Docker RDP en el contenedor Docker.

Sin embargo, aún puede ejecutar aplicaciones basadas en GUI desarrolladas con Python y el marco QT en un contenedor de Linux. Además, puede usar el reenvío X11, pero esta solución es algo incómoda.

No use Docker si desea iluminar el desarrollo y la depuración

Docker fue creado por desarrolladores y para desarrolladores. Proporciona estabilidad ambiental: un contenedor en la máquina de desarrollo funcionará exactamente igual en la puesta en escena, la producción o cualquier otro entorno. Esto elimina el problema de varias versiones de programas en diferentes entornos.

Con la ayuda de Docker, puede agregar fácilmente una nueva dependencia a su aplicación. Ningún desarrollador de su equipo necesitará repetir esta manipulación en su máquina. Todo estará en funcionamiento en el contenedor y se distribuirá a todo el equipo.

Al mismo tiempo, debe realizar una configuración adicional para codificar su aplicación en Docker. Además, con la depuración de Docker, debe configurar la salida de los registros y configurar los puertos de depuración. También es posible que deba asignar puertos para sus aplicaciones y servicios en contenedores. Por lo tanto, si tiene un proceso de implementación complicado y tedioso, Docker lo ayudará mucho. Si tiene una aplicación simple, simplemente agrega una complejidad innecesaria.

No use Docker si necesita usar diferentes sistemas operativos o kernels

Con las máquinas virtuales, el hipervisor puede abstraer un dispositivo completo. Puede usar Microsoft Azure para ejecutar ambas instancias de Windows Server y Linux Server al mismo tiempo. Sin embargo, la imagen de Docker requiere el mismo sistema operativo para el que fue creada.

Existe una gran base de datos de imágenes de contenedores de Docker: Docker Hub. Sin embargo, si se creó una imagen en Linux Ubuntu, solo se ejecutará exactamente en el mismo Ubuntu.

Si una aplicación se desarrolla en Windows, pero la producción se ejecuta en Linux, no podrá utilizar Docker de forma eficaz. A veces, es más fácil configurar un servidor si tiene varias aplicaciones estáticas.

No utilice Docker si tiene muchos datos valiosos para almacenar

Por diseño, todos los archivos de Docker se crean dentro de un contenedor y se almacenan en una capa de contenedor de escritura. Puede resultar difícil recuperar los datos del contenedor si lo necesita un proceso diferente. Además, la capa de escritura de un contenedor está conectada a la máquina host en la que se ejecuta el contenedor. Si necesita mover los datos a otro lugar, no puede hacerlo fácilmente. Más que eso, todos los datos almacenados dentro de un contenedor se perderán para siempre una vez que el contenedor se apague.

Primero debe pensar en formas de guardar sus datos en otro lugar. Para mantener los datos seguros en Docker, necesita emplear una herramienta adicional: Docker Data Volumes. Sin embargo, esta solución sigue siendo bastante torpe y debe mejorarse.

No use Docker si está buscando la tecnología más fácil de administrar

Presentado en 2012, Docker sigue siendo una nueva tecnología. Como desarrollador, es posible que deba actualizar las versiones de Docker con regularidad. Desafortunadamente, la compatibilidad con versiones anteriores no está garantizada. Además, la documentación se está quedando atrás del avance de la tecnología. Como desarrollador, tendrá que resolver algunas cosas usted mismo.

Además, las opciones de monitoreo que ofrece Docker son bastante pobres. Puede obtener una visión rápida de algunas estadísticas simples. Sin embargo, si desea ver algunas funciones de monitoreo avanzadas, Docker no tiene nada que ofrecer.

Además, en el caso de una aplicación grande y compleja, la implementación de Docker tiene un costo. Crear y mantener la comunicación entre numerosos contenedores en numerosos servidores requerirá mucho tiempo y esfuerzo. Sin embargo, existe una herramienta útil que facilita el trabajo con aplicaciones Docker de varios contenedores: Docker Compose. Docker Compose define servicios, redes y volúmenes en un solo archivo YAML.

No obstante, el ecosistema de Docker está bastante fracturado: no todos los productos de contenedores de soporte funcionan bien entre sí. Cada producto está respaldado por una determinada empresa o comunidad. La acalorada competencia entre ellos da como resultado la incompatibilidad de productos.

Para concluir

Los profesionales de KeenEthics disfrutan trabajando con Docker y, a menudo, lo utilizan para el desarrollo de aplicaciones. A pesar de algunos inconvenientes, puede usarlo fácilmente para ejecutar y administrar aplicaciones una al lado de la otra en contenedores aislados.

Instalar una aplicación puede ser tan simple como ejecutar un solo comando:. Docker también proporciona un entorno de aislamiento limpio y original para cada prueba, lo que la convierte en una herramienta importante y útil para las pruebas de automatización.

Las funciones de Docker ofrecen beneficios en términos de seguridad y gestión de dependencias. Ampliado con herramientas útiles como Docker Hub, Docker Swarm y Docker Compose, Docker es una solución popular y fácil de usar.

A pesar de todos los beneficios de Docker, no debe usarlo para contener todas y cada una de las aplicaciones que desarrolle.

Recuerde: Docker es un cambio de juego. Pero no es una solución única para todos.

Docker tampoco es la única herramienta de este tipo en el mercado. Las alternativas de Docker son rkt, pronunciado como 'cohete', Contenedores de Linux u OpenVZ. Cada uno de estos con sus ventajas y desventajas es bastante similar a Docker. La creciente popularidad y las tasas de uso de Docker se deben únicamente a la decisión de las empresas de adoptarlo.

Antes de sacar conclusiones precipitadas sobre si debe usar Docker o no, investigue los requisitos del proyecto. Habla con tus compañeros de equipo o compañeros y deja que te ayuden a decidir cuándo usar Docker, cuándo no usar contenedores y si es uno de esos casos de uso de Docker.

Te guste o no, esta tecnología tiene futuro. Hay algunos desarrolladores y agencias de desarrollo que odian a Docker y tratan de eliminarlo de todos sus proyectos en curso. Al mismo tiempo, hay especialistas que empaquetan todo lo que pueden porque ven a Docker como una panacea. Quizás, no deberías unirte a ninguno de los dos bandos. Manténgase imparcial, sea objetivo y tome una decisión dependiendo de una situación particular.

¿Tiene una idea para un proyecto de Docker?

Mi empresa, KeenEthics, es un equipo de desarrolladores de aplicaciones web con experiencia. En caso de que necesite un presupuesto gratuito de un proyecto similar, no dude en ponerse en contacto .

Puedes leer más artículos similares en mi Blog Keen. Permítame sugerirle que lea ¿Por qué refactorizar su código? o Modelos de desarrollo de software explicados: subcontratación frente a personal externo, precio fijo frente a tiempo y material?

PD

Además, me gustaría decir "gracias" a Alex Pletnov por ser coautor de este artículo, ¡así como a los lectores por llegar al final!

El artículo original publicado en el blog de KeenEthics se puede encontrar aquí: 7 casos en los que no se debe usar Docker.