Con Docker, la agilidad y la adaptabilidad al cliente, así como la garantía de que los cambios implementados en cada ciclo de desarrollo funcionarán en producción, es mucho mayor.
La tecnología Docker comenzó a ser utilizada por los grandes gigantes tecnológicos (RedHat primero y luego Microsoft, Amazon, IBM, etc...) en 2013, el mismo año en que se liberó el código. Su uso hoy en día es masivo, no hay empresa u organización que consciente o inconscientemente no esté utilizando docker en alguna de sus áreas.
¿Por qué hay tanto revuelo en el mundo de la tecnología? ¿Cómo ha evolucionado y dónde se encuentra hoy en día? ¿Cómo influye en las empresas industriales? ¿Cómo se relaciona con el IoT/Edge computing?
En una serie de artículos vamos a explorar el impacto tecnológico, estratégico y empresarial de Docker en las organizaciones, así como algunas de sus aplicaciones más interesantes en el mercado.
Docker es una plataforma de software que le permite crear aplicaciones empaquetadas en contenedores, que incluyen todo lo necesario para que la aplicación se ejecute.
Según su propio sitio web, Docker es: "Un contenedor - Una unidad de software estándar que empaqueta tanto el código como las dependencias de una aplicación para que pueda ejecutarse de forma rápida y consistente de un entorno a otro. Un contenedor es un paquete de software ejecutable, autocontenido y ligero con todo lo que necesita una aplicación: código, herramientas del sistema, bibliotecas y configuraciones".
¿...y? Tres aspectos de esta definición son clave para comprender la revolución de Docker en la industria del desarrollo.
Los contenedores estandarizan las aplicaciones a nivel de despliegue y homogeneizan su ejecución en diferentes entornos, ya sea en la nube o en las instalaciones. Estas pequeñas piezas de software que compone el equipo de desarrollo son fácilmente ejecutables por el equipo de despliegue y dan consistencia a la solución.
Como product manager en Barbara IoT, tomamos la decisión de contenerizar nuestras aplicaciones desde el principio y vemos que fue la decisión correcta. La adaptabilidad al cliente y la garantía de que los cambios implementados en cada ciclo de desarrollo (normalmente 2 semanas) funcionarán en producción, es mucho mayor.
Como product managers, los contenedores nos permiten ahorrar costes de despliegue, hacer que las opciones del cliente sean versátiles con opciones locales (On-Prem) e incluso de diferentes proveedores de nube, ya que esta estandarización permite una migración barata y segura.
Un contenedor es autónomo, incluye código, bibliotecas, configuraciones y dependencias.
Hay que tener en cuenta la complejidad de desarrollar aplicaciones en el ordenador del desarrollador, probarlas en el ordenador de calidad, probarlas en el servidor de la empresa y, por último, desplegarlas en la nube del proveedor de turno.
La tecnología de contenedores hace que este proceso sea consistente. El software tiene todo lo que necesita para ejecutarse dentro del contenedor y con la versión que el desarrollador ha decidido. Se acabó el infierno del versionado con bibliotecas, sistemas operativos y sistemas de archivos. La imagen del contenedor se ejecuta dondequiera que la ejecute, desde el ordenador local hasta el servidor Edge en el campo.
¿Por qué no utilizamos máquinas virtuales? La tecnología de virtualización es mucho más pesada, ya que emula todo el HW del sistema además del software. Los contenedores son rápidos y ligeros, y permiten realizar iteraciones y despliegues en consecuencia. Los equipos de producto pueden construir y mantener las capacidades fácilmente y en arquitecturas más modulares, ahorrando costes y mejorando los tiempos de desarrollo y despliegue.
Como en cualquier configuración, al principio en Docker también hay que dedicar tiempo a preparar los servidores y adaptar las aplicaciones para que funcionen. Pero ese tiempo no cae en saco roto, porque según los siguientes puntos verás que en cada proyecto ahorra tiempo en TODOS los departamentos.
Al no tener que arrancar un sistema operativo como en una VM, un contenedor Docker puede arrancar inmediatamente o en cuestión de segundos.
Si se configura, cada despliegue (que normalmente contiene uno o más contenedores) puede estar en una subred separada de forma aislada.
En el caso de que algún tipo de virus o malware entre, sólo afectará a esa estructura de contenedor, y no al resto. Utilizando Docker-Compose, cada despliegue ya se realiza automáticamente en una subred independiente.
El mismo código se puede compartir entre diferentes contenedores, y cada contenedor puede tener una versión diferente de, por ejemplo, un apache.
De esta forma, sabemos cómo reacciona el mismo código al cambiar ese factor en nuestro entorno. Esto simplifica el seguimiento de la construcción, la ramificación y el control de versiones para aplicaciones multi-servicio, a la vez que se itera el código de forma independiente sin romper la aplicación.
Docker puede hacer que las pruebas de control de calidad sean más fáciles, rápidas y eficaces. Los contenedores pueden configurarse para que contengan solo una parte o partes de la configuración completa del entorno.
Los contenedores se crean mediante la línea de comandos o mediante un archivo de plantilla (Docker-Compose). Todo funciona igual bajo Docker. Es decir, si lanzamos el mismo comando o utilizamos la misma plantilla (teniendo en cuenta los volúmenes y un par de detalles específicos del hardware, como la RAM y la CPU, si se especifican), el contenedor que se ejecuta en la máquina A será exactamente el mismo que el contenedor que se ejecuta en la máquina B. Por lo tanto, no habrá variación entre los entornos de desarrollo, preproducción o producción.
Ahora ya sabemos lo que implica un docker o contenedor. En los siguientes artículos nos centraremos en las diferentes aplicaciones de esta tecnología y sus beneficios en la generación de valor en diferentes áreas de la empresa, desde los servidores en la nube hasta los dispositivos IoT de campo.
Si desea saber más sobre Docker y cómo el software de Barbara IoT puede ayudarle, póngase en contacto con nosotros.