DevOps es un modelo de mejora en las operaciones de IT de una empresa, centrado en mejorar la relación con el desarrollo del software. Su objetivo es alinear estos dos mundos para mejorar la entrega de software a la organización.
Los contenedores son una buena aproximación al modelo de DevOps porque definen el contexto de ejecución del software. Esto es: sistema operativo, recursos de hardware, redes, etc; sin necesidad de utilizar una máquina virtual y orientados al trabajo del equipo de desarrollo.
Docker permite a los desarrolladores definir el contenedor y el código que se va a ejecutar en éste, que será entregado al equipo de operaciones para su despliegue en un container o contenedor que soporte Docker, como Azure.
¿Por qué Docker?
Docker es un proyecto open source que permite automatizar el despliegue de cualquier aplicación de forma portable como un contenedor auto-suficiente que se puede ejecutar casi en cualquier lugar, incluyendo Microsoft Azure.
La gran ventaja de Docker es que se basa en ficheros de configuración. Los desarrolladores crean imágenes de su entorno de aplicación para que todo el equipo de desarrollo trabaje con el mismo sistema. No hablamos de pesadas máquinas virtuales. Los contenedores de Docker sólo contienen la aplicación y algunas librearías de soporte, mientras que el sistema operativo es compartido.
Como podemos ver en la imagen anterior, la implementación de Docker está soportada tanto en Linux como en Windows Server, y al ser más ligeras que las máquinas virtuales, arrancan más rápido y permiten mantener diferencias entre distintas versiones de una forma muy simple.
¿Qué diferencias hay entre una máquina virtual Hyper-V y un contenedor?
El enfoque de un contenedor se encuentra en la aplicación y sus recursos, no en dar servicio como sistema operativo. Con este enfoque, se consiguen las siguientes diferencias:
Característica | Hipervisores | Contenedores |
Aislamiento de procesos | Más o menos completo | Si se obtiene la raíz, el host del contenedor podría ponerse en peligro |
Memoria en disco necesaria | Sistema operativo más aplicaciones completos | Solo requisitos de aplicación |
Tiempo que se tarda en iniciar | Significativamente más largo: el arranque del SO más la carga de la aplicación | Significativamente más corto: solamente es necesario que se inicien las aplicaciones porque el kernel ya está en ejecución |
Automatización de contenedores | Varía considerablemente dependiendo del sistema operativo y las aplicaciones | Galería de imágenes de Docker; otros |
Docker en Azure
Como iré mostrándote en siguientes artículos de este blog, Azure ofrece un componente que instalamos en una máquina virtual para ejecutar el motor de Docker y administra la comunicación con la máquina virtual.
Además, hay diversas extensiones que permiten administrar la seguridad, el kernel, la red u otros componentes del sistema operativo.
Todo esto, soportando el estándar del cliente de Docker para que se puedan desplegar contenedores en Azure, tanto en máquinas virtuales Linux como en el nuevo Windows Server 2016.
Como desarrolladores, tenemos que acercarnos al núcleo donde se ejecuta nuestra aplicación. Usar contenedores nos ayudará a dar ese paso y conocer mejor nuestro contexto de ejecución para implementar mejores soluciones de software. Todo esto soportado por un equipo de infraestructuras y/u operaciones que gestionará mejor el entorno de ejecución de las aplicaciones, garantizando el mejor rendimiento y seguridad de las mismas.