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 empezó 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? ¿Cómo influye en las empresas industriales? ¿Cómo se relaciona con el IoT/la computación de borde?
En una serie de artículos vamos a explorar el impacto tecnológico, estratégico y de negocio de Docker en las organizaciones, así como algunas de sus aplicaciones más interesantes en el mercado.
Docker es una plataforma de software que 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 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 ligero, autocontenido y ejecutable 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 entender 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 jefe de producto 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 seguridad de que los cambios implementados en cada ciclo de desarrollo (normalmente 2 semanas) funcionarán en producción, es mucho mayor...
Como responsables de producto, los contenedores nos permiten ahorrar costes de despliegue, hacer versátiles las opciones del cliente con opciones locales (On-Prem) e incluso de diferentes proveedores de cloud ya que esta estandarización permite una migración barata y segura.
Un contenedor es autocontenido, incluye código, librerías, 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 finalmente desplegarlas en la nube del proveedor de turno.
La tecnología de contenedores hace que este proceso sea coherente. 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 de las versiones con las bibliotecas, los sistemas operativos y los sistemas de archivos. La imagen del contenedor se ejecuta dondequiera que se ejecute, desde el ordenador local hasta el servidor de borde en el campo.
¿Por qué no utilizamos máquinas virtuales? La tecnología de virtualización es mucho más pesada, emulando 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 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 se ahorra tiempo en TODOS los departamentos.
Al no tener que arrancar un sistema operativo como en una VM, un contenedor Docker es capaz de arrancar inmediatamente o en cuestión de segundos.
Si se configura, cada despliegue (que suele contener uno o más contenedores) puede estar en una subred separada de forma aislada.
En el caso de que entre algún tipo de virus o malware, sólo afectará a esa estructura de contenedores, y no al resto. Usando Docker-Compose, cada despliegue ya se hace automáticamente en una subred independiente.
El mismo código puede ser compartido entre diferentes contenedores, y cada contenedor puede tener una versión diferente de, por ejemplo, un apache.
De esta manera, sabemos cómo reacciona el mismo código al cambiar ese factor en nuestro entorno. Esto simplifica el seguimiento de la compilación, la ramificación y el control de versiones para las aplicaciones multiservicio, 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 toda la configuración del entorno.
Los contenedores se crean por línea de comandos o por 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 hierro, como la RAM y la CPU, si se especifican), el contenedor que se ejecute en la máquina A será exactamente el mismo que el que se ejecute en la máquina B. Por lo tanto, no habrá ninguna variación entre los entornos de desarrollo, preproducción o producción.
Ahora ya sabemos en qué consiste un docker o contenedor. En los siguientes artículos nos centraremos en las diferentes aplicaciones de esta tecnología y en sus beneficios a la hora de generar valor en diferentes ámbitos de la empresa, desde servidores en la nube hasta dispositivos de campo IoT.
Si quiere saber más sobre Docker, y cómo el software Barbara IoT puede ayudarle, póngase en contacto con nosotros.