Por qué debería usar Docker y contenedores

Un libro publicado en 1981, titulado  Nailing Jelly to a Tree , describe el software como "nebuloso y difícil de controlar". Eso era cierto en 1981, y no es menos cierto casi cuatro décadas después. El software, ya sea una aplicación que compró o que creó usted mismo, sigue siendo difícil de implementar, difícil de administrar y difícil de ejecutar.

Los contenedores Docker proporcionan una forma de controlar el software. Puede usar Docker para resumir una aplicación de tal manera que se manejen sus problemas de implementación y tiempo de ejecución: cómo exponerla en una red, cómo administrar su uso de almacenamiento, memoria y E / S, cómo controlar los permisos de acceso. fuera de la aplicación en sí, y de una manera que sea coherente en todas las aplicaciones "en contenedores". Puede ejecutar su contenedor Docker en cualquier host compatible con el sistema operativo (Linux o Windows) que tenga instalado el tiempo de ejecución de Docker.

Docker ofrece muchos otros beneficios además de esta práctica encapsulación, aislamiento, portabilidad y control. Los contenedores de Docker son pequeños (megabytes). Empiezan al instante. Tienen sus propios mecanismos integrados para el control de versiones y la reutilización de componentes. Se pueden compartir fácilmente a través del Docker Hub público o el repositorio privado.

En este artículo, exploraré cómo los contenedores Docker facilitan la creación y la implementación de software: los problemas que abordan los contenedores, cómo los abordan, cuándo son la respuesta correcta al problema y cuándo no lo son.

Antes de los contenedores Docker

Desde hace muchos años, el software empresarial se ha implementado normalmente en "bare metal" (es decir, instalado en un sistema operativo que tiene control completo sobre el hardware subyacente) o en una máquina virtual (es decir, instalado en un sistema operativo que comparte el hardware subyacente). con otros sistemas operativos "invitados"). Naturalmente, la instalación en bare metal hizo que el software fuera dolorosamente difícil de mover y difícil de actualizar, dos limitaciones que dificultaron que TI respondiera con agilidad a los cambios en las necesidades comerciales.

Luego llegó la virtualización. Las plataformas de virtualización (también conocidas como "hipervisores") permitieron que varias máquinas virtuales compartieran un solo sistema físico, cada máquina virtual emulando el comportamiento de un sistema completo, completo con su propio sistema operativo, almacenamiento y E / S, de manera aislada . Ahora, TI podría responder de manera más eficaz a los cambios en los requisitos comerciales, porque las máquinas virtuales se pueden clonar, copiar, migrar y activar o desactivar para satisfacer la demanda o conservar recursos.

Las máquinas virtuales también ayudaron a reducir los costos, porque se podrían consolidar más máquinas virtuales en menos máquinas físicas. Los sistemas heredados que ejecutan aplicaciones más antiguas se pueden convertir en máquinas virtuales y desmantelar físicamente para ahorrar aún más dinero.

Pero las máquinas virtuales todavía tienen algunos problemas. Las máquinas virtuales son grandes (gigabytes) y cada una contiene un sistema operativo completo. Solo se pueden consolidar tantas aplicaciones virtualizadas en un solo sistema. El aprovisionamiento de una máquina virtual todavía lleva bastante tiempo. Finalmente, la portabilidad de las VM es limitada. Después de cierto punto, las máquinas virtuales no pueden ofrecer el tipo de velocidad, agilidad y ahorro que exigen las empresas en rápido movimiento.

Beneficios del contenedor Docker

Los contenedores funcionan un poco como las VM, pero de una manera mucho más específica y granular. Aíslan una sola aplicación y sus dependencias, todas las bibliotecas de software externas que la aplicación requiere para ejecutarse, tanto del sistema operativo subyacente como de otros contenedores. Todas las aplicaciones en contenedores comparten un único sistema operativo común (ya sea Linux o Windows), pero están compartimentadas entre sí y del sistema en general.

Los beneficios de los contenedores Docker aparecen en muchos lugares. Estas son algunas de las principales ventajas de Docker y los contenedores:

Docker permite un uso más eficiente de los recursos del sistema

Las instancias de aplicaciones en contenedores usan mucha menos memoria que las máquinas virtuales, se inician y se detienen más rápidamente, y se pueden empaquetar mucho más densamente en su hardware host. Todo esto equivale a menos gasto en TI.

El ahorro de costes variará según las aplicaciones que estén en juego y la cantidad de recursos que requieran, pero los contenedores siempre resultan más eficientes que las máquinas virtuales. También es posible ahorrar en costos de licencias de software, ya que necesita muchas menos instancias de sistema operativo para ejecutar las mismas cargas de trabajo.

Docker permite ciclos de entrega de software más rápidos

El software empresarial debe responder rápidamente a las condiciones cambiantes. Eso significa tanto un escalado sencillo para satisfacer la demanda como una actualización sencilla para agregar nuevas funciones según lo requiera la empresa. 

Los contenedores de Docker facilitan la puesta en producción de nuevas versiones de software, con nuevas funciones comerciales, rápidamente, y la reversión rápida a una versión anterior si es necesario. También facilitan la implementación de estrategias como las implementaciones azul / verde.

Docker permite la portabilidad de la aplicación

El lugar donde se ejecuta una aplicación empresarial es importante: detrás del firewall, por el bien de mantener las cosas cerca y seguras; o en una nube pública, para un fácil acceso público y alta elasticidad de recursos. Debido a que los contenedores Docker encapsulan todo lo que una aplicación necesita para ejecutarse (y solo esas cosas), permiten que las aplicaciones se transfieran fácilmente entre entornos. Cualquier host con el tiempo de ejecución de Docker instalado, ya sea la computadora portátil de un desarrollador o una instancia de nube pública, puede ejecutar un contenedor de Docker.

Docker brilla por la arquitectura de microservicios

Los contenedores Docker, livianos, portátiles y autónomos, facilitan la creación de software con una visión de futuro, para que no intente resolver los problemas del mañana con los métodos de desarrollo de ayer.

Uno de los contenedores de patrones de software que facilitan son los microservicios, donde las aplicaciones están constituidas por muchos componentes acoplados de manera flexible. Al descomponer las aplicaciones tradicionales "monolíticas" en servicios separados, los microservicios permiten escalar, modificar y mantener las diferentes partes de una aplicación de línea de negocio por separado, por equipos separados y en líneas de tiempo separadas, si eso se adapta a las necesidades de la empresa. negocio. 

No se requieren contenedores para implementar microservicios, pero se adaptan perfectamente al enfoque de microservicios y a los procesos de desarrollo ágiles en general.

Problemas que los contenedores Docker no resuelven

Lo primero que debe tener en cuenta sobre los contenedores es el mismo consejo que se aplica a cualquier tecnología de software: esta no es una solución milagrosa. Los contenedores Docker por sí solos no pueden resolver todos los problemas. En particular:

Docker no solucionará sus problemas de seguridad

El software en un contenedor puede ser más seguro de forma predeterminada que el software que se ejecuta en metal desnudo, pero eso es como decir que una casa con las puertas cerradas es más segura que una casa con las puertas abiertas. No dice nada sobre el estado del barrio, la presencia visible de objetos de valor tentadores para un ladrón, las rutinas de las personas que viven allí, etc. Los contenedores pueden agregar una capa de seguridad a una aplicación, pero solo como parte de un programa general para proteger una aplicación en contexto.

Docker no convierte las aplicaciones mágicamente en microservicios

Si coloca en contenedores una aplicación existente, puede reducir su consumo de recursos y facilitar su implementación. Pero no cambia automáticamente el diseño de la aplicación o cómo interactúa con otras aplicaciones. Esos beneficios solo se obtienen a través del tiempo y el esfuerzo del desarrollador, no solo del mandato de mover todo a contenedores.

Ponga una aplicación monolítica o de estilo SOA de la vieja escuela en un contenedor y terminará con, bueno, una aplicación antigua en un contenedor. Eso no lo hace más útil para su trabajo; en todo caso, podría hacerlo menos útil. 

Docker no sustituye a las máquinas virtuales

Un mito persistente de los contenedores es que vuelven obsoletas las máquinas virtuales. Muchas aplicaciones que solían ejecutarse en una máquina virtual se pueden mover a un contenedor, pero eso no significa que todas puedan o deban. Si se encuentra en una industria con requisitos reglamentarios estrictos, por ejemplo, es posible que no pueda intercambiar contenedores por VM, porque las VM brindan más aislamiento que los contenedores.

El caso de los contenedores Docker

El trabajo de desarrollo empresarial es conocido por ser reservado y lento para reaccionar al cambio. Los desarrolladores empresariales se irritan constantemente con estas limitaciones: las limitaciones que les impone la TI, las demandas que les impone la empresa en general. Docker y los contenedores brindan a los desarrolladores más libertad que anhelan, mientras que al mismo tiempo brindan formas de crear aplicaciones comerciales que responden rápidamente a las condiciones comerciales cambiantes.