Podríamos llamar contenedor a una Máquina Virtual (MV a partir de ahora) ligera. Obviamente esto es una definición inexacta y realmente sería más acertado decir que es un “paquete” (contenedor) donde existe un servicio y las librerías asociadas para que funcione sin un S.O subyacente.

No está claro si la necesidad hizo virtud o al revés. Es decir, si nacieron los dockers como respuesta a dos grandes necesidades (microservicios y DevOps) o al revés. El caso es que durante los últimos años existía una necesidad debido al incipiente desarrollo a través de microservicios y del desarrollo tipo DevOps.

Microservicios — > Un esquema de microservicios podríamos decir que no se basa en la arquitectura monolítica con la que se estuvo desarrollando durante la primera década del 2000. En él se establece una API (Application programming interfaz) para comunicarse con varios servicios, pero sin tener un único “paquete” en el que todo está integrado. Esto ayudo a que cada vez que se cambiase algún modulo no debía de redistribuirse todo el paquete completo. La comparación con el sistema monolito para una aplicación web se observa en la siguiente imagen.

Arquitectura monolítica vs arquitectura de microservicios

DevOps — > Es un concepto de desarrollo de operaciones en un ciclo de ejecución-desarrollo continuo, en el que la integración entre desarrolladores y los administradores de “ese producto en desarrollo” es crucial. Este modelo de desarrollo permite seguir desarrollando servicios sin parar los que ya se están ejecutando y diseñar las pruebas que debe cumplir el software incluso antes de desarrollarse este.

Gracias a Docker estas dos filosofías de desarrollo (Devops y Microservicios) alcanzaron un potencial enorme, tanto que no se entiende una PaaS o una IaaS sin el uso de dockers o contenedores.

Pero si un contenedor no dispone de su propio S.O, ¿Cómo accede el contenedor a los recursos de la maquina física o virtual en la que se ejecuta? Ahí es donde entra nuestro amigo Docker Engine.

Docker CE (Docker engine Community Edition) es la plataforma Open Source que instalamos en una máquina virtual y/o física que nos permite comunicarnos con el sistema subyacente (SO + Hardware) y sobre la que “montamos” nuestros contenedores. Una de las desventajas que nos encontramos (por ahora) es que S.O de Windows pueden correr contenedores de Windows, pero no pueden correr servicios Linux. Esto se está solucionando actualmente.

Comparativa entre los sistemas virtuales (MVs) y contenedores